【问题标题】:PHP 5.5 rename() modifes files and removes permissions - why?PHP 5.5 rename() 修改文件并删除权限 - 为什么?
【发布时间】:2015-06-24 03:20:07
【问题描述】:

我正在使用 WPMU DEV 创建的WP Smushit Pro 插件。他们的支持不会走这么远,所以我伸出手。我很确定是我的服务器有问题。

当图像被涂抹时,PHP 函数rename() 运行并覆盖原始图像。

问题是:

权限已更改,使在线用户无法访问图像

以前的权限:rw-r--r-- (0644)
修改烫发后:rw------- (0600)


更新

优化的(模糊处理的)图像在被copy()'d 覆盖现有文件之前被创建为同一目录中的 .tmp 文件 (rename())。

图像优化工作流程

  1. 发送原始图像(图像名称)以获取 smushed
  2. 图片返回,保存为imagename.tmp文件
  3. 将 imagename.tmp 文件复制到 imagename - 原始文件

你以前遇到过这种权限修改吗?
如果是这样,可以做些什么来优雅地解决问题?

【问题讨论】:

  • 你能引用PHP文档中你指的部分吗?
  • 您能否说明重命名前后文件的权限用户/组所有权
  • @cascaval 感谢您的帮助。我做了一个错误的陈述。文档没有提到继承原产地权限 - 我已经更新了问题。

标签: php apache ubuntu permissions wpmu


【解决方案1】:

请注意重命名文件的含义。

当文件保留在同一个文件系统上时,重命名实际上并不是对文件本身的操作。它只修改directories:文件所在的目录和文件将在的目录。它不影响文件本身的内容或属性,例如它的访问权限和所有权。 (文件名不是文件的属性,而是指向文件的目录条目的属性。)

为了保持一致性,这也适用于跨文件系统移动文件时,即使在这种情况下,在幕后,必须创建一个新文件并且其内容和属性大部分都被复制。

因此,您可能需要修复用于创建对插件有效的新文件(umask)的默认权限。

【讨论】:

  • 感谢您的精彩解释!但我迷路了。如何申请,网络 umask 的最佳设置是什么?
  • 还有一件事,PHP 文档说:尝试将旧名称重命名为新名称,必要时在目录之间移动它。如果 newname 存在,它将被覆盖每个文件都已经存在,因此将发生覆盖 - 这将修改内容对吗?
  • 我输出了网络用户 umask,上面写着0002 - 可以吗?仅供参考 - 我更新了问题
  • 如果真的会被覆盖,那就意味着内容被复制到预先存在的目标文件中;在这种情况下,我希望权限保持原样。
  • 0002 看起来不错,所以这可能是一个红鲱鱼。
猜你喜欢
  • 2018-02-13
  • 2019-05-18
  • 1970-01-01
  • 2013-12-08
  • 2015-12-11
  • 2011-08-19
  • 1970-01-01
  • 2021-09-01
相关资源
最近更新 更多