PHPセッション保存パスに関連する奇妙な問題があります。php.iniでsession.save_path = "/ tmp"を構成しましたが、サーバー次のコマンドを入力できましたが、コマンドの結果は問題ないようです。
$ php -i | grep session.save_path
session.save_path => /tmp => /tmp
ただし、phpコードからセッションを開始しようとすると、次のエラーが発生します。
Warning: session_start(): open(/var/lib/php/session/sess_7ktfe84jqca3ga6ftk6fsrurv6, O_RDWR) failed: Permission denied (13)
したがって、ここでのパスは、php.iniで構成された/ tmpとはまったく異なります。
この動作の理由はありますか?コードに、デフォルトの保存パスを変更するためのsession_save_pathの呼び出しがないことを確認しました。
この問題のあるサーバーはAWSEC2インスタンスです。
問題を見つけましたが、構成に問題があるようです。サーバーでphpinfoを開いたところ、次のように表示されます。
Directive Local Value Master value
session.save_path /var/lib/php/session /tmp
/ var/lib/php/sessionを指すローカル値は、このディレクトリがサーバーユーザーによって書き込み可能ではないため、問題のようです。私はローカルとマスターの価値について何も知りませんでした、そしてグーグルで少し掘り下げた後、私は以下を読みました:
「マスター値」(php.iniから)は、httpd.conf、.htaccess、またはphp_valueディレクティブを使用したその他のApache構成の「ローカル値」で上書きできます。
したがって、サーバーファイルを調べた後、次の内容を含む/etc/httpd/conf.d/php.confが見つかりました。
#
Apache specific PHP configuration options
those can be override in each configured vhost
#
php_value session.save_handler "files"
php_value session.save_path "/var/lib/php/session"
したがって、問題があります。このphp.confは、デフォルトのphp.ini構成を上書きしています。この最後の行を「#」でコメントしてサーバーを再起動すると、すべてが期待どおりに再び機能します。
この助けを願っています。
これをエラスティックbeanstalkproject.configファイルに追加することもできます。
"/etc/httpd/conf.d/php.conf":コンテンツ:| php_value session.save_path "/ tmp"
セッション保存パスを設定するだけです
Sshを介して接続し(最初にキー/ペアを構成した場合)、フォルダーのアクセス許可を変更して、webppユーザーが所有するようにすることもできます。
これに対する簡単な解決策は、session_start()の前に次のものを置くことです。
<?php
$dir = sys_get_temp_dir();
session_save_path($dir);
?>