file_put_contents权限被拒绝

我正在试图写一个查询文件进行debugging。 该文件在database/execute.php 。 我想要写入的文件是database/queries.php

我正在尝试使用file_put_contents('queries.txt', $query)

但是我越来越

file_put_contents(queries.txt)[function.file-put-contents]:未能打开stream:Permission denied

我有chmod'd queries.txt文件为777,这个问题可能是什么?

尝试调整目录权限。

从terminal运行chmod 777 database (从包含数据库文件夹的目录)

阿帕奇和没有人将有权访问此目录,如果它chmodd'ed正确。

另一件事是回声“getcwd()”。 这将显示当前目录,如果这不是'/something…/database/',那么你需要改变'query.txt'到你的服务器的完整path。

现在意识到这已经很老了,但是不需要手动将查询写入像这样的文件。 MySQL内置了日志支持,你只需要在你的开发环境中启用它。

看看“一般查询日志”的文档:

http://dev.mysql.com/doc/refman/5.1/en/query-log.html

另一种select

是你可以使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个月,做了一切,但无法修复,但现在我知道解决scheme。

我使用一个共享的Linux托pipe,当我的pipe理员改变了PHP为5.3我得到了许多错误的“file_put_contents”代码。 尝试testing我的计划:

在你的主机上创build一个像mytest.php这样的文件,并将这段代码放入并保存:

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

打开URL“www.your-domain.com/mytest.php”一次,然后检查您的电子邮件。 你应该从你的主机收到你在mytest.php中input的信息,检查发件人名称。 如果从没有人,你有“权限被拒绝”的问题,因为没有定义的东西,如果发件人的名字是像我的ID:iietj8qy@hostname5.netly.net你没有prob。

我的pipe理员改变了服务器,并重新安装了主机,我想这个问题已经解决了,告诉你的主机pipe理员我告诉了你什么,也许他们find了答案。

希望它可以帮助你!

我知道这是一个非常古老的问题,但是我想用一些深入的解释来加上好的解决scheme。 你将不得不在Ubuntu系统上执行两个语句,就像系统一样。

Linux中的权限可以用三位数来表示。 第一位数字定义了文件所有者的权限。 第二位数字是特定用户组的权限。 第三位数字定义了所有不属于该组所有者或用户的用户的权限。

networking服务器应该使用一个是该组成员的ID来执行。 Web服务器不应该使用与文件和目录的所有者相同的ID运行。 在Ubuntu下运行Apache的ID为www-data。 该ID应该是指定权限的组的成员。

为了给你想要改变文件内容的目录提供适当的权限,执行语句:

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

这意味着在OP的问题中,应该相应地改变目录%ROOT%/数据库的权限。 因此,重要的是不要在该目录内具有不应该被改变或删除的文件。 因此,为内容必须更改的文件创build单独的目录是最佳实践。

读取目录的权限(4)意味着能够在目录中收集其元数据的所有文件和目录。 写权限(2)给出了更改目录内容的权限。 意味着添加和删除文件,更改权限等。执行权限(1)意味着您有权进入该目录。 没有后者,是不可能深入目录的。 当文件的内容应该改变时,networking服务器需要读取,写入和执行权限。 因此需要组7的数字。

第二个陈述是关于OP的问题:

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

能够读取和写入文档是必需的,但不需要执行该文件。 7给予文件的所有者,6给组。 networking服务器不需要具有执行文件的权限就可以改变其内容。 这些写权限只应该给予该目录中的文件。

所有其他用户不应被授予任何权限。

对于不需要更改其文件的目录而言,组权限是足够的。 有关权限和一些示例的文档:

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/

对于任何使用Ubuntu并在本地加载页面时收到此错误,但不在Web托pipe服务上的用户,

我只是通过打开nautilus( sudo nautilus )来解决这个问题,然后右键点击你想打开的文件,点击属性>设置>,然后阅读写入'其他人'

从此链接收集信息stackoverflow-image保存不适用于chmod 777和用户azerafati和Loek Bergman

如果您要查看/ etc / apache / envvars文件,您将看到如下所示的内容:

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

Apache在用户名“www-data”下运行

'0755'表示文件所有者可以读/写/执行,但是组和其他用户不能写。 所以在你的terminal,cd到包含你的'图像'文件夹的文件夹。 然后input:

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

在更换所有者之前,您必须首先更换保证。 提示时input您的密码。 这将使图像文件夹的“www-data”所有者。

现在你的上传应该可以工作

有2种方法来解决这个问题
1.使用chmod 777 path-to-your-directory
如果不行的话
2.简单地提供你的文件query.txt的完整path。

这里的解决scheme。 从URL复制一个img。 这个URL: http://url/img.jpg

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

创build所需的path使用.jpg完成名称

 $file_destino_path="imagenes/my_image.jpg"; file_put_contents($file_destino_path, $image_Url) 

此外,正如php.net中的file_put_contents man page所述,请小心命名问题。

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

可能无法工作(尽pipe它在语法上是正确的),但是

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

作品。 我在不同的php安装的服务器上经历了这个