为什么file_put_contents()成功但touch()失败?

Jer*_*oot 5 php filesystems

我正在运行一个脚本,该脚本对文件的内容进行一些更改,然后将其修改时间重置为以前的时间。间歇地,我会在日志中发现以下错误:

touch() [function.touch]: Utime
failed: Operation not permitted
Run Code Online (Sandbox Code Playgroud)

file_put_contents()通话刚结束时,这似乎已更改了我尝试处理的文件的内容touch()。没有与该file_put_contents()行相关的错误。

有人发生过这种情况吗?谁能找出允许我写文件但不更改其修改时间的权限集?我正在Linux上执行此操作。

gav*_*non 5

这是 PHP 命令的一个错误touch。即使您拥有该文件的写权限,如果 PHP 不是“所有者”,该操作也会失败。

如果您使用的是 Apache 和 Linux,请在服务器控制台上使用以下命令使 PHP 成为文件的所有者:

sudo chown www-data:www-data /YourPATH/YourFILE
Run Code Online (Sandbox Code Playgroud)

更好的是,更新包含您希望 PHP 控制的文件的整个文件夹:

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

旁注:由于 PHP 可以写入文件,这意味着它必须具有用户或组写入权限。既然如此,触摸就不应该有这种行为。这似乎是一个错误。


ros*_*oft 0

该文件可能是使用错误的权限创建的。尝试对 file_put_contents 之后的文件进行 chmod 777,然后触摸该文件。