file_put_contents不创buildtxt文件

我目前有一个PHP脚本,当浏览器浏览器浏览到网页时正在运行。 我想要做的是编写一个文本文件,当脚本运行存储一个variables。 该文件夹的所有者是Apache,但每个人都已经阅读写,严格的testing目的。 (我认为这可能是一个权限问题)在服务器上启用SELINUX,当我从控制台运行脚本时,它会创build文本文件,并且在正确的目录中。

file_put_contents("My working file location", $myString); 

我使用这一行来尝试编写和创build文本文件,我知道我的文件位置工作,因为我可以运行它,并在离线模式下创build它,IE通过控制台运行它。 问题是我试图写的variables是通过HTTP Post填充的,当我通过浏览器运行脚本,或者当Apache运行脚本时,它不会写入或创build文件。 我需要做什么来允许访问写/改变语法来获得这个脚本来写这个文本文件?

Solutions Collecting From Web of "file_put_contents不创buildtxt文件"

你的问题可能是由于Apache没有权限写入你指定的文件位置。 转到该目录并使用ls命令检查权限和组的所有权:

 cd "My working file location" ls -l . 

输出中有三列显示目录的权限,所有者和组。 它们很可能是由root拥有的,并且没有权限让apache写入目录。

如果是这种情况,那么当你尝试创建文件时,你会在apache日志中看到一个错误。 在浏览器中运行脚本时,尝试拖拽日志。

 tail -f /var/log/apache2/error.log 

我最近遇到了同样的麻烦,偶然发现了这个问题。 不幸的是,OP在评论中说,他发现自己的解决方案,只是接受了一个没有帮助我们的答案…然后,搜索和成功,使file_put_contents再次工作,我决定分享我的解决方案。

我的文件和目录的权限可以接受任何写入(确保你的目录是chmod 757这会给root和其他人授予写入文件的位置)。 如果它仍然不能正常工作,那是因为你的系统可能是SELinux (安全增强的Linux)系统。

如果你想确保写setenforce 0这将把selinux转换为宽松模式,再次运行你的脚本,如果它的工作,那么这意味着这个问题是很好的描述。

在这种情况下,请在setenforce 1上打开selinux,并在项目目录所在的目录中尝试ls -Zl 。 这会给你一个像

 drwx---rx. 9 root root system_u:object_r:httpd_sys_content_t:s0 4096 Dec 8 00:25 project 

或者不同的东西,但是如果你使用chcon把上下文从一个目录转移到这个目录,那么就是httpd_sys_content_t 。 但如果你没有httpd_sys_content_t那就没关系,因为我们需要改变那个目录的上下文。

首先你需要接受任何public_content_rw_t上下文来写文件。 类型

 setsebool -P httpd_anon_write on 

这将设置(P)erinntly SELinux布尔httpd_anon_write为true,任何上下文被称为public_content_rw_t将有权写任何文件在自己的位置。

现在你必须说SELinux你的项目目录是public_content_rw_t否则你仍然不能写文件。 类型:

 semanage fcontext --add --type public_content_rw_t "/project(/.*)?" 

restorecon -RvF /project告诉selinux应用上面的规范。

现在你的目录是public_content_rw_t ,你应该可以写文件。

我也遇到了这个问题。 就我而言,我发现目录的所有权是错误的。 对于典型的Apache安装,该目录应该由www-data:www-data所有,而不是root:root。

我很确定,如果我的解决方案真的很清楚,但它的工作:

 cd /mydir/ setsebool -P allow_httpd_anon_write true 

最好的祝福

你有没有尝试chmodding目录到777

尝试这个:

 if(file_put_contents('file.txt', 'text')){ die('yes'); } else { die('no'); } 

可能拼错了一些东西。 ^