读书人

上载有关问题小文件上载正常上载大

发布时间: 2013-01-01 14:04:18 作者: rapoo

下载问题,小文件下载正常,下载大于100M的文件,进度条到100M以外的时候,进度条就不走了,代码什么地方出问题了?
本帖最后由 bxline 于 2012-12-17 06:31:43 编辑 我用的是下面的代码,我试验了两回一次下载到145M不走了,一次下载到129M就不走了
,这是怎么回事?小文件下载正常,就是大于100M的文件不正常
下面是代码:我是03+FASTCGI,不是apache,所以代码中有的行给注释掉了

if(file_exists($filename)){
$mtime = ($mtime = filemtime($filename)) ? $mtime : gmtime();
$size = intval(sprintf("%u", filesize($filename)));
#if (intval($size + 1) > return_bytes(ini_get('memory_limit')) && intval($size * 1.5) <= 1073741824) {
# ini_set('memory_limit', intval($size * 1.5));
#}
//@apache_setenv('no-gzip', 1);
//@ini_set('zlib.output_compression', 0);
header('Content-Description: File Transfer');
header('Content-Type: application/force-download');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($filename));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header("Content-Length: " . $size);
set_time_limit(300);
$chunksize = 1 * (1024 * 1024);
// ob_clean();
// flush();
if ($size > $chunksize) {
$handle = fopen($filename, 'rb');
$buffer = '';
while (!feof($handle)) {
$buffer = fread($handle, $chunksize);
echo $buffer;
ob_flush();
flush();
}
fclose($handle);
} else {
ob_flush();
flush();
readfile($filename);
}
exit;
}
[解决办法]
echo 100 * 1024 / 300;
得 341 K/s
即需要平均带宽为 3M 以上

你的下载代码不具有断点续传能力,一旦出现传输错误,即可终止
[解决办法]
我该写了一下,你看看


Function down($file){
IF(!$file Or !File_Exists($file) Or !Is_Readable($file)) {Return False;}

IF($f = atr($file)) {
Header("Content-Length:{$f['size']}");
Header('Content-Description:File Transfer');
Header('Content-Transfer-Encoding:binary');
Header('Expires:0');
Header('Cache-Control:must-revalidate');
Header('Pragma:public');

IF(Function_exists("mime_content_type")) {
Header("Content-Type: ".mime_content_type($f['name']));
}Else{
Header("Content-Type: application/octet-stream");


Header("Content-Disposition: attachment; filename={$f['name']}");
}
//Echo File_get_contents($file);

$handle = @fopen($file,'rb');
IF($handle) {
while (!feof($handle)) {
Echo fgets($handle,4096);
}
}
fclose($handle);

}Else{
Dir('error',$file.' read error!');
}
Unset($f);
}
Function atr($file){
$m = array();
$m['name'] = basename($file);
$m['type'] = filetype($file);
$m['real_path'] = RealPath($file);
$m['time'] = filemtime($file);
$m['size'] = filesize($file);
$m['writeable'] = Is_Writeable($file)?True:False;
$m['readable'] = Is_Readable($file)?True:False;
$m['chmod'] = substr(sprintf('%o', fileperms($file)),-4);
Return $m;
}

读书人网 >PHP

热点推荐