Php

AWS EC2 PHP session_start 權限被拒絕

  • March 20, 2014

我有一個與 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 的任何呼叫來更改預設保存路徑。

有這個問題的伺服器是一個 AWS EC2 實例。

我發現了問題,並且似乎是配置問題。我在伺服器中打開了一個 phpinfo 並看到以下內容:

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

指向 /var/lib/php/session 的本地值似乎是問題所在,因為伺服器使用者不可寫入此目錄。我對本地和主值一無所知,在Google搜尋後,我讀到以下內容:

“主值”(來自 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 配置。我可以用“#”註釋最後一行並重新啟動伺服器,一切都再次按預期工作。

希望這有幫助。

您還可以將其添加到彈性 beanstalk project.config 文件中:

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

這將為您設置會話保存路徑

引用自:https://serverfault.com/questions/558641