2011-02-07 79 views
63

我想寫一個查詢文件進行調試。該文件在database/execute.php。我想要寫入的文件是database/queries.phpfile_put_contents權限被拒絕

我試圖用file_put_contents('queries.txt', $query)

但我正在逐漸

file_put_contents(queries.txt)function.file-把-內容]: 未能打開流:權限 否認

我有queries.txt文件chmod'd到777,問題是什麼?

+0

你是否已經通過php.ini文件查看任何可能會拒絕文件訪問的內容? – Hello71 2011-02-07 03:16:26

+2

也確保目錄是chmod'd正確的 – 2011-02-07 03:21:04

+0

也嘗試使用絕對文件名。這可能只是您對當前文件夾的解釋與PHP的不同 – laher 2011-02-07 03:32:38

回答

58

嘗試調整目錄權限。

從終端,運行chmod 777 database(從包含該數據庫文件夾的目錄),如果它被正確chmodd'ed

Apache的,沒有人會訪問這個目錄。

另一件事是回聲「getcwd()」。這將向您顯示當前目錄,如果這不是'/something.../database/',那麼您需要將'query.txt'更改爲服務器的完整路徑。

-10

此外,如file_put_contents man pagephp.net中所述,請注意命名問題。

file_put_contents($dir."/file.txt", "hello"); 

可能無法正常工作(即使它是正確的語法),但

file_put_contents("$dir/file.txt", "hello"); 

作品。我在不同的php安裝的服務器上體驗過這個

1

對於使用Ubuntu和加載頁面時,本地收到此錯誤的人,而不是在網絡託管服務,

我只是對你的文件打開了鸚鵡螺(sudo nautilus),右鍵點擊這個固定試圖打開,單擊屬性>設置>並給讀寫'其他人'

3

傢伙,我有這個問題,1個月和所做的一切,但不能修復它,但現在我知道了解。

我使用共享的Linux託管,當我的管理員改變PHP爲5.3我得到了許多錯誤的「file_put_contents」代碼。嘗試測試我的計劃:

在主機創建像mytest.php文件,並把這個代碼並保存:

<?php  mail('Your-EMail','Email-Title','Email-Message');  ?> 

打開URL「WWW。your-domain.com/mytest.php「一次,然後檢查你的電子郵件,你應該收到你的主機發來的電子郵件,其中包含你在mytest.php中輸入的信息,檢查發件人的姓名,如果它來自沒有人你有問題關於「權限被拒絕」,因爲沒有定義的東西,如果發件人名稱就像我的ID:[email protected]你沒有概率

我的管理員改變了服務器,並再次安裝主機我認爲和問題得到有效解決,告訴你的主機管理我告訴你,也許他們找到答案。

希望它可以幫助你!

-3

這裏的解決方案。 從URL複製img。 這個網址:http://url/img.jpg

$image_Url=file_get_contents('http://url/img.jpg'); 

創建所需的路徑與.jpg

$file_destino_path="imagenes/my_image.jpg"; 

file_put_contents($file_destino_path, $image_Url) 
3

我知道,這是一個非常古老的問題完成的名字,但我想有一些深入的加入很好的解決方案說明。你將不得不在系統上執行兩個Ubuntu語句,然後它就像一個魅力一樣。

Linux中的權限可以用三位數表示。第一個數字定義了文件所有者的權限。第二位數字是特定用戶組的權限。第三位數字定義了不是該組所有者或所有組成員的所有用戶的權限。

網絡服務器應該使用作爲該組成員的ID執行。 Web服務器不應該使用與文件和目錄的所有者相同的ID運行。在Ubuntu下運行Apache下的ID數據。該ID應該是指定權限的組的成員。

爲了讓在您要更改文件的內容適當的權限,執行語句的目錄:

find %DIR% -type d -exec chmod 770 {} \; 

。那將意味着在OP的問題,對於目錄%的權限ROOT%/數據庫應該相應地更改。因此,重要的是不要在該目錄內具有永遠不應該被更改或刪除的文件。因此,爲內容必須更改的文件創建單獨的目錄是最佳實踐。

讀取目錄的權限(4)意味着能夠收集所有文件和目錄及其目錄中的元數據。寫權限(2)授予更改目錄內容的權限。暗示添加和刪除文件,更改權限等。執行權限(1)表示您有權進入該目錄。沒有後者,是不可能深入目錄的。當文件的內容應該改變時,網絡服務器需要讀取,寫入和執行權限。爲此需要組數字7

第二條語句是在OP的問題:

find %DOCUMENT_ROOT%/database -type f -exec chmod 760 {} \; 

能夠閱讀和書寫的文件是必需的,但它要執行的文件,不需要。 7給予文件的所有者,6給該組。網絡服務器無需擁有執行該文件的權限即可更改其內容。這些寫入權限只應該賦予該目錄中的文件。

所有其他用戶不應被授予任何權限。

對於不需要更改文件的目錄,組權限爲5就足夠了。 文檔有關權限和一些例子:

https://wiki.debian.org/Permissions

https://www.linux.com/learn/tutorials/309527-understanding-linux-file-permissions

http://www.linux.org/threads/file-permissions-chmod.4094/

-2

有2的方式來解決這個問題
1.使用chmod 777 path-to-your-directory
如果它不起作用,然後
2.只需提供文件query.txt的完整路徑。

6

另一種選擇

是,你可以使Apache (www-data),該文件夾

sudo chown -R www-data:www-data /var/www 

,應該讓file_put_contents現在的工作的所有者。但是,爲了更加安全,你最好也設置了權限,像下面

find /var/www -type d -print0 | xargs -0 chmod 0755 # folder 
find /var/www -type f -print0 | xargs -0 chmod 0644 # files 
  • 變化/var/www到PHP文件
1

從這個鏈接收集信息的根文件夾stackoverflow-image save doesn't work with chmod 777和用戶azerafati和Loek伯格曼

如果您要查看/ etc/apache/envvars文件,您將看到類似於:

export APACHE_RUN_USER=www-data 
export APACHE_RUN_GROUP=www-data 

Apache是​​用戶名「www數據」

「0755」下運行裝置,該文件的所有者可以讀/寫/執行,但組與其他用戶不能寫入。所以在你的終端中,cd到包含你的'圖像'文件夾的文件夾。然後鍵入:

find images -type d -exec chmod 0755 {} \; 
find images -type f -exec chmod 0755 {} \; 
sudo chown -R www-data:www-data images 

您必須在更改所有者之前先更改保留。當提示時輸入密碼 。這將使圖像文件夾的'www-data'擁有者。

現在你的上傳工作。