2013-05-09 122 views
1

我試圖讓我的php cgi進程從我的文件系統上的文件讀取。文件和父文件夾都具有允許的所有rwx權限,並且該文件與php進程www-data具有相同的所有者和組ID。php5-fpm無法打開讀取文件

無論我怎樣嘗試打開該文件(閱讀(),file_get_contents()函數,stream_get_contents()),我總是得到同樣的錯誤: failed to open stream: Permission denied

我沒有問題,在PHP交互打開文件會話,在命令行上使用cat,或使用python。

這是怎麼回事?

+0

如果你sudo su www-data然後通過CLI-php運行腳本會發生什麼? – 2013-05-09 02:32:22

+0

權限被拒絕!這裏發生了什麼?文件和文件夾都有777個權限。 – cachance7 2013-05-09 03:13:42

+0

此外,鏈上的所有父文件夾也設置了777個權限。 – cachance7 2013-05-09 03:34:14

回答

1

我以前在啓用SELinux的Linux系統上看到過這個問題。 httpd進程通常被賦予它自己的安全上下文,只允許某些文件被訪問。

您可以通過在文件和php腳本上運行ls --scontext來檢查SELinux是否啓用。如果這兩個文件具有相同的上下文,或者如果ls抱怨論證,那麼SELinux可能不是問題的原因。

假設SELinux是問題的原因,那麼你可以嘗試設置有問題的文件與你的php腳本具有相同的安全上下文,命令爲chcon。例如:

chcon --reference=/var/www/html/page.php /data/filetoread 

其中/var/www/html/page.php是你的PHP腳本,/data/filetoread的是,你要訪問的文件。

+0

我試過'ls --context '這個腳本和我正在嘗試讀取的文件,但是這兩種嘗試都導致了'? '。我不認爲SELinux在這裏玩... – cachance7 2013-05-09 03:32:40

0

事實證明,這個文件是在一個FUSE文件系統下,它沒有與allow_other選項一起安裝。