PHP:从目录创建动态zip文件并从href链接下载

时间:2014-07-19 13:41:47

标签: php ziparchive

我从目录创建zip文件,如下所示:

<?php // On instancie la classe.
        $zip = new ZipArchive();

        if($zip->open($cheminAlbum.'.zip', ZipArchive::CREATE) == TRUE)
        {

         $fichiers = scandir($cheminAlbum.'/');
        // On enlève . et .. qui représentent le dossier courant et le dossier parent.
         unset($fichiers[0], $fichiers[1]);

        foreach($fichiers as $f) {
                if(!$zip->addFile($cheminAlbum.'/'.$f, $f)) {
                    echo 'Impossible d&#039;ajouter &quot;'.$f.'&quot;.<br/>';
                } else {
                    echo 'Fichier ajouter &quot; : '.$f.'&quot;.<br/>';
                }
         }

        $zip->close();

        } else {
            echo 'Erreur, impossible de créer l&#039;archive.';
    }

 ?>

我添加下载链接:

<a href="<?php echo $cheminAlbum.'.zip';?>"> Download Album </a>

当我访问目录时,我在调用php页面后没有找到zip文件 当我点击链接时,文件不存在

当我调试(添加回声)

时,文件正确添加到zip

我在代码中忘记了什么?

3 个答案:

答案 0 :(得分:0)

问题在于文件名。你的代码正在创建一个foldername / .zip文件而不是foldername / album1.zip检查下面的代码在url中添加一个动态文件名并在开始时

在创建和提供文件访问权限时,您需要考虑两件事。在创建文件时,您需要使用文件系统路径,当您提供链接时,您需要提供文件的URL

<?php // On instancie la classe.
        $zip = new ZipArchive();
        $filename = "somealbumName";
        if($zip->open($cheminAlbum.'/'.$filename.'.zip', ZipArchive::CREATE) == TRUE)
        {

         $fichiers = scandir($cheminAlbum.'/');
        // On enlève . et .. qui représentent le dossier courant et le dossier parent.
         unset($fichiers[0], $fichiers[1]);

        foreach($fichiers as $f) {
                if(!$zip->addFile($cheminAlbum.'/'.$f, $f)) {
                    echo 'Impossible d&#039;ajouter &quot;'.$f.'&quot;.<br/>';
                } else {
                    echo 'Fichier ajouter &quot; : '.$f.'&quot;.<br/>';
                }
         }

        $zip->close();

        } else {
            echo 'Erreur, impossible de créer l&#039;archive.';
    }

 ?>
 <a href="<?php echo $cheminAlbum.'/'.$filename.'.zip';?>"> Download Album </a>

答案 1 :(得分:0)

除非它在另一个文件中定义但您没有显示,否则$ cheminAlbum将没有任何价值。所以,你的锚无处可去。 您是否尝试过添加调试语句,例如使用print_r()打印变量值?您是否确定已定义变量,并且如果不在您正在访问它们的文件中,则包含它们的文件?

答案 2 :(得分:0)

我使用了这个功能,在文件夹中创建了一个zip。我打算在下载后,从服务器中删除zip

<?php // On instancie la classe.
    $zip = new ZipArchive();
    $filename = "$nom_ref";
    $cheminAlbum = "../../../../Images-Produits/2018/$nom_ref";
    if($zip->open($cheminAlbum.'/'.$filename.'.zip', ZipArchive::CREATE) == TRUE)
    {

     $fichiers = scandir($cheminAlbum.'/');
    // On enlève . et .. qui représentent le dossier courant et le dossier parent.
     unset($fichiers[0], $fichiers[1]);

    foreach($fichiers as $f) {
            if(!$zip->addFile($cheminAlbum.'/'.$f, $f)) {
                //echo 'Impossible d&#039;ajouter &quot;'.$f.'&quot;.<br/>';
            } else {
                //echo 'Fichier ajouter &quot; : '.$f.'&quot;.<br/>';
            }
     }

    $zip->close();

    } else {
        //echo 'Erreur, impossible de créer l&#039;archive.';
        }

     ?>

    <a href="<?php echo $cheminAlbum.'/'.$filename.'.zip';?>" action="action" class="btn btn-dropbox" title="Télécharger <?php echo $nom_ref; ?>.zip" style="float: left;">
    <i class="fa fa-download"></i>&nbsp; TÉLÉCHARGER .ZIP</a>