gpt4 book ai didi

php - 在 PHP 中可靠地下载大文件

转载 作者:IT王子 更新时间:2023-10-28 23:45:31 27 4
gpt4 key购买 nike

我在服务器上有一个 php 脚本来发送文件给recipents:他们得到一个唯一的链接,然后他们可以下载大文件。有时传输出现问题,文件已损坏或永远不会完成。我想知道是否有更好的方法来发送大文件

代码:

$f = fopen(DOWNLOAD_DIR.$database[$_REQUEST['fid']]['filePath'], 'r');
while(!feof($f)){
print fgets($f, 1024);
}
fclose($f);

见过这样的功能

http_send_file
http_send_data

但我不确定它们是否会起作用。

解决这个问题的最佳方法是什么?

问候
欧翼

最佳答案

分 block 文件是 PHP 中最快/最简单的方法,如果您不能或不想使用像 cURL 这样更专业的东西的话, mod-xsendfileApache或一些 dedicated script .

$filename = $filePath.$filename;

$chunksize = 5 * (1024 * 1024); //5 MB (= 5 242 880 bytes) per one chunk of file.

if(file_exists($filename))
{
set_time_limit(300);

$size = intval(sprintf("%u", filesize($filename)));

header('Content-Type: application/octet-stream');
header('Content-Transfer-Encoding: binary');
header('Content-Length: '.$size);
header('Content-Disposition: attachment;filename="'.basename($filename).'"');

if($size > $chunksize)
{
$handle = fopen($filename, 'rb');

while (!feof($handle))
{
print(@fread($handle, $chunksize));

ob_flush();
flush();
}

fclose($handle);
}
else readfile($path);

exit;
}
else echo 'File "'.$filename.'" does not exist!';

移植自 richnetapps.com/NeedBee .在 200 MB 的文件上进行了测试,readfile() 死了,即使最大允许内存限制设置为 1G,也就是下载文件大小的五倍。

顺便说一句:我也在文件 >2GB 上测试了这个,但是 PHP 只成功写入了第一个 2GB 的文件,然后断开了连接。与文件相关的函数(fopen、fread、fseek)使用 INT,因此您最终达到了 2GB 的限制。上述解决方案(即 mod-xsendfile)似乎是这种情况下的唯一选择。

编辑:让自己100%您的文件以utf-8 格式保存。如果您忽略它,下载的文件将被损坏。这是因为此解决方案使用 print 将文件 block 推送到浏览器。

关于php - 在 PHP 中可靠地下载大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/597159/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com