PHP 5.5 rename() 修改文件并删除权限 - 为什么?
PHP 5.5 rename() modifes files and removes permissions - why?
我正在使用 WPMU DEV 创建的 WP Smushit Pro
插件。他们的支持不会走到这一步,所以我会伸出援手。我很确定是我的服务器有问题。
当图像被 Smushed 时,PHP 函数 rename()
运行并覆盖原始图像。
问题是:
权限已更改,在线用户无法访问图像
之前的权限:rw-r--r--
(0644)
修改 Perms 后:rw-------
(0600)
更新
优化(模糊)图像在 copy()
覆盖现有文件之前在同一目录中创建为 .tmp 文件 (rename()
)。
图像优化工作流程
- 发送原始图像(图像名称)进行模糊处理
- 图像returns,将其存储为imagename.tmp文件
- 复制imagename.tmp文件到imagename - 原始文件
你遇到过这种权限修改吗?
如果是,如何优雅地解决问题?
请注意重命名文件的含义。
当文件保留在同一个文件系统上时,重命名实际上并不是对文件本身的操作。它只修改 directories:文件所在的目录和文件将所在的目录。它不会影响文件本身的内容或属性,例如它的访问权限和所有权. (文件名不是文件的 属性,而是指向文件的目录条目的名称。)
为了保持一致性,这也适用于跨文件系统移动文件时,即使在这种情况下,在幕后,必须创建一个新文件并且其内容和属性大部分被复制。
因此您可能需要修复对插件有效的用于创建新文件的默认权限(umask)。
我正在使用 WPMU DEV 创建的 WP Smushit Pro
插件。他们的支持不会走到这一步,所以我会伸出援手。我很确定是我的服务器有问题。
当图像被 Smushed 时,PHP 函数 rename()
运行并覆盖原始图像。
问题是:
权限已更改,在线用户无法访问图像
之前的权限:rw-r--r--
(0644)
修改 Perms 后:rw-------
(0600)
更新
优化(模糊)图像在 copy()
覆盖现有文件之前在同一目录中创建为 .tmp 文件 (rename()
)。
图像优化工作流程
- 发送原始图像(图像名称)进行模糊处理
- 图像returns,将其存储为imagename.tmp文件
- 复制imagename.tmp文件到imagename - 原始文件
你遇到过这种权限修改吗?
如果是,如何优雅地解决问题?
请注意重命名文件的含义。
当文件保留在同一个文件系统上时,重命名实际上并不是对文件本身的操作。它只修改 directories:文件所在的目录和文件将所在的目录。它不会影响文件本身的内容或属性,例如它的访问权限和所有权. (文件名不是文件的 属性,而是指向文件的目录条目的名称。)
为了保持一致性,这也适用于跨文件系统移动文件时,即使在这种情况下,在幕后,必须创建一个新文件并且其内容和属性大部分被复制。
因此您可能需要修复对插件有效的用于创建新文件的默认权限(umask)。