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

Php touch():Utime失败:不允许操作,php,linux,raspberry-pi,touch,ntfs,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_驱动器是NTFS驱动器。挂载是在fsab中使用umask=000创建的,因此我不知道为

我尝试运行此命令:

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_驱动器
是NTFS驱动器。挂载是在
fsab
中使用
umask=000
创建的,因此我不知道为什么会出现权限错误

请不要将此标记为重复,因为类似的问题有以下答案:

  • 检查权限:它应该是正确的,因为
    umask=000
  • 在提升模式下运行composer/php:我希望避免以管理员身份运行Web服务器
  • 在vendor中修改一些库文件:我甚至在命令行中也会遇到此错误,如我的示例所示
  • 不要使用ntfs:这不是我的选择

您的代码在安装了php7.4和ntfs的我的机器上运行得非常好:

/dev/sdaX on/mnt/tmp类型fuseblk rw,relatime,用户id=0,组id=0,允许其他,blksize=4096)

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

如果您可以在不设置时间参数的情况下创建普通文件,则可能与ntfs或fuse挂载有关

在这种情况下: 试着在strace中运行php命令,看看到底是什么失败了,这将有助于确定错误


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

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

除非需要与其他人一起归档,否则更改修改时间从来都不是一个好办法。这是仓促的,没有任何作用。我能告诉你的唯一一件事是你必须拥有这个文件,你可能需要root,只需要访问这些权限,而使用sudo你可以做任何事情。所以你对此没有希望了。我希望这能让你相信,对于你的客户来说,文件系统崩溃的另一种方式是什么。

当用户PHP以非缓存文件所有者的身份运行时,可能会发生这种情况。检查此链接

这是一个最小的可重复示例。我不想用这种方式调用touch,但是库可以。@IterAtor您读过文档了吗?它通常可以在自己的代码中指定任何问题。此外,如果它在GitHub上,您可以放心地提出代码问题,并由代码作者直接处理。您可以向我们展示fstab中的挂载行吗?如果它使用sudo工作,那肯定是权限问题。如果您在fstab中定义了
umask
,我的第一个问题是检查是否也定义了
uid
和/或
gid
?请添加有关所用场景的一些详细信息,例如确切的Linux发行版和版本、PHP版本以及当前装载数据以及所有选项/标志?谢谢