【问题标题】:PHP : create dynamic zip file from directory and dowload it from href linkPHP:从目录创建动态 zip 文件并从 href 链接下载
【发布时间】:2014-07-19 13:41:46
【问题描述】:

我从这样的目录创建 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 中

我在 y 代码中忘记了什么?

【问题讨论】:

    标签: php ziparchive


    【解决方案1】:

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

    【讨论】:

    • 是的,我打印了 $cheminAlbum 的值,它不是空的,例如值 = images/album1/album1.zip
    • @user3817737 如果值 = images/album1/album1.zip,则打开一个名为 album1.zip.zip 的 .zip。
    • zip 包含不是 'zip.zip'
    • "if($zip->open($cheminAlbum.'.zip', ZipArchive::CREATE) == TRUE)" – 如果 $cheminAlbum 是您所说的,您将创建一个.zip.zip 文件。你能给我一个 $cheminAlbum 的实际值吗?
    • cheminAlbum 的值为:images/album1
    【解决方案2】:

    问题在于文件名。您的代码正在创建一个文件夹名/.zip 文件而不是文件夹名/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>
    

    【讨论】:

    • 我也试试,我也有同样的问题
    • 在此服务器上找不到请求的 URL /website/images/album1/somealbumName.zip。
    • 网站是wamp的子目录(wamp/www/website)
    • 如果您使用的是 Windows,则在创建 zip 文件时使用 \\ 而不是 / 并检查文件是否在目标文件夹中创建。在创建和提供对文件的访问时,您需要考虑两件事。创建文件时需要使用文件系统路径,提供链接时需要提供文件的 url
    • 我用\\更改了,zip文件不是在目录中创建的
    【解决方案3】:

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

    <?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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-16
      • 1970-01-01
      • 1970-01-01
      • 2018-09-24
      • 2015-06-15
      • 1970-01-01
      • 2018-01-19
      • 2023-03-27
      相关资源
      最近更新 更多