如何在php中下载大文件(>;250MB)?
我有一个脚本,允许用户下载文件大小>250MB的文件。当文件大小小于100MB时,可以下载。但如果文件大小大于250 MB,则不会如何在php中下载大文件(>;250MB)?,php,Php,我有一个脚本,允许用户下载文件大小>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文件的代码 in
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);
ini\u集('max\u execution\u time',512000);
$file_folder=“image/data/”;//要加载文件的文件夹
$zip=new ZipArchive();//加载zip库
$zip_name=“image.zip”;//邮政编码
如果($zip->open($zip_name,ZIPARCHIVE::CREATE)!==TRUE){//打开zip文件以加载文件
echo“*抱歉,此时创建ZIP失败
”;
}
$dir=opendir(“图像/数据”);
$counter=0;
while(false!=($file=readdir($dir)))
{
如果($file='.| |$file=''.')
{}其他
{
$zip->addFile($file\u folder.$file,$file);
}
}
$zip->close();
//推送下载zip文件
标题(“内容类型:应用程序/zip”);
标题('Content-Disposition:attachment;filename=“.”.$zip_name.'”);
标题('Content-Length:'.filesize($zip_name));
readfile($zip_名称);
//临时路径中存在删除zip文件
取消链接($zip_name);
好的。现在我可以下载我的文件了。但是,一旦我想提取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);
}
设置时间限制(0);
$file_folder=“image/data/”;
$zip=new ZipArchive();//加载zip库
$zip_name=“image.zip”;//邮政编码
如果($zip->open($zip_name,ZIPARCHIVE::CREATE)!==TRUE){//打开zip文件以加载文件
echo“*抱歉,此时创建ZIP失败
”;
}
$dir=opendir(“图像/数据”);
$counter=0;
while(false!=($file=readdir($dir)))
{
如果($file='.| |$file=''.')
{}其他
{
$zip->addFile($file\u folder.$file,$file);
}
}
$zip->close();
如果(文件存在($zip\u名称)){
//设置头推送下载zip文件
标题(“Pragma:public”);
标题(“到期日:0”);
标头(“缓存控制:必须重新验证,后检查=0,前检查=0”);
标头(“缓存控制:公共”);
标题(“内容类型:应用程序/zip”);
标题(“内容传输编码:二进制”);
标题('Content-Disposition:attachment;filename=“.”.$zip_name.'”);
标题(“内容长度:”.filesize($zip_name));
//readfile($zip_名称);
//临时路径中存在删除zip文件
//取消链接($zip_name);
$fp=@fopen($zip_name,“rb”);
如果($fp){
而(!feof($fp)){
echo-fread($fp,1024);
flush();//这对于大型下载非常重要
如果(连接状态()!=0){
@fclose($zip_name);
模具();
}
}
@fclose($zip_name);
}
取消链接($zip_name);
}
我检索的文件大小也是正确的。问题出在哪里?使用apache的modxsendfile:您可以将文件拆分为更小的部分并下载。请参阅本主题。您需要能够重新配置服务器以使用
x-sendfile
。下载出了什么问题,会发生什么?@Chibueze我根本不知道curl是如何处理的。你能详细说明一下吗?