2010-09-14 156 views
1

當我使用PHP的mkdir()創建目錄時,文件夾的所有者是'apache'。當我通過FTP創建一個目錄時,所有者是'ftpadmin'。Apache文件夾權限

出於某種奇怪的原因,使用PHP的rename()函數,我無法將任何文件移動到「apache」擁有的目錄中。我有chmod()文件和目錄777和0777,但'阿帕奇'拒絕將任何文件移動到它創建的目錄。我可以將'apache'文件移動到'ftpadmin'目錄中。我已經嘗試了chmod()mkdir()以及777,0777,755,0755,1777,01777和更多。

這些目錄需要由我的客戶端動態生成,並且需要將文件移入和移出。

服務器是一個專用虛擬服務器,我可以ssh進入並擁有管理權限。

回答

1

呼吸安全模式功能? http://www.php.net/manual/en/features.safe-mode.functions.php

rename()檢查正在運行的文件或目錄是否與正在執行的腳本具有相同的UID(所有者)。檢查腳本所在的目錄是否與正在執行的腳本具有相同的UID(所有者)。

如果安全模式打開,請將其關閉,然後解決它在適當級別提供的功能。如果這不是問題,那麼顯示php無疑會發出的實際錯誤可以幫助我們很多。

+0

謝謝!我將php.ini錯誤報告設置爲E_ALL,這正是返回的錯誤。奇怪的是,我有PHP(「apache」用戶)創建目錄和文件(或上傳),但由於某種原因,文件夾和文件被分配給不同的用戶... – Nick 2010-09-16 19:02:46

0

PHP以用戶Apache身份運行。您的FTP帳戶正在以用戶'fpadmin'運行。這就是業主不同的原因。你有沒有試過chown()php函數(http://php.net/manual/en/function.chown.php)?這將更改文件/目錄的所有者。

乾杯


唉,我先下投票。這刺激..雖然這是一個愚蠢的回答..

好吧,所以我想了解你的問題/複製你的錯誤。這是我試過的,這裏是我的結果。希望它至少對你有一些用處。

我有以下目錄結構:

/var/www/public_html/test (chmod = 777 via SSH, owned by 'ftpuser') 
/var/www/public_html/test/index.php (chmod = 777 via SSH, owned by 'ftpuser') 
/var/www/public_html/test/ftp_owned.file (chmod = 644 (default), owned by 'ftpuser') 

然後在index.php文件我有以下代碼:

mkdir("./downvoted"); 
chmod("./downvoted", 0777); 
$h = fopen("./i_am_so.sad", "x+"); 
fwrite($h, "attempting to redeem myself"); 
fclose($h); 
rename("./i_am_so.sad", "./downvoted/i_am_so.sad"); 
rename("./ftp_owned.file", "./downvoted/ftp_owned.file"); 

在一個新的目錄結構得到的:

/var/www/public_html/test (chmod = 777 via SSH, owned by 'ftpuser') 
/var/www/public_html/test/index.php (chmod = 777 via SSH, owned by 'ftpuser') 
/var/www/public_html/test/downvoted (chmod = 0777 via PHP, owned by 'apache') 
/var/www/public_html/test/downvoted/i_am_so.sad (permissions = 644 (default), owned by 'apache') 
/var/www/public_html/test/downvoted/ftp_owned.file (permissions = 644 (default), owned by 'ftpuser') 

仍然難過,因爲我無法重現錯誤,也無法兌現自己。希望你可以發佈你收到的錯誤(許可被拒絕?)或指出我的實驗與你的應用程序有什麼不同。

+0

來自Apache的chown不會改變任何正確設置的系統上的任何東西。 – unbeli 2010-09-14 21:57:16

+1

你不能用chown「放棄」文件,所以你不能把ftpadmin文件傳給apache。只有root可以做到這一點。 – 2010-09-14 22:05:19

+0

是的,謝謝,我知道我只是沒有想到。 upvoted強調我的錯誤信息。 – 2010-09-14 22:35:11