【问题标题】:downloading large sized file issue下载大文件问题
【发布时间】:2013-11-30 05:34:22
【问题描述】:

我有一个在我的本地机器上运行良好的下载脚本。但上传到服务器后,当我的 ios 应用程序调用脚本时,它会在 100-120 秒后停止。我只是将脚本更改为另一台服务器。它运行良好。我不知道服务器中缺少什么配置(下载过程中出现问题的配置)?我google了很多,但仍然没有解决方案。所以我的问题是我该如何解决这个问题?真正的问题是什么?我的谷歌搜索之一达到了 Xscend-file 。但我怀疑它是否支持部分下载?我的脚本是..

$finfo         = finfo_open(FILEINFO_MIME_TYPE); // return mime type ala mimetype extension
$mime_type  = finfo_file($finfo, ROOT_PATH."/file_folder/".$file_name);
$file           = ROOT_PATH."/file_folder/".$file_name;             
$filesize       =   filesize($file);
$offset         =   0;
$length         =   $filesize;
if ( isset($_SERVER['HTTP_RANGE']) ) {

    $partialContent = true;
    preg_match('/bytes=(\d+)-?/', $_SERVER['HTTP_RANGE'], $matches);
    $offset = intval($matches[1]);
    $length = $filesize - $offset;
} 
else {
      $partialContent = false;
}
$file       = fopen($file, 'r');
fseek($file, $offset);
$data       = fread($file, $length);
fclose($file);
if ( $partialContent ) {

    header('HTTP/1.1 206 Partial Content');

    header('Content-Range: bytes ' . $offset . '-' . ($offset + $length) . '/' . $filesize);
}
//header("X-Sendfile: $file_name");
header('Content-Description: File Transfer');
header("Content-type: " .$mime_type);
header('Content-Disposition: attachment; filename="' . $file_name. '"');
//header('Content-Transfer-Encoding: binary');
    //header('Expires: 0');
    //header('Cache-Control: must-revalidate');
    //header('Pragma: public');
header('Content-Length: ' . $length);                   
header('Accept-Ranges: bytes');
print($data);

【问题讨论】:

    标签: php apache download http-headers x-sendfile


    【解决方案1】:

    试试这个代码来下载文件

    $filename = 将是您要下载的完整路径的文件名

    $filename2 = 将是您下载文件后的文件名

     header('Content-Description: File Transfer');
                header('Content-Type: application/octet-stream');
                header('Content-Disposition: attachment; filename='.$filename2);
                header('Content-Transfer-Encoding: binary');
                header('Expires: 0');
                header('Cache-Control: must-revalidate');
                header('Pragma: public');
                header('Content-Length: ' . filesize($filename));
                ob_clean();
                flush();
                readfile($filename);
                exit;
    

    【讨论】:

    • 还是同样的问题.. :(
    【解决方案2】:

    在服务器的 php.ini 文件中设置最大执行时间

    【讨论】:

    • 我已经这样做了。set_time_limit(0); ini_set('memory_limit', '512M');
    猜你喜欢
    • 2016-02-18
    • 2022-01-11
    • 2012-03-14
    • 1970-01-01
    • 2021-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    相关资源
    最近更新 更多