0

我的主机(可能还有我的互联网连接)有问题:我使用 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,但我无法弄清楚我做错了什么。请问你能帮帮我吗?

非常感谢。

4

0 回答 0