【问题标题】:touch(): Utime failed: Operation not permittedtouch(): Utime failed: 不允许操作
【发布时间】:2020-09-24 21:24:20
【问题描述】:

我尝试运行这个命令:

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:这不是我的选择

【问题讨论】:

  • 你能告诉我们 fstab 的挂载线吗?如果它使用 sudo 工作,那肯定是权限问题。如果您在 fstab 中定义了 umask,我的第一个问题是检查是否也定义了 uid 和/或 gid
  • 请添加一些有关使用场景的详细信息,例如确切的 Linux 发行版和版本、PHP 版本以及带有所有选项/标志的当前挂载数据?谢谢

标签: php linux raspberry-pi touch ntfs


【解决方案1】:

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

/dev/sdaX on /mnt/tmp type fuseblk rw,relatime,user_id=0,group_id=0,allow_other,blksize=4096)

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

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      当用户 PHP 以不是缓存文件所有者的身份运行时,可能会发生这种情况。查看此链接Utime failed: Operation not permitted

      【讨论】:

        【解决方案4】:

        除非需要向其他人提交文件,否则更改修改时间从来都不是一个好点。它很仓促,对它没有任何作用。我唯一能告诉你的是你必须拥有该文件,你可能需要 root,只是为了访问这些权限,并且使用 sudo 你可以做任何事情。所以你对此没有希望。我希望这能让您相信您的客户文件系统崩溃的其他方式。

        【讨论】:

        • 这是一个最小的可重现示例。我不想这样称呼 touch,但图书馆可以。
        • @IterAtor 你读过文档吗?它通常可以在自己的代码中指定任何问题。此外,如果它在 GitHub 上,您可以放心地提出代码问题,并由代码作者直接关心。
        猜你喜欢
        • 2015-09-01
        • 2014-09-04
        • 1970-01-01
        • 2016-01-12
        • 1970-01-01
        • 2019-12-04
        • 2012-01-03
        • 2021-02-10
        • 2021-01-01
        相关资源
        最近更新 更多