這使我瘋了。 httpd以用戶apache身份運行。我在/ var/www/html中有兩個目錄 - 上傳和照片。都有組:apache:apache的所有者。兩者都是755. uploads可以從php寫入 - 照片不是。權限被拒絕寫入到一個目錄,但沒有寫入另一個 - 都擁有相同的所有者/組/ 755
一些測試代碼:
var_dump(touch('/var/www/html/photos/_test.log'));
var_dump(touch('/var/www/html/uploads/_test.log'));
var_dump(touch('/var/www/html/uploadsasdf/_test.log'));
和結果:通過外殼和GUI界面
Warning: touch(): Unable to create file /var/www/html/photos/_test.log because Permission denied in /var/www/html/test.php on line 2
bool(false)
bool(true)
Warning: touch(): Unable to create file /var/www/html/uploadsasdf/_test.log because Permission denied in /var/www/html/test.php on line 4
bool(false)
我已經確認權限。我已經做好了準備,並再次將所有東西都沾上一切。我已將上傳目錄重命名爲其他內容,並將照片重命名爲上傳,以查看該目錄的名稱是否是此處的關鍵字,但事實並非如此。這是目錄本身。重命名的上傳仍然以新名稱起作用,而現在稱爲「上傳」的照片目錄不會。
值得注意的是,_test.log在測試之前並不存在於文件夾中,所以它不像是該文件具有不良的權限或任何內容。有趣的是,如果我創建一個新的目錄,將其設置爲apache:apache,將它的chmod設置爲777,我不能寫入它,因此這裏可能有更大的錯誤;但問題仍然存在:爲什麼然後上傳目錄工作?
有沒有人見過這種行爲?我錯過了明顯的東西嗎?
在此先感謝您的幫助!
編輯以添加更多的信息:
exec('whoami')
「阿帕奇」
var_dump(posix_getpwuid(fileowner('/var/www/html/')));
var_dump(posix_getpwuid(fileowner('/var/www/html/uploads/')));
var_dump(posix_getpwuid(fileowner('/var/www/html/photos/')));
所有的 「阿帕奇」
都具有相同的fileperms()值。 但是,除了「上傳」之外,is_writable()都是錯誤的。
mkdir('var/www/html/test');
警告命令mkdir():權限被拒絕
ls-alF
drwxr-xr-x. 2 apache apache 286720 Nov 22 15:17 photos/
drwxr-xr-x. 2 apache apache 81920 Nov 22 12:06 uploads/
drwxr-xr-x. 2 apache apache 6 Nov 22 10:31 uploadsasdf/
我呼籲clearstatcache()函數;我重新啓動了服務器。到底怎麼回事?
謝謝!我將其標記爲答案,因爲它是第一個,並讓我走上了正確的道路。這個問題確實與selinux有關,但chcon不能出於某種原因而工作,並且semanage沒有安裝在這臺服務器上。所以我yum安裝了semanage,然後運行以下兩個命令添加一個新的上下文,然後應用它:** semanage fcontext -a -t httpd_sys_rw_content_t/var/www/html/photos ** ... ** restorecon -Rv/var/www/html/** – Sarthaz 2014-11-24 14:19:43