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内置了日志支持,你只需要在你的开发环境中启用它。
看看“一般查询日志”的文档:
另一种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
对于任何使用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安装的服务器上经历了这个