PHP 读取文件下载超时

PHP readfile download timing out

我的 PHP 脚本将 crashing/timing 排除在外,大概是因为读取文件。 我的目标是生成 zip,让用户下载,然后删除 zip。

代码:

<?php

if(isset($_POST['version']) && isset($_POST['items']) && isset($_POST['identifier'])) {

$identifier = $_POST['identifier'];
$version = $_POST['version'];
$tmp = dirname(__FILE__) . "/download/";
$zipfile = $tmp . $identifier . ".zip";
$name = "Program v" . $version . ".zip";
$path = dirname(__FILE__) . "\download\template\" . $version;

$files = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($path),
    RecursiveIteratorIterator::LEAVES_ONLY
);

$zip = new ZipArchive();

if ($zip->open($zipfile, ZipArchive::CREATE | ZipArchive::OVERWRITE) === TRUE) {

    foreach ($files as $name => $file) {
        // Skip directories (they would be added automatically)
        if (!$file->isDir()) {
            // Get real and relative path for current file
            $filePath = $file->getRealPath();
            $relativePath = substr($filePath, strlen($path) + 1);

            //echo "adding " . $file . " as " . $relativePath;
            // Add current file to archive
            $zip->addFile($file, $relativePath);
        }
    }

    $zip->close();
} else {
    die('Error: Unable to create zip file');
}

// Stream the file to the client
header('Content-Type: application/zip');
header('Content-Length: ' . filesize($zipfile));
header('Content-disposition: attachment; filename="'.$name.'"');
readfile($zipfile);
exit;

}

一切正常,直到下载部分。 zip 文件在服务器上生成正常,当尝试下载它时,它崩溃了。

有时它会在我的日志中显示一个错误,告诉我它需要一个有效的路径并且给出了一个对象。即使它严格地输出一个字符串(路径)。

注意:文件小于 300 KiB,所以我非常怀疑网络服务器 运行 内存不足。

我很迷茫,非常感谢任何帮助。

问题出在 ZIP 文件的生成上。 addFile 方法需要一个文件 path 作为它的第一个参数,而不是一个对象。请参阅文档:

bool ZipArchive::addFile ( string $filename [, string $localname = NULL [, int $start = 0 [, int $length = 0 ]]] )

http://php.net/manual/en/ziparchive.addfile.php

因此,在您的情况下,正确的表达方式是:

$zip->addFile($filePath, $relativePath);