2011-07-16 100 views
0

为什么在我的本地主机上完美地工作,而不是在我上传到服务器上的任何想法?在服务器中,它创建zip文件,但不创建文件夹,它将所有文件放入.zip文件中,而不区分文件夹。邮编功能在服务器上无法正常工作

function rzip($source, $destination) { 
    // create object 
    $zip = new ZipArchive(); 
    // open archive 
    if ($zip->open($destination, ZIPARCHIVE::CREATE) !== TRUE) { 
     die ("Could not open archive"); 
    } 

    $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source)); 
    foreach ($iterator as $key=>$value) { 
     $new_filename = substr($key,strrpos($key,"/") + 1); 
     $zip->addFile(realpath($key), $new_filename) or die ("ERROR: Could not add file: $key"); 
    } 

    $zip->close(); 
} 
+0

我不知道它为什么在你的本地主机上工作,但你只是将每个文件的基本名称加入到zip中。 zip应该如何知道该文件应该属于哪个zip文件夹? – hakre

+0

由于实时路径 – luqita

+0

您应该检查您的服务器错误日志的某些提示。你也应该检查一下,如果你的服务器的php版本和你的本地主机匹配。编辑这些问题到你的问题。 –

回答

0

您在地方误用(或不使用)RecursiveDirectoryIterator

第一点是您将迭代点文件夹(...),这可能是不希望的;要停止此操作,请使用SKIP_DOTS标志。

接下来,有一些工具可以获取相对于正在迭代的主目录的文件路径,并获得真实路径;分别使用getSubPathname()getRealpath()方法。

$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator(
       $source, RecursiveDirectoryIterator::SKIP_DOTS)); 
foreach ($iterator as $key => $value) { 
    $localname = $iterator->getSubPathname(); 
    $filename = $value->getRealpath(); 
    $zip->addFile($filename, $localname) or die ("ERROR: Could not add file: $key"); 
} 

以上只是一个答案,因为它太长了评论。上面没有回答为什么,“这是完全在我的本地主机工作,但不在服务器”。

+0

使它像这样:$ iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator( $ source)); ($ iterator为$ key => $ value){ \t $ localname = $ iterator-> getSubPathname(); \t $ filename = $ value-> getRealpath(); \t $ zip-> addFile($ filename,$ localname)or die(“ERROR:Could not add file:$ key”); \t \t} – luqita

相关问题