スクリプトをサーバーにアップロードしたときに、このエラーが発生しました
警告:不明:open(/ tmp/sess_58f54ee6a828f04116c2ed97664497b2、O_RDWR)が失敗しました:行0の不明でアクセス権が拒否されました(13)
警告:不明:セッションデータ(ファイル)の書き込みに失敗しました。行0のUnknownで、session.save_pathの現在の設定が正しい(/ tmp)であることを確認してください
/ tmpフォルダーの権限を777に設定しましたが、session_start();
を呼び出すとエラーが発生しました。
データを書き込むことができるセッションパスを変更するか、/ tmpの問題についてサーバー管理者に連絡してください
session.save_path
php.iniディレクティブを変更する必要があります
あなたはsession_save_path
を使用してそれを行うことができます
SSHアクセス権がある場合、権限と所有権を修正する方法は次のとおりです
Sudo chown -R NAME_OF_USER /tmp
NAME_OF_USERを、phpを実行するユーザーに置き換えます。これらの行をphpファイルに置くだけで見つけることができます。
$processUser = posix_getpwuid(posix_geteuid());
print $processUser['name'];
exit;
ディスクスペースの問題が発生していないことを確認します。すべてのアクセス許可が正しい場合(および777がそれを実行する必要がある場合)、PHPおよびApacheのバージョンによっては)十分なスペースがない場合でも、このエラーが発生する可能性がありますディスクに書き込みます。
さらに、この関数にアクセスできる場合は、ini_set('session.save_path', '/dir/here');
を使用することもできます。提案されている他の方法は有効です。
これは古い投稿だと思いますが、この問題に遭遇し、簡単な解決策を見つけました。
私にとって、この問題は私のローカルWebサイトの1つで発生していました。他のブラウザを使用してウェブサイトにアクセスしようとしたことはありませんでしたが、Chrome経由でこのサイトにアクセスしようとするたびに発生していました。 Chrome開発者ツールの[アプリケーション]タブに移動し、[ストレージのクリア]をクリックすることにしました。ほら、すべてが再び魔法のように機能しています。
これが他の誰かを助けることを願っています!
私はちょうど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を使用するには、書き込み権限が設定されている必要があります。
次の行を追加
ini_set('session.save_path', getcwd() . '/tmp');
前
session_start();
次の状況でこの問題が発生しました。
結論:無関係な理由で、PHPバージョンを変更する必要がありました。また、アクティブなセッションで切り替えると、セッションが破損します。
同じ許可の問題がありますが、/ var/lib/php/session /にあります。
修正するには、ファイルを削除してphp-fpmを再起動します。
rm -rf /var/lib/php/session/sess_p930fh0ejjkeeiaes3l4395q96
Sudo service php5.6-fpm restart
これですべてうまくいきます。
次の場合:
次に、このエラーが表示されます。 Apache PHPプロセスは、セッションファイルでガベージコレクションを実行しようとします。
修正:
Apache
Webサーバーを使用している場合、簡単な修正は、コマンドラインに移動して次のように入力することです。
open /etc/Apache2/
次に、開いたウィンドウからhttpd.conf
というファイルを開き、User
またはGroup
を検索して、これらの2行を次のように変更します。
User _www
Group _www
これは、サーバーにシステムディレクトリへのアクセス許可を付与するため、特にUser
を変更するため、またはGroup
をstaff
またはadmin
。
Nginxが/ tmpの場所を所有していたために最初にこの問題が発生し、www.confによりphp-fpmが「Apache」ユーザーおよびグループで実行されていました。そのファイルでユーザー/グループを交換したところ、問題なく動作しました。 <?php echo exec('whoami'); ?>
を確認して確認することもできます。
PHP 5.6を使用して、ドメイン構造内のディレクトリを指すために、すでにsession_save_path()を使用していました。PHP 7.0にアップグレードするまで、これは問題なく機能しました。 PHP.net で、ダイレクトパスの割り当てが常に機能するとは限らないことを示すコメントをいくつか見つけたので、それらの提案を使用しました。
session_save_path(realpath(dirname($_SERVER['DOCUMENT_ROOT']) . '/../session'));
完璧に働いた。変更することを忘れないでください/../session
を実際のセッションディレクトリの相対位置に変更します。
私にとって、問題は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();