2012-07-01 147 views
1

我有一個PHP語言的功能,當請求時創建一個xml文件。PHP fopen無法創建文件

if(($file= fopen("./include/catalogo.xml", "w"))==false){echo 'non creo il file'; return false;} 

「catalogo.xml」 不能創建,權限被拒絕。我知道我應該嘗試更改權限,但如果文件不存在,怎麼辦?或者,我忽略了什麼?

+0

你在使用什麼操作系統? – PriestVallon

+1

我使用OS X Lion,我在使用XAMPP的計算機上工作。 – Rox

回答

-1

如果你使用的終端,並轉到您的文件將在創建文件夾的父,這是父在命令中包括文件夾,然後鍵入:

chmod 777 include 

這應該更改的權限這個文件夾,所以你不會再收到拒絕權限的錯誤。如果你確實試過這個命令:

chmod -R 777 include 
+0

適用於最後一個!非常感謝! – Rox

+1

這實際上是一個不好的答案。您不應該向Web訪問的目錄樹中的任何目錄授予世界寫入訪問權限。我遇到了這個入口,因爲我正在嘗試自己解決這個問題,但是我不會在當前目錄下的chmod 777上打開目錄。任何Web目錄都應該是chmod 711,並且我相信,如果您將正確的允許組分配給apache的「用戶」,php應該可以在其中創建文件。 – Anachronist

+0

嗯,我可以理解你的觀點1777是相當寬敞的許可,但是你的許可的**真實**優勢是什麼?爲什麼不是700但是711? 我真的認爲你的評論可能是一個有趣的問題。 –

-2

您必須改變目錄「包括」所有權並將其設置爲Web服務器的用戶和權限設置爲一個合理的值:

$ sudo chow www-data include 
$ sudo chmod 755 include 

如果你不知道哪個用戶的網絡-server是由你運行可以打開include目錄權限世界各地:

$ sudo chmod 1777 include 

創建catalogo.xml你檢查創建後包括 diretory:

$ sudo ls -al include 
-rwxr-xr-x 1 http web  4096 May 5 15:37 catalogo-xml 

現在你可以改變目錄「包括」所有權並將其設置爲Web服務器的用戶(HTTP)和權限恢復到一個合理的值:

$ sudo chow http include 
$ sudo chmod 755 include 

參見手冊輸入chmod,chown和LS的:

$ man chmod 
$ man chown 
$ man ls 
0

我想你可能會忽略目錄(./include)的權限。

我假設你通過網絡服務器和Linux(例如Apache)運行這個PHP--在這種情況下,試圖創建該文件的用戶帳戶將是'apache'或'www-數據'(或者你的網絡服務器運行的任何用戶)。

在您的服務器 - 看看./include的權限 - 你需要做兩件事情之一:

a)作出./include世界可寫的(所以「阿帕奇」現在,用戶可以創建裏面的一個文件)。

b)將./include的所有者或組更改爲'apache',以便它可以在其中創建一個文件。

你的PHP是好的 - 它是試圖創建文件的文件夾的權限不是。