PHP:在解压缩期间应用Chmod

3

这是我目前的进展。我需要能够将0666应用于存档中的所有文件。我在导出时不能这样做吗?在解压缩期间或解压缩后更改chmod的示例代码是什么?

$zip = new ZipArchive;
if ($zip->open('upload/'. $username . $file_ext) === TRUE) {
$zip->extractTo('dir/' . $username);
$zip->close();
} else {
echo 'failed';
}

感谢所有的帮助! Brandon
1个回答

3

将目录设置为0666可能不是你想要的;-)

在Linux中,任何进程创建文件时,目录使用0777,文件使用0666来创建,但它取决于umask值,最终权限将是什么样子。默认情况下,umask值为0022,这会创建像0644这样的文件;它的作用类似于减法。

因此,通过将umask重置为0,您可能会得到所需的结果。

umask(0);
$zip = new ZipArchive;
if ($zip->open('upload/'. $username . $file_ext) === TRUE) {
    $zip->extractTo('dir/' . $username);
    $zip->close();
} else {
    echo 'failed';
}

我在解压缩脚本之前添加了这个,并且服务器上的权限仍然是0604。我正在使用API,因此需要授予它访问权限以将文件传输到其服务... - blbaker
我应该尝试umask(111);或类似的东西吗? - blbaker
如果 umask(0) 不起作用,改变值也没有多大意义。我的机器上没有 zip 扩展(因为它无法编译),所以我只通过简单的 touch('testfile') 进行了测试,并且在更改 umask 时表现正常。 - Ja͢ck
成功编译了zip扩展,我的建议能够在提取时更改权限。我更新了我的回答以反映对我有效的代码。 - Ja͢ck
我确实做了那件事。但出于某些原因它并没有起作用。然而,我发现我在使用chmod()时弄错了。我使用的是chmod(dir/dir),而不是chmod(/dir/dir) :) - blbaker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接