web-dev-qa-db-ja.com

session_start()を呼び出すときのアクセス権エラーを修正するにはどうすればよいですか?

スクリプトをサーバーにアップロードしたときに、このエラーが発生しました

警告:不明:open(/ tmp/sess_58f54ee6a828f04116c2ed97664497b2、O_RDWR)が失敗しました:行0の不明でアクセス権が拒否されました(13)

警告:不明:セッションデータ(ファイル)の書き込みに失敗しました。行0のUnknownで、session.save_pathの現在の設定が正しい(/ tmp)であることを確認してください

/ tmpフォルダーの権限を777に設定しましたが、session_start();を呼び出すとエラーが発生しました。

23

データを書き込むことができるセッションパスを変更するか、/ tmpの問題についてサーバー管理者に連絡してください

http://php.net/manual/en/function.session-save-path.php

27
Tadas Šubonis

session.save_path php.iniディレクティブを変更する必要があります

あなたはsession_save_pathを使用してそれを行うことができます

10
German Rumm

SSHアクセス権がある場合、権限と所有権を修正する方法は次のとおりです

Sudo chown -R NAME_OF_USER /tmp

NAME_OF_USERを、phpを実行するユーザーに置き換えます。これらの行をphpファイルに置くだけで見つけることができます。

$processUser = posix_getpwuid(posix_geteuid());
print $processUser['name'];
exit;
6
pixeline

ディスクスペースの問題が発生していないことを確認します。すべてのアクセス許可が正しい場合(および777がそれを実行する必要がある場合)、PHPおよびApacheのバージョンによっては)十分なスペースがない場合でも、このエラーが発生する可能性がありますディスクに書き込みます。

3
Haz

さらに、この関数にアクセスできる場合は、ini_set('session.save_path', '/dir/here');を使用することもできます。提案されている他の方法は有効です。

3
Norm

これは古い投稿だと思いますが、この問題に遭遇し、簡単な解決策を見つけました。

私にとって、この問題は私のローカルWebサイトの1つで発生していました。他のブラウザを使用してウェブサイトにアクセスしようとしたことはありませんでしたが、Chrome経由でこのサイトにアクセスしようとするたびに発生していました。 Chrome開発者ツールの[アプリケーション]タブに移動し、[ストレージのクリア]をクリックすることにしました。ほら、すべてが再び魔法のように機能しています。

これが他の誰かを助けることを願っています!

2
Whipenstein

私はちょうどPHPスクリプトの1つでまったく同じ問題を抱えていましたが、前日に完全に機能し、自分のローカルから実行しています)パピーリナックスマシンなので、ホストでも何でもありません。

その前に私が行っていた唯一のことは、JavaをWebブラウザで機能させることでした。そのため、いくつかの方法でJava動作するが壊れたPHP-おっと!

とにかく、Java=を動作させようとしているときに、/ tmpフォルダーの内容を削除して問題を引き起こしている可能性があるものをすべて消去しました(実際にはJava新しいFirefoxで古いプラグインoijを使用していた)

この問題を解決するために、Rox File Managerを開き、/フォルダーに移動して、tmpを右クリックしましたfolder -> Mount Point 'tmp' and clicked properties

権限が所有者-読み取り、書き込み、実行に設定されていることに気付きましたが、グループとワールドは読み取りと実行にのみ設定され、書き込みには設定されていません。 GroupとWorldの両方のWriteにチェックマークを付けたところ、PHPは再び正常に動作します。

どの時点でtmpの権限が変更されている必要があるのか​​はわかりませんが、PHPを使用するには、書き込み権限が設定されている必要があります。

2
TheKLF99

次の行を追加

ini_set('session.save_path', getcwd() . '/tmp');

session_start(); 
2
Ozan Olmez

次の状況でこの問題が発生しました。

  1. 私はいくつかのセッション変数をPHPで満たしました
  2. セッションがまだアクティブな間に、ホストでPHP 5.4から5.3に変更しました。
  3. ページをリロードすると、上記のエラーが発生しました。
  4. PHPバージョンを再度5.4にリセットします。
  5. 使用されたsession_unset();およびsession_destroy();現在のセッションをクリーンアップします。
  6. PHPバージョンを5.3に戻しました。
  7. 今では再び動作します。

結論:無関係な理由で、PHPバージョンを変更する必要がありました。また、アクティブなセッションで切り替えると、セッションが破損します。

2
Erwin Okken

同じ許可の問題がありますが、/ var/lib/php/session /にあります。

修正するには、ファイルを削除してphp-fpmを再起動します。

rm -rf /var/lib/php/session/sess_p930fh0ejjkeeiaes3l4395q96
Sudo service php5.6-fpm restart

これですべてうまくいきます。

2
oussaka

次の場合:

  • session.gc_probability> 0
  • セッションファイルは、異なるユーザー(ルートやApacheなど)によって作成されます。
  • セッションファイルはすべて同じ場所に保存されます(例:/ var/lib/php/session)

次に、このエラーが表示されます。 Apache PHPプロセスは、セッションファイルでガベージコレクションを実行しようとします。

修正:

  1. 再構成PHPなのでgc_probabilityは0であり、cronジョブで古い/古いファイルを削除します。
  2. ユーザーごとにセッションファイルを別々の場所(session_save_path()など)に保存します。
1
David Goodwin

Apache Webサーバーを使用している場合、簡単な修正は、コマンドラインに移動して次のように入力することです。

open /etc/Apache2/

次に、開いたウィンドウからhttpd.confというファイルを開き、UserまたはGroupを検索して、これらの2行を次のように変更します。

User  _www
Group _www

これは、サーバーにシステムディレクトリへのアクセス許可を付与するため、特にUserを変更するため、またはGroupstaffまたはadmin

1
Hassan Azimi

Nginxが/ tmpの場所を所有していたために最初にこの問題が発生し、www.confによりphp-fpmが「Apache」ユーザーおよびグループで実行されていました。そのファイルでユーザー/グループを交換したところ、問題なく動作しました。 <?php echo exec('whoami'); ?>を確認して確認することもできます。

0
Mark

PHP 5.6を使用して、ドメイン構造内のディレクトリを指すために、すでにsession_save_path()を使用していました。PHP 7.0にアップグレードするまで、これは問題なく機能しました。 PHP.net で、ダイレクトパスの割り当てが常に機能するとは限らないことを示すコメントをいくつか見つけたので、それらの提案を使用しました。

session_save_path(realpath(dirname($_SERVER['DOCUMENT_ROOT']) . '/../session'));

完璧に働いた。変更することを忘れないでください/../sessionを実際のセッションディレクトリの相対位置に変更します。

0
JBH

私にとって、問題はWHMバグのようです!私はたくさんのアドオンドメインを持っていますが、すべて正常に動作しますが、サブドメインではこのエラーが発生します。

奇妙なことですが、メインドメインで完全なURLを使用すると、正常に動作します。

main-domain.com/my.subdomain.com

サブドメインを直接使用すると、「Permission denied(13)」が表示されます。

my.subdomain.com

すべてのアドオンドメインのルートは次のとおりです。

/ home/xx /

しかし、私のサブドメインでは、理由はわかりません、ルートは次のとおりです(そのディレクトリへのアクセス権は必要ありません)。

/

したがって、実際に到達しようとしています:/ home/xx/tmpではなく/ tmp

これも存在しますが、適切な権限がありません

これを明確にするために、パス全体の例を示します。

/ home/my-account/public_html

/ home/my-account/tmp

/ tmp

私が使用した回避策は:

session_save_path( '/ home/my-account/tmp');

session_start();

0
ebelendez