PHP fopen无法创建文件

时间:2012-07-01 13:11:58

标签: php fopen permission-denied

我有一个PHP语言函数,可以在请求时创建一个xml文件。

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

“catalogo.xml”无法创建,权限被拒绝。我知道我应该尝试更改权限,但如果文件不存在,怎么办?或者,有没有我忽略的事情?

3 个答案:

答案 0 :(得分:0)

我认为您可能忽略了目录(./include)的权限。

我假设您通过Web服务器和Linux(例如Apache)运行此PHP - 在这种情况下,尝试创建文件的用户帐户将是“apache”或“www-data” '(或者你的网络服务器正在运行的任何用户)。

在您的服务器上 - 查看./include的权限 - 您需要执行以下两项操作之一:

a)使./include世界可写(因此'apache'用户现在可以在其中创建文件)。

b)将./include的所有者或组更改为“apache”,以便它可以在其中创建文件。

你的PHP很好 - 这是它试图在其中创建文件的文件夹的权限。

答案 1 :(得分:-1)

如果您使用终端并转到文件夹的父文件,您的文件将被创建,这是包含文件夹的父文件并输入命令:

chmod 777 include

这应该更改此文件夹的权限,这样您就不会再收到权限被拒绝错误。如果您尝试此命令:

chmod -R 777 include

答案 2 :(得分:-2)

您必须更改目录“include”的所有权并将其设置为Web服务器的用户,并将权限设置为合理的值:

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

如果您不知道您的网络服务器正在运行哪个用户,您可以在全球范围内打开包含目录权限:

$ sudo chmod 1777 include

创建 catalogo.xml 后,检查包含指令:

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

现在您可以更改目录“include”的所有权并将其设置为Web服务器的用户(http)并将权限重置为合理的值:

$ sudo chow http include 
$ sudo chmod 755 include 

另见chmod,chown和ls手册:

$ man chmod
$ man chown
$ man ls