【问题标题】:PHP download large file to server with size bigger than 1gbPHP将大于1gb的大文件下载到服务器
【发布时间】:2014-05-14 19:38:31
【问题描述】:

我正在尝试使用下面的 php-curl 脚本直接在我的服务器上下载视频文件,但是在获得大约 120mb 的文件后它停止下载,文件超过 500mb,其中一些是 1gb 和 1.5gb尺寸。我搜索了很多,但没有解决任何问题。我在共享主机上运行。

if ($url) {
    $file_loc = 'moviez/' . $name;
    $fp = fopen($file_loc, 'w+');
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_TIMEOUT, 0);
    curl_setopt($ch, CURLOPT_FILE, $fp);
    curl_exec($ch);
    curl_close($ch);
    fclose($fp);
}

【问题讨论】:

  • 您应该检查php.ini 中的upload_max_filesize 设置,请参阅here
  • 由于 m 在共享主机上运行,​​我无权更改此设置。我也要求管理员增加连接时间,但他们拒绝了,并要求我找到任何替代的想法。
  • 下载应该被上传,因为你把它放在“服务器上”:)
  • 好吧,我无法访问 php.ini,简而言之,我的问题是我试图从 youtube.com 将视频文件保存到我的服务器,该文件的大小超过 1gb。但是我的脚本在获取大约100mb之后返回这个错误......“请求超时这个请求处理时间太长,被服务器超时。如果不应该超时,请联系本网站管理员增加'连接超时'。”

标签: php file curl download


【解决方案1】:

我怀疑脚本可能正在超时。如果我没记错的话,默认是 30 秒。您的主机也可能会限制您的脚本运行时间。您可以使用 ini_set('max_execution_time', nnn) 来增加超时时间。

编辑:更好的是,使用 set_time_limit(),它会抛出错误:

Warning: set_time_limit(): Cannot set time limit in safe mode

如果您的主机限制了您。

【讨论】:

  • 我已经添加了 set_time_limit(0),但没有错误。
【解决方案2】:

正如 Luke 所说,您的脚本在下载完成之前就超时了。 设置 max_execution_time 的问题是只影响上传。

您的解决方案应由 readfile() 或 file_get_contents() 处理。伟大的来源在这里找到:http://www.ibm.com/developerworks/library/os-php-readfiles/index.html?ca=drs

编辑:Max_execution_time 和 max_input_time 之间的轻微混淆。

编辑二:示例,

<?php
$file = $_GET['file'];
header ("Content-type: octet/stream");
header ("Content-disposition: attachment; filename=".$file.";");
header("Content-Length: ".filesize($file));
readfile($file);
exit;
?>


<a href="direct_download.php?file=batman.mkv">Download the batman</a>

【讨论】:

  • 但这将在浏览器端开始下载,而不是我想将内容保存在服务器上。
  • 哦,我被你问题中的“下载”这个词弄糊涂了!您正在寻找上传到您的服务器。您将在 php.ini 中查看 max_input_time。这里:php.net/manual/en/info.configuration.php#ini.max-input-time
  • 好吧,我无法访问 php.ini,简而言之,我的问题是我试图从 youtube.com 将视频文件保存到我的服务器,该文件的大小超过 1gb。但是我的脚本在获取大约100mb之后返回这个错误......“请求超时这个请求处理时间太长,被服务器超时。如果不应该超时,请联系本网站管理员增加'连接超时'。”
  • 现在听起来像是 max_execution_time 问题,因为脚本会不断地检索文件。如果无法访问 php.ini 文件,我不完全确定如何进行。对不起,伙计。
【解决方案3】:

检查这个脚本。下载大于 500mb 的文件对我来说效果很好。

Light Weight PHP Script To Download Remote File To Local Server

<?php
// maximum execution time in seconds
set_time_limit (24 * 60 * 60);
if (!isset($_POST['submit'])) die();
// folder to save downloaded files to. must end with slash
$destination_folder = 'files/';
$url = $_POST['url'];
$newfname = $destination_folder . basename($url);
$file = fopen ($url, "rb");
if ($file) {
  $newf = fopen ($newfname, "wb");
if ($newf)
  while(!feof($file)) {
    fwrite($newf, fread($file, 1024 * 8 ), 1024 * 8 );
  }
}
if ($file) {
  fclose($file);
}
if ($newf) {
  fclose($newf);
}
?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-25
    • 1970-01-01
    • 2012-08-04
    相关资源
    最近更新 更多