zipArchive:如何使用它

时间:2013-06-26 19:51:44

标签: php zip ziparchive

我的主机(也许是我的互联网连接)存在问题:我使用filezilla在我的网站上上传几个巨大的.zip(每个.zip重约500Mo),连接在上传结束前关闭。 所以,我想我会上传一个包含我的照片的文件夹(以这种方式,filezilla上传几个小文件,而不是一个巨大的文件),然后我将通过PHP脚本进行存档。

这是我做的代码:

/*
params :
string $nom_archive: archive's name in '.zip' (ex. 'archive.zip', 'test.zip', etc.)
string $adr_dossier: the path of the folder to archive (ex. 'images', '../dossier1/dossier2', etc.)
string $dossier_destination : path of the folder where we will copy/paste the archive (ex. 'images/zip', '../archives', etc.)  
DOn't change the params $zip and $dossier_base
*/

function zipper_repertoire_recursif($nom_archive, $adr_dossier, $dossier_destination = '', $zip=null, $dossier_base = '') {
    if($zip===null) {
        $zip = new ZipArchive();
        if($zip->open($nom_archive, ZipArchive::CREATE) !== TRUE) {
            return false;
        }
    }

    if(substr($adr_dossier, -1)!='/') {
        $adr_dossier .= '/';
    }

    if($dossier_base=="") {
        $dossier_base=$adr_dossier;
    }

    if(file_exists($adr_dossier)) {
        if(@$dossier = opendir($adr_dossier)) {
            while(false !== ($fichier = readdir($dossier))) {
                if($fichier != '.' && $fichier != '..') {
                    if(is_dir($adr_dossier.$fichier)) {
                        $zip->addEmptyDir($adr_dossier.$fichier);
                        zipper_repertoire_recursif($nom_archive, $adr_dossier.$fichier, $dossier_destination, $zip, $dossier_base);
                    }
                    else {
                        $zip->addFile($adr_dossier.$fichier);
                    }
                }
            }
        }
    }

    if($dossier_base==$adr_dossier) {
        $zip->close();

        if($dossier_destination!='') {
            if(substr($dossier_destination, -1)!='/') {
                $dossier_destination .= '/';
            }
            if(rename($nom_archive, $dossier_destination.$nom_archive)) {
                return true;
            }
            else {
                return false;
            }
        }
        else {
            return true;
        }
    }
}

然后,我用这种方式调用我的函数:

zipper_repertoire_recursif('Myriam&Fabien_byGFernandez_Originales.zip', './Myriam&Fabien/Photos/originales/photos_originales', './Myriam&Fabien/Photos/originales')

但它不起作用,我不知道为什么。

我已经检查过我的服务器上是否启用了zip。 你对我的问题有任何想法吗? 也许我用错误的方式使用ZipArchive,但我无法弄清楚我做错了什么。 请你帮帮我吗?

非常感谢。

0 个答案:

没有答案