file_put_contents权限被拒绝

Hai*_*ood 85 php file-io file-permissions

我正在尝试将查询写入文件以进行调试.该文件在database/execute.php.我想写的文件是database/queries.php.

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

但我得到了

file_put_contents(queries.txt)[function.file-put-contents]:无法打开流:权限被拒绝

我有queries.txt文件chmod'd到777,问题是什么?

Jas*_*son 65

尝试调整目录权限.

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

如果正确chmodd,apache和nobody将无法访问此目录.

另一件事是echo"getcwd()".这将显示当前目录,如果这不是'/something.../database/',那么您需要将'query.txt'更改为服务器的完整路径.

  • 777不是安全隐患吗? (94认同)
  • 我强烈怀疑目标目录不仅必须可由服务器帐户写入,而且目标目录的每个父目录都必须允许服务器帐户导航到它; 我认为这将是权限的+ x. (10认同)
  • @MajidFouladpour我认为`chmod + x/parent/directory`,对于目标的每个父目录.`chmod + x/parent/directory`,`chmod + x/parent`等. (4认同)
  • 我在新的 LAMP 堆栈上试验了 Erhannis 的理论,该理论是正确的。 (2认同)
  • 现在有针对此类问题的故障排除清单:/sf/ask/2560391431/ (2认同)

aze*_*ati 13

另一种选择

就是你可以制作Apache (www-data)文件夹的所有者

sudo chown -R www-data:www-data /var/www
Run Code Online (Sandbox Code Playgroud)

那应该立即开始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
Run Code Online (Sandbox Code Playgroud)
  • 切换/var/www到php文件的根文件夹


Ada*_*dam 7

意识到这已经很老了,但是没有必要手动将查询写入这样的文件.MySQL内置了日志记录支持,您只需要在开发环境中启用它.

查看"常规查询日志"的文档:

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


Bru*_*ong 5

从此链接stackoverflow-image save 收集信息不适用于 chmod 777以及用户 azerafati 和 Loek Bergman:

如果您查看 /etc/apache/envvars 文件,您将看到类似以下内容:

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

您必须先更改权限,然后才能更改所有者。出现提示时输入您的密码。这将使“www-data”成为图像文件夹的所有者。

您的上传现在应该可以工作了。