2011-03-18 108 views
5

我對配置Apache比較陌生。在Apache中給予PHP寫入權限

我有一個PHP腳本,根據從$_GET檢索到的值寫入JSON文件。

<?php 

    file_put_contents('State.json', "{ do: '" . $_GET['do'] . "' }"); 

    echo "Success"; 

?> 

我通過創建XHR請求來運行該代碼。

Ally.xhr('/Cream/Foam?do=someCommand'); 

返回頁面說failed to open stream: Permission denied on line 3.

<Directory "~/Dropbox/Web"> 
    Options Indexes FollowSymLinks MultiViews 

    AllowOverride None 

    Order allow,deny 
    Allow from all 
</Directory> 

這些都是給根服務器文件夾的權限。

我需要更改以允許PHP寫入文件?

(我幾乎不知道上述手段塊)。

+0

它正在寫入的文件/目錄的chmod權限如何? – Kit 2011-03-18 21:05:12

+0

將webfolder放入根文件夾並不是個好主意。把它放到/ var/www /就像其他文件一樣。你有沒有問題的權利。 – Stony 2011-03-18 21:05:39

+0

..chmod?我不知道那是什麼。也許這就是我錯過的。 – Kayla 2011-03-18 21:05:49

回答

13

您需要檢查用戶是否在它運行的Apache有權寫入該目錄。

所以它是這樣的:

你的apache服務器是進程。該進程在某個用戶(例如www)下運行。 PHP在apache下運行。因此,如果您嘗試在PHP中寫入目錄,則與用戶www登錄到服務器並嘗試在同一目錄中創建文件的方式相同。因此,請檢查誰是該目錄的所有者,以及擁有哪個權限。你可以做到,例如通過ls -la命令。如果www將這個目錄的所有者,你會是100%安全的...

+0

它在默認_www下運行。所以如果我給它許可這應該工作? – Kayla 2011-03-18 21:07:45

+0

一,我會更新答案 – 2011-03-18 21:10:55

+2

chown www-data:www-data〜/ Dropbox/Web和chmod 777〜/ Dropbox/Web – Stony 2011-03-18 21:11:43

1

你可以嘗試與

chmod功能設置權限爲PHP和目錄設置到/ var/WWW有你有通常足夠的權限。

0

檢查命令行的文件權限或者使用:

ls -l /path/filename 

或通過您的FTP客戶端,如果你有FTP訪問的文件/目錄。如果沒有,你可以改變像斯托尼上面說的位置。

0

檢查它正在嘗試寫入的文件/目錄權限。確保它可由Apache進程運行的用戶和/或組寫入。

同時檢查SELinux是否通過檢查/ selinux/enforce的內容來啓用。如果是,請禁用它或確保在您正在寫入的路徑上設置正確的標籤。

0

知道有時候絕對沒有辦法用PHP來解決這個問題。

的兩個解決辦法是:

  1. 配置PHP和Apache許可手動(警告:可能會變髒得很快)。
  2. 使用FTP將所有權更改爲0777(完全訪問),然後在運行更改後恢復。

我經常發現後面的選項效果最好。