2010-10-07 93 views
13

我感到困惑與此代碼:PHP:fopen()函數權限被拒絕

test.php的:

fopen('test.txt','a+'); 

當我執行它,我得到一個錯誤:

Warning: fopen(test.txt): failed to open stream: 
    Permission denied in /var/www/html/yuelu3/mobile/text.php on line 2 

測試.txt:

-rwxrwxrwx. 1 jt jt  87 10月 7 20:58 test.txt 

問題在哪裏?

非常感謝!我發現了問題,我使用FC13,因爲SELinux的保護,有些操作被拒絕。所以,我只需要擺脫保護。

+4

更多關於上下文將任何機會是位於一個NFS安裝目錄中的文件:這可以使用解決了嗎? – SirDarius 2010-10-07 13:46:27

+3

你還檢查了文件所在目錄的權限嗎? – 2010-10-07 13:47:21

+1

php是以'jt'用戶身份運行嗎?如果您要打開的文件是由其他用戶擁有的,那也可能是一個問題。 – methode 2010-10-07 13:53:44

回答

5

使用fopen($_SERVER['DOCUMENT_ROOT'].'test.txt','a+');

+2

+1並考慮檢查file_exists也! – Fenton 2010-10-07 14:46:34

13

嘗試

fopen('/path/to/file/test.txt','a+'); 

fopen('test.txt','a+'); 

在另一個目錄

4

路徑是最有可能尋找總是會引起問題試圖打開文件時。當您嘗試打開文件時,避免出現任何問題的簡單方法是檢查您處於的目錄以及您撥打電話的位置。

echo getcwd(); 

創建一個簡單的PHP頁面並打個電話打印當前目錄。將PHP頁面放到與文件相同的目錄中,它會告訴你文件夾的正確路徑,然後添加/filename.xxx。

4

檢查文件的SELinux上下文模式,以確保它被設置爲:httpd_user_content_t

...如果不是的話,使用:

chcon httpd_user_content_t test.txt 

...糾正問題。

6

當嘗試在使用PHP的服務器上編寫文件時,我一直收到同樣的錯誤「未能打開流。權限被拒絕」。 我試圖在互聯網上修復錯誤。我將服務器上的文件,目錄和子目錄的所有權更改爲「apache」,我在所有文件,目錄,子目錄上執行了「chmod 777」,我運行了「restorecon -R」,我運行了「chcon unconfined_u:object_r:所有文件中的「httpd_user_content_t:s0」,但唯一看起來奏效的就是完全關閉SELinux。

我終於解決了這個問題。問題在於SELinux使用的布爾參數。 我執行了以下命令以獲取與httpd相關的所有布爾值列表。

$ getsebool -a | grep httpd

這給出了大約36個參數的列表。

我痛苦地去了,打開使用setsebool命令每一個布爾直到「未能打開流。Permission denied」錯誤走了。

當我打開httpd_unified布爾值時,錯誤消失了! 當我把它關掉時,錯誤回來了!

+0

非常感謝。我只是將所有目錄和子目錄的chmod更改爲777,對我來說工作得很好! – 2016-11-03 07:40:14