这是关于我的系统配置以及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”而不是零。
答案 0 :(得分:1)
您必须为apache用户设置777的权限。 Apache还需要能够“创建”新文件。我敢肯定,如果您尝试写入具有777权限的文件,它将起作用。
答案 1 :(得分:1)
该函数返回写入文件的字节数,如果失败则返回FALSE。
确保mydir
可写(由apache用户 - apache2或www-data)。要检查内容是否已写入文件,请使用===运算符:
$file = "mydir/testfile.txt";
$result = file_put_contents($file,"this is my test");
if ($result === false)
{
echo "failed to write to $file";
}
else
{
echo "successfully written $result bytes to $file";
}
对于调试,我建议在php文件的顶部定义:
error_reporting(-1);
ini_set('display_errors', true);