Php
AWS EC2 PHP session_start 權限被拒絕
我有一個與 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”
這將為您設置會話保存路徑