File_put_content-打开流失败: 拒绝权限

我正在尝试编写一个查询文件进行调试。文件在 database/execute.php中。我要写入的文件是 database/queries.php

I am trying to use file_put_contents('queries.txt', $query)

但我现在

file_put_contents(queries.txt) [function.file-put-contents]: 未能打开流: 许可 denied

我已经将 queries.txt文件修改为777,问题是什么?

311585 次浏览

尝试调整目录权限。

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

如果 chmodd 正确,任何人都不能访问这个目录。

要做的另一件事是回显“ getcwd ()”。这将显示工作目录,如果不是“/something.../database/”,那么您需要将“ query.txt”更改为服务器的完整路径。

此外,正如 php.net中的 file_put_contents man page所说,要注意命名问题。

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

可能不起作用(即使它在语法上是正确的) ,但是

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

我在不同的安装了 PHP 的服务器上体验到了这一点。

对于任何使用 Ubuntu 并且在本地加载页面时收到这个错误的人,但不是在网页寄存服务上,

我只是通过打开鹦鹉螺(sudo nautilus)并右键点击你试图打开的文件,点击属性 > 设置 > 并给“其他人”读写来修复这个问题

不需要手动将查询写入这样的文件。MySQL 内置了日志支持,你只需要在你的开发环境中启用它。

Take a look at 「一般查询日志」的文件.

I use a shared Linux hosting, when my admin changed the php to 5.3 I got many errors for the "file_put_contents" code. try to test my plan:

在主机中创建一个类似 mytest.php 的文件,并将下面的代码放入并保存:

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

打开“网址 www.your-domain.com/mytest.php"”,一次就可以查看你的电子邮件。您应该有一封来自主机的电子邮件,其中包含您在 mytest.php 中输入的信息,请检查发件人名称。如果它来自 Nobody,你有问题关于“权限拒绝”,因为没有定义的东西,如果发件人名称是像我的 id: iietj8qy@hostname5. netly.net 你没有问题。

我的管理员改变了服务器和安装的主机,我认为和问题得到了解决,告诉你的主机管理员我告诉你,也许他们找到了答案。

Here the solution. To copy an img from an URL. 网址: 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)

我知道这是一个非常古老的问题,但我想添加一些深入的解释好的解决方案。你将不得不在 Ubuntu 系统上执行两个语句,然后它会像魔法一样工作。

Linux 中的权限可以用三位数字表示。第一个数字定义文件所有者的权限。第二个数字是特定用户组的权限。第三个数字定义非组所有者或成员的所有用户的权限。

The webserver is supposed to execute with an id that is a member of the group. The webserver should never run with the same id as the owner of the files and directories. In Ubuntu runs apache under the id www-data. That id should be a member of the group for whom the permissions are specified.

若要为要更改文件内容的目录提供适当的权限,请执行以下语句:

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

.这意味着 OP 的问题是应该相应地更改目录% ROOT%/数据库的权限。因此,重要的是不要在该目录中包含永远不应更改或删除的文件。因此,最佳做法是为其内容必须更改的文件创建一个单独的目录。

Reading permissions (4) for a directory means being able to collect all files and directories with their metadata within a directory. Write permissions (2) gives the permission to change the content of the directory. Implying adding and removing files, changing permissions etc.. Execution permission (1) means that you have the right to go into that directory. Without the latter is it impossible to go deeper into the directory. The webserver needs read, write and execute permissions when the content of a file should be changed. Therefor needs the group the digit 7.

第二项声明涉及《任择议定书》问题:

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

能够读写文档是必需的,但是不需要执行文件。7分配给文件的所有者,6分配给组。Webserver 不需要具有执行文件以更改其内容的权限。这些写权限应该只授予该目录中的文件。

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

对于不需要更改其文件的目录,组权限为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/

有两种方法可以解决这个问题
1. 使用 chmod 777 path-to-your-directory
if it does not work then
只需提供文件 query.txt的完整路径。

您可以使 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 文件的根文件夹

从这个链接收集信息 Stackoverflow-映像保存不适用于 chmod 777和用户 azerafati 和 Loek Bergman

如果你查看/etc/apache/envars 文件,你会看到这样的内容:

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

Apache 的用户名是“ www-data”

“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”成为图像文件夹的所有者。

你的上传应该可以工作了。

有同样的问题; 我的问题是 selinux 被设置为强制执行。

即使在 chmoding 到777并确保所有父文件夹都具有 apache 用户的执行权限之后,我仍然不断收到“未能打开流: 拒绝权限”错误。原来我的问题是 selinux 被设置为强制执行(我在 centos7上) ,这是一个 devbox,所以我关闭了它。

这个问题可以通过以下步骤解决:

1. $ php artisan cache:clear


2. $ sudo chmod -R 777 storage


3. $ composer dump-autoload

希望能有帮助

如果从 git 从本地到服务器,有时需要清除缓存,因为视图文件会随它/或其他缓存文件一起上传。

php artisan cache:clear

有时候,如果应用程序在 git 之前就已经可以工作了,那么这可能就是一个诀窍

这个可能有用,对我有用,到终端机试试

setenforce 0

使用这个命令授予存储/框架和日志的权限

 sudo chmod -R 777 storage/logs storage/framework

如果您仍然有一个权限错误 尝试给组写入日志

sudo chmod g+w storage/logs

我停止了病毒扫描(停止)。问题解决了!最后,看起来 Agreat 有一个勒索软件屏蔽,阻止了对 documentroot 文件夹的写操作。为单个程序(PHP,Tesseract)添加屏蔽异常解决了这个问题!

I ran into the same issue, I'm using Laravel, so what I just did was:

php artisan view:clear

修好了!