我正在尝试将查询写入文件以进行调试。该文件位于database/execute.php
。我想写的文件是database/queries.php
。
我正在尝试使用file_put_contents('queries.txt', $query)
但我得到了
file_put_contents(queries.txt)[function.file-put-contents]: 无法打开流:权限 拒绝
我的queries.txt
文件chmod为777,问题是什么?
答案 0 :(得分:63)
尝试调整目录权限。
从终端运行chmod 777 database
(从包含数据库文件夹的目录)
apache并且如果正确地chmodd,则没有人可以访问此目录。
另一件事是echo“getcwd()”。这将显示当前目录,如果这不是'/something.../database/',那么您需要将'query.txt'更改为服务器的完整路径。
答案 1 :(得分:12)
是您可以设置文件夹
的所有者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文件的根文件夹答案 2 :(得分:7)
现在意识到这已经很老了,但是没有必要手动将查询写入这样的文件。 MySQL内置了日志记录支持,您只需要在开发环境中启用它。
查看“常规查询日志”的文档:
答案 3 :(得分:3)
伙计们我有这个问题已经有一个月的时间做了所有事情,但无法修复它,但现在我知道了解决方案。
我使用共享的linux主机,当我的管理员将php更改为5.3时,我的“file_put_contents”代码出现了很多错误。试着测试我的计划:
在您的主机中创建一个类似mytest.php的文件,并将此代码放入并保存:
<?php mail('Your-EMail','Email-Title','Email-Message'); ?>
打开网址“www.your-domain.com/mytest.php”一次,然后查看您的电子邮件。您应该收到主机发来的电子邮件,其中包含您在mytest.php中输入的信息,请检查发件人姓名。如果它来自 Nobody 你有关于“权限被拒绝”的问题,因为没有定义的东西,如果发件人名称就像我的id:iietj8qy@hostname5.netly.net你没有概率。
我的管理员更改了服务器并再次安装了主机我觉得问题解决了,告诉主管部门我告诉你的内容,也许他们找到了答案。
希望它可以帮到你!
答案 4 :(得分:3)
我知道这是一个非常古老的问题,但我想通过一些深入的解释添加好的解决方案。您将不得不在Ubuntu类似系统上执行两个语句,然后它就像一个魅力。
Linux中的权限可以用三位数表示。第一个数字定义文件所有者的权限。第二个数字是特定用户组的权限。第三个数字定义了非所有者和组成员的所有用户的权限。
Web服务器应该使用作为组成员的id执行。 Web服务器永远不应该使用与文件和目录所有者相同的ID运行。在Ubuntu中运行id为www-data的apache。该id应该是指定了权限的组的成员。
要为要更改文件内容的目录指定正确的权限,请执行以下语句:
find %DIR% -type d -exec chmod 770 {} \;
。这意味着OP的问题是应该相应地更改目录%ROOT%/ database的权限。因此,重要的是不要让该目录中的文件永远不会被更改或删除。因此,最佳做法是为必须更改其内容的文件创建单独的目录。
读取目录的权限(4)意味着能够在目录中收集其元数据的所有文件和目录。写权限(2)授予更改目录内容的权限。暗示添加和删除文件,更改权限等。执行权限(1)表示您有权进入该目录。如果没有后者,就无法深入到目录中。当应该更改文件的内容时,Web服务器需要读取,写入和执行权限。因此需要该组数字7。
第二个陈述是关于OP的问题:
find %DOCUMENT_ROOT%/database -type f -exec chmod 760 {} \;
需要能够读取和写入文档,但不需要执行该文件。 7给予文件的所有者,6给组。 Web服务器无需具有执行文件的权限即可更改其内容。这些写权限应仅授予该目录中的文件。
不应向所有其他用户授予任何权限。
对于不需要更改其文件的目录,组的权限为5就足够了。 有关权限的文档和一些示例:
https://wiki.debian.org/Permissions
https://www.linux.com/learn/tutorials/309527-understanding-linux-file-permissions
答案 5 :(得分:3)
从此链接stackoverflow-image save doesn't work with chmod 777以及用户azerafati和Loek Bergman收集信息
如果您要查看/ etc / apache / envvars文件,您会看到类似的内容:
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
Apache以用户名'www-data'
运行'0755'表示文件所有者可以读/写/执行但组和其他用户无法写入。所以在你的终端,cd到包含'images'文件夹的文件夹。然后输入:
find images -type d -exec chmod 0755 {} \;
find images -type f -exec chmod 0755 {} \;
sudo chown -R www-data:www-data images
在更改所有者之前,您必须先更改权限。 提示时输入密码。这将使图像文件夹的'www-data'所有者。
您的上传现在应该有效。
答案 6 :(得分:0)
对于任何使用Ubuntu并在本地加载页面时收到此错误但未在网络托管服务上收到此错误的人
我刚刚通过打开nautilus(sudo nautilus
)并右键单击您要打开的文件来修复此问题,点击属性&gt;设置&gt;并给“其他人”写入读写
答案 7 :(得分:0)
有同样的问题;我的问题是selinux被设定为强制执行。
即使在修改为777并确保所有父文件夹都具有apache用户的执行权限后,我仍然收到“无法打开流:权限被拒绝”错误。原来我的问题是selinux被设置为强制执行(我在centos7上),这是一个devbox,所以我把它关掉了。
答案 8 :(得分:0)
这可以通过以下步骤解决:
1. $ php artisan cache:clear
2. $ sudo chmod -R 777 storage
3. $ composer dump-autoload
希望有帮助
答案 9 :(得分:0)
如果您是从git从本地拉到服务器,则有时需要清除缓存,因为视图文件是随它一起上传的视图文件或其他缓存文件。
php artisan cache:clear
有时候,如果您的应用程序在git pull之前就可以正常工作
答案 10 :(得分:0)
这可能会有所帮助。它为我工作。在终端上尝试
setenforce 0
答案 11 :(得分:0)
使用此命令授予存储/框架和日志权限
<script>
let num = 0;
function myFunction() {
document.getElementById("num").textContent = ++num;
}
</script>
<button class="button" onclick="myFunction()">
<p id="num"></p>
如果您仍然有权限错误 试试这个给组写日志
sudo chmod -R 777 storage/logs storage/framework
答案 12 :(得分:-2)
有两种方法可以解决这个问题
1。使用query.txt
。
如果它不起作用那么
2。只需提供文件{{1}}的完整路径。
答案 13 :(得分:-3)
这里的解决方案。
从URL复制img。
此网址: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)
答案 14 :(得分:-10)
此外,正如file_put_contents man page
中的php.net
所述,请注意命名问题。
file_put_contents($dir."/file.txt", "hello");
可能无效(即使语法正确),但
file_put_contents("$dir/file.txt", "hello");
的工作原理。我在不同的php安装服务器上体验过这一点。