【问题标题】:Multiple files download using PHP使用 PHP 下载多个文件
【发布时间】:2018-04-15 16:04:45
【问题描述】:

我正在尝试使用 PHP 下载多个文件。我知道它只能通过使用 zip 存档来完成,但我不希望所有目录和子目录都包含在下载的文件夹中,我只需要文件。

我尝试使用“basename()”,但是当我这样做时它不会下载任何东西,以下是我的代码。

我还尝试创建一个仅包含使用“basename()”提取的文件名的新数组,但它仍然无法下载。

        if ( extension_loaded( 'zip' ) ) {
        $zipFolder = new ZipArchive();
        $zipName = time().".zip";

        if ( $zipFolder->open( $zipName, ZIPARCHIVE::CREATE ) !== TRUE ) {
            echo "Sorry ZIP creation failed at this time";
        }

        foreach ( $filepathArray as $f ) {
            $zipFolder->addFile($f);
        }

        $zipFolder->close();

        if ( file_exists( $zipName ) ) {
            header( 'Content-type: application/zip' );
            header( 'Content-Disposition: attachment; filename="' . $zipName . '"' );
            readfile( $zipName );
            unlink( $zipName );
        }
    }

This 是我的仪表板屏幕截图:

你可以看到它的路径很长,因此我不需要所有这些文件夹,我只需要文件。

【问题讨论】:

  • 我认为您应该对此有所不同。与其将整个目录作为句柄,不如循环遍历远程目录并仅返回您想要的文件。然后将其作为文件句柄数组传递给您的 zip 库。

标签: php mysql file server download


【解决方案1】:

HTTP 不支持一次下载多个文件。因此,使用 javascript 超时制作基本页面,将用户重定向到每个文件,一次一个。

例子:

   <script type="text/javascript">
    var file_list = new Array(
      'http://www.example.com/filename1.file',
      'http://www.example.com/filename2.file',
      'http://www.example.com/filename3.file'
    );
    for (var i=0; i < file_list.length - 1; i++) {
      setTimeout(function () {
         document.location = file_list[i];
      }, i * 1000);
    }
    </script>

    <h1>Please wait</h1>
    <p>Your download will start in a moment.</p>

【讨论】:

  • 这没有意义。这不是 PHP,让用户下载文件和让服务器下载文件之间有很大的不同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-04
  • 2010-12-17
  • 2015-07-05
  • 1970-01-01
  • 1970-01-01
  • 2011-06-27
相关资源
最近更新 更多