web-dev-qa-db-ja.com

AWS EC2 PHP session_startwithpermissiondenied

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インスタンスです。

1
alvarolb

問題を見つけましたが、構成に問題があるようです。サーバーで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構成を上書きしています。この最後の行を「#」でコメントしてサーバーを再起動すると、すべてが期待どおりに再び機能します。

この助けを願っています。

0
alvarolb

これをエラスティックbeanstalkproject.configファイルに追加することもできます。

"/etc/httpd/conf.d/php.conf":コンテンツ:| php_value session.save_path "/ tmp"

セッション保存パスを設定するだけです

2
Ryan Badger

Sshを介して接続し(最初にキー/ペアを構成した場合)、フォルダーのアクセス許可を変更して、webppユーザーが所有するようにすることもできます。

0

これに対する簡単な解決策は、session_start()の前に次のものを置くことです。

<?php
$dir = sys_get_temp_dir();
session_save_path($dir);
?>

...ここから取得

0
Woody Hayday