在ZipArchive中设置权限

mim*_*ock 6 php unix macos zip ziparchive

我有一个Zip文件.我用ZipArchive php库打开它,并在其中添加一个目录和一个文件.当我用ubuntu的默认unarchiver提取它时,一切都按预期工作.但是当我在OS X Snow Leopard上使用任何unarchiver提取它时(尝试使用默认的一个,Keka和Unarchiver),新目录的权限是700.预期的权限是755.

所以,这是原始的zip:

DIRECTORY
a.txt
b.txt
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

<?php
$file = 'example.zip';
$zip = new ZipArchive;
$res = $zip->open($file, ZipArchive::CREATE);
  if ($res === TRUE) {

    $zip->addEmptyDir('DIRECTORY/NEW_DIR');
    $zip->addFromString('DIRECTORY/NEW_DIR/c.txt', 'hellooo');
    $zip->close();
  }
  else {
    print 'error';
  }
Run Code Online (Sandbox Code Playgroud)

结果是:

DIRECTORY -> NEW_DIR -> c.txt
a.txt
b.txt
Run Code Online (Sandbox Code Playgroud)

这是正确的,但如果我在osx下提取它,则NEW_DIR目录的权限是700(drwx ------)而不是755.怎么解决?

谢谢!

编辑:

这是关于我的zip文件的zipinfo:

$ zipinfo -l test.zip 
(..)
drwxr-xr-x  3.0 unx        0 bx        0 stor 13-Dec-11 17:43 DIRECTORY/
-rw-r--r--  3.0 unx      533 tx      327 defN  3-Nov-11 01:50 a.txt
-rw-r--r--  3.0 unx    91669 tx    32044 defN  3-Nov-11 01:09 b.txt
-rw----     0.0 fat        0 b-        2 defN 13-Dec-11 18:12 DIRECTORY/new_dir/
-rw----     0.0 fat        7 b-        9 defN 14-Dec-11 10:30 DIRECTORY/new_dir/c.txt
Run Code Online (Sandbox Code Playgroud)

Mat*_*kas -1

如果您拥有必要的安全权限,您可以执行以下操作

<?php
    exec("chmod -R 755 /directory/new_dir");
Run Code Online (Sandbox Code Playgroud)