【问题标题】:PHP touch() is not affected by file permissions?PHP touch() 不受文件权限影响?
【发布时间】:2018-03-07 17:54:39
【问题描述】:

我已经设置了一个演示“管理员”网站,所有文件权限设置为 555 的目录和 444 的文件,以便禁用任何“保存”功能。到目前为止一切顺利。

但是,我注意到 PHP touch() 函数不受文件权限的影响?我在没有写入权限(555)的目录上成功运行 PHP touch()。似乎有点奇怪。这是预期的行为(PHP 7.2)吗?

我试图阻止 touch() 能够执行(通过文件权限),但目前无法看到这是怎么可能的。

谢谢。

【问题讨论】:

  • 您确实看到文件的修改时间发生了变化?
  • PHP 是否以特权用户身份运行?
  • 操作系统强制执行权限,PHP 无法绕过它们,除非它以root 运行。
  • @ceejayoz 是的,经过测试和验证。
  • 允许文件的所有者更改其时间戳,即使没有写入权限。

标签: php permissions filemtime php-7.2


【解决方案1】:

来自utimes(3) 文档:

进程的有效用户 ID 应与文件的所有者相匹配,或对文件具有写访问权或以这种方式使用此调用的适当权限。

因此,即使没有写入权限,所有者也可以更新时间戳。您需要更改文件的所有权,使其与运行 PHP 脚本的用户不同。

如果这是一个问题,也许你应该使用其他方法来跟踪文件修改时间的变化。

【讨论】:

  • 我想我可以更改需要阻止touch() 的单个目录的所有权。当我从原始所有者那里进行更新时,只需要记住暂时将其设置回来。谢谢!
  • 目录的所有权无关紧要,只有文件所有权重要。
  • 但是 touch() 函数是在目录上执行的。不是其中的文件。
  • 问题并不清楚。重要的是touch() 的任何论点的所有权。如果您只是触摸目录,则文件权限无关紧要。
  • touch()而言,文件和目录之间并没有真正的区别。
猜你喜欢
  • 2015-03-30
  • 1970-01-01
  • 1970-01-01
  • 2013-09-10
  • 2015-11-19
  • 1970-01-01
  • 2012-10-25
  • 1970-01-01
  • 2014-01-29
相关资源
最近更新 更多