php - file_put_contents php 权限

标签 php apache file permissions

这是一个关于我的系统配置以及 apache/php 如何受其影响的问题。当我转移到生产环境时,在我的开发服务器上运行的代码无法运行,这就是我将错误归结为的问题。我想在 php 中使用 file_put_contents 来简单地在我的系统上创建一个文件。这是我正在使用的非常简单的代码:

print file_put_contents("testfile.txt","this is my test")?"made file":"failed";

没有抛出错误,但总是打印“失败”。当我在普通目录中运行它时,不会创建任何文件,但是当我将其移动到具有 777 权限的目录时,它将创建文件但仍然打印“失败”并且不保存任何内容。如果我将 php 文件本身更改为具有 777 权限,则不会发生任何变化。如果我将目标文件(testtext.txt)更改为具有 777 权限,则不会发生任何变化。

当我将 php 文件的所有者更改为与创建的 testfile.txt 相同时,没有任何变化。当我尝试相对路径与绝对路径时,没有任何变化。由于某种原因,我可以让 php 创建文件,但它总是空的,并且使用 file_put_contents 我无法在其中写入任何内容。

创建的文件位于“www-data”的所有者和组中,而我则以 root 身份运行(如果有帮助的话)。我该怎么做才能让它发挥作用?我认为我的 php 版本正在使用 suhosin 扩展,如果这可能与它有关(或者如果您认为有办法在 php 或 suhosin ini 文件中修复此问题,我也可以这样做)。

过去几天我一直在寻找这个问题几个小时。

编辑:根据以下评论进行更新。当我在 CLI 模式下运行它时它确实可以工作,但是由于我需要通过 apache 运行它,我该如何使用这个事实呢?这是否告诉我们有关何处或什么阻止了文件写入?此外, file_put_contents 调用实际上返回“false”而不是零。

最佳答案

您必须将 apache 用户的权限设置为 777。 Apache 还需要能够“创建”新文件。我确信如果您尝试写入具有 777 权限的文件,它会起作用。

关于php - file_put_contents php 权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11479315/

相关文章:

php - Zend Framework 和 Django 之间在现实世界中的区别是什么?

python - 处理异常时奇怪的嵌套循环行为

PHP isset($this) 并在静态和对象上下文中使用相同的对象方法

php - MySQL - 按相关性排序的搜索/选择?

php - 警告 : mysqli_connect(): (HY000/1049): Unknown database in mac terminal only

apache - 将 301 从带有问号的 URL 重定向到新的 URL

file - 为什么setfacl在Docker容器中不起作用?

java - 如何在Java中设置文件的下一个编码

php - 更改翻译路径 Symfony 和 DDD

php - 我的目录中不存在 mcrypt.ini