AWS EC2 PHP session_start权限被拒绝

我有一个与PHP有关的会话保存path的奇怪问题。 我在我的php.ini中configuration了session.save_path =“/ tmp”,并且我知道这是正确configuration的,因为在服务器中我可以input以下命令并且命令结果似乎很好。

$ 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) 

所以这里的path与php.ini中configuration的/ tmp完全不同。

这种行为有什么理由吗? 我已经检查了在我的代码中没有任何调用session_save_path来更改默认的保存path。

出现此问题的服务器是AWS EC2实例。

您也可以将其添加到您的弹性beanstalk project.config文件中:

“/etc/httpd/conf.d/php.conf”:content:| php_value session.save_path“/ tmp”

这将只为您设置会话保存path

我发现这个问题,似乎是一个configuration问题。 我已经在服务器中打开了phpinfo,并看到以下内容:

 Directive Local Value Master value session.save_path /var/lib/php/session /tmp 

指向/ var / lib / php / session的本地值似乎是问题,因为此目录不能被服务器用户写入。 我对当地的和价值的东西一无所知,经过一番挖掘,我阅读了以下内容:

可以使用php_value指令在httpd.conf,.htaccess或其他Apacheconfiguration中的“本地值”中覆盖“Master Value”(来自php.ini)。

所以看了看服务器文件后,我发现/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.iniconfiguration。 我可以评论这最后一行“#”,并重新启动服务器,所有工作如预期再次。

希望这个帮助。

你也可以通过ssh进行连接(如果你最初configuration了密钥/对),并更改文件夹的权限,使其由webpp用户拥有

这个快速解决scheme是在你的session_start()之前放置以下内容:

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

从这里带走