2012-01-05 71 views
3

問題PHP的mkdir()和Apache所有權問題

我試圖將文件上傳到PHP通過我自己的服務器。如果文件夾不存在,首先我嘗試創建文件夾;

mkdir($folder, 0700); 

我的腳本正在創建文件夾,但apache是​​文件夾(和文件)的所有者,所以我無法訪問我上傳的文件。

我在我的服務器中關閉了safe_mode。我仍然無法找到解決這個問題的方法。

如果有人能幫我解決這個問題,我會很高興。

注意: 我試過0755,0777不會改變任何東西。 Apache是​​創建的文件夾的所有者。

+0

權限700是非常嚴格的。在* only *中,所有者可以對目錄執行任何操作。所以你所描述的是預期的。 – 2012-01-05 18:34:23

+0

你有沒有檢出http://stackoverflow.com/questions/2560762/php-mkdir-and-apache-ownership? – j08691 2012-01-05 18:35:42

+0

@ j08691;是的,我檢查了所有。正如我所提到的,safe_mode已關閉。 @Jason McCreary,即使我改變權限,沒有任何變化,仍然'apache'是文件夾的所有者。 – Revenant 2012-01-05 18:37:39

回答

2

我建議重新配置Web服務器使用suEXECsuPHP。這種方法的缺點是你不得不在CGI模式下使用PHP而不是Apache模式。儘管如此,我還沒有看到這在中低流量網站上成爲問題。主要好處是您的腳本將以擁有它們的人員身份運行,因此腳本所產生的任何新目錄或文件都將自動由所述用戶擁有。

最後,如果你的問題是只是與創建新的目錄,而不是文件,你沒有任何存儲不應由窺探讀取,然後chmod($path, 0755);將解決您的問題。

+0

我試過chown(),據我瞭解,它可能帶來很高的安全性問題。我寧願安全。 – Revenant 2012-01-05 18:39:01

+0

我不得不改變我的答案,我不知道'chown()'需要你以root身份運行腳本才能工作。 – Crontab 2012-01-05 18:41:12

+0

我不知道如何在這些細節處理服務器。我猜這個沒有別的辦法。 – Revenant 2012-01-05 18:57:28

0

當然。上傳目錄必須是可寫的other /訪問,即:XX7:

// fill APPPATH with a suitable directoy name 

if (! file_exists(APPPATH . 'uploads')) 
{ 
    mkdir(APPPATH . 'uploads', 0757, TRUE); 
} 

7: owner permissions, ie: rwx 
5: group permissions, ie: rx 
7: other permissions, ie: rwx 
+0

它創建文件夾,我沒有問題。問題是apache是​​文件夾的所有者。 – Revenant 2012-01-05 18:48:36

+0

是的,apache也是上傳文件的所有者。只需使目錄/文件夾可寫並可由其他用戶訪問。 – 2012-01-05 18:53:14

+0

如果這不起作用,我認爲問題必須在腳本的另一部分。你如何訪問上傳的文件? – 2012-01-05 18:57:52

0

你爲什麼要擺在首位設置權限,700? 755將允許「任何人」閱讀您的文件和文件夾,並且在大多數情況下,它實際上是可以接受的。

+0

更新我的問題。我嘗試了755,777沒有成功。 Apache是​​每個創建的文件夾的所有者。 – Revenant 2012-01-05 18:50:21

1

下面的代碼段創建的權限777(或任何指定的權限),目錄:

$oldumask = umask(0); 
mkdir($path, 0777); 
umask($oldumask);