touch():Utime失败:不允许操作

时间:2020-09-24 21:24:20

标签: php linux raspberry-pi touch ntfs

我尝试运行此命令:

php -r "touch('/mnt/my_drive/test.txt', 1600981328);"

我收到此错误:

PHP Warning:  touch(): Utime failed: Operation not permitted in Command line code on line 1

如果我使用sudo运行它,则不会收到错误消息。

/mnt/my_drive是一个NTFS驱动器。该挂载是使用fsabumask=000中创建的,所以我不知道为什么会出现权限错误。

请勿将其标记为重复项,因为类似的问题具有以下答案:

  • 检查权限:由于umask=000
  • ,它应该是正确的
  • 以提升模式运行composer / php:我想避免以管理员身份运行网络服务器
  • 修改供应商中的某些库文件:如我的示例所示,即使在命令行中,我也会出现此错误
  • 不要使用ntfs:这不是我的选择

4 个答案:

答案 0 :(得分:0)

您的代码在安装了php7.4和ntfs的计算机上完美运行:

/ mnt / tmp类型上的/ dev / sdaX fuseblk rw,relatime,user_id = 0,group_id = 0,allow_other,blksize = 4096)

您确定要在其中执行此操作的目录是否允许您创建文件?目录是否存在?

如果您可以在不设置时间参数的情况下创建普通文件,则可能与ntfs或保险丝安装有关。

在这种情况下: 尝试在strace中运行php命令以查看实际失败的原因,这应该有助于查明错误。

编辑:在这种情况下,umask也无关紧要,重要的是包含文件的目录的权限。

答案 1 :(得分:0)

除非拥有者发布,否则更新文件修改时间将失败。尝试清除缓存文件,然后以PHP用户作为所有者重新创建它们。

答案 2 :(得分:0)

如果用户PHP的运行不是缓存文件的所有者,则可能会发生这种情况。检出此链接Utime failed: Operation not permitted

答案 3 :(得分:-1)

除非有必要向他人提出修改意见,否则永远不要以更改修改时间为切入点。仓促,没有任何作用。我唯一可以告诉您的是,您必须拥有文件,您可能需要root用户才能访问这些权限,而使用sudo可以执行任何操作。所以你对此没有希望。我希望这可以使您相信客户的文件系统崩溃的其他方式。