0

我有一个脚本,允许用户下载文件大小> 250MB 的文件。当文件大小 < 100MB 时,可以下载。但不适用于大于 250 MB 的文件。

I have changed the setting in php.ini:
memory_limit = 12800M
post_max_size = 8000M
upload_max_filesize = 2000M
max_execution_time = 512000 

但它仍然不可行。如何使我可以下载> 250MB的文件?

更新:下载 zip 文件的代码

ini_set('max_execution_time', 512000);

$file_folder = "image/data/";   // folder to load files

$zip = new ZipArchive();            // Load zip library 
$zip_name = "image.zip";            // Zip name
if($zip->open($zip_name, ZIPARCHIVE::CREATE)!==TRUE){       // Opening zip file to load files
    echo  "* Sorry ZIP creation failed at this time<br/>";
}

$dir = opendir ("image/data");
$counter = 0;
while (false !== ($file = readdir($dir))) 
{
    if($file == '.' || $file == '..')
    {   }else
    {
        $zip->addFile($file_folder.$file, $file);
    }
}

$zip->close();

// push to download the zip
header('Content-type: application/zip');
header('Content-Disposition: attachment; filename="'.$zip_name.'"');
header('Content-Length: ' . filesize($zip_name));
readfile($zip_name);
// remove zip file is exists in temp path
unlink($zip_name);
4

1 回答 1

0

好的..所以现在我可以下载我的文件了。但是,一旦我想提取 zip 文件,就会给出错误消息,说:存档格式未知或已损坏。我检查了原始文件夹中的 zip 文件的副本,尝试解压,它工作正常。提取数据没有问题。下面是脚本:

set_time_limit(0);
$file_folder = "image/data/";

$zip = new ZipArchive();    // Load zip library 
$zip_name = "image.zip";             // Zip name
if($zip->open($zip_name, ZIPARCHIVE::CREATE)!==TRUE){       // Opening zip file to load files
    echo  "* Sorry ZIP creation failed at this time<br/>";
}

$dir = opendir ("image/data");
$counter = 0;
while (false !== ($file = readdir($dir))) 
{
    if($file == '.' || $file == '..')
    {   }else
    {
        $zip->addFile($file_folder.$file, $file);
    }
}

$zip->close();
if(file_exists($zip_name)){

    // set headers push to download the zip
    header("Pragma: public");
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Cache-Control: public");
    header('Content-type: application/zip');
    header("Content-Transfer-Encoding: Binary");
    header('Content-Disposition: attachment; filename="'.$zip_name.'"');
    header("Content-Length: ".filesize($zip_name)); 

    //readfile($zip_name);
    // remove zip file is exists in temp path
    //unlink($zip_name);

    $fp = @fopen($zip_name, "rb");
    if ($fp) {
     while(!feof($fp)) {
         echo fread($fp, 1024);
         flush(); // this is essential for large downloads
         if (connection_status()!=0) {
             @fclose($zip_name);
             die();
         }
     }
     @fclose($zip_name);
    }
    unlink($zip_name);
}

我检索的文件大小也是正确的。问题是什么?

于 2013-07-11T01:54:35.320 回答