0

我有一个 PHP 脚本,可以从我拥有的远程服务器下载带有直接链接的文件。有时是大文件 (~500-600 MB),有时是小文件 (~50-100 MB)。

脚本中的一些代码:

$links[0]="file_1";
$links[0]="file_2";
$links[0]="file_3";

for($i=0;$i<count($links);$i++){

    $file_link=download_file($links[$i]); //this function downloads the file with curl and returns the path to the downloaded file in local server
    echo "Download complete";
    rename($file_link,"some other_path/..."); //this moves the downloaded file to some other location
    echo "Downloaded file moved";
    echo "Download complete";

}

我的问题是,如果我下载大文件并从 Web 浏览器运行脚本,最多需要 5-10 分钟才能完成,并且脚本会回显到“下载完成”,然后它会完全死掉。我总是发现在脚本终止之前正在下载的文件是 100% 下载的。

另一方面,如果我从 Web 浏览器下载 50-100MB 之类的小文件或从命令 shell 运行脚本,则根本不会出现此问题并且脚本完全完成。

我为此使用自己的 VPS,并且在服务器中没有任何时间限制。没有致命错误或内存过载问题。

我也曾经ssh2_sftp从远程服务器复制文件。但是当我从网络浏览器运行时同样的问题。它总是下载文件,执行下一行然后死掉!很奇怪!

我应该怎么做才能克服这个问题?

4

1 回答 1

0

为确保您可以下载更大的文件,您必须确保有:

  1. 足够的内存可用于 php
  2. 最大执行时间限制设置得足够高。

从您所说的关于 ssh2_sftp (我假设您是通过 php 运行它)来看,您的问题是第二个问题。检查你的错误(-logs),看看这是否真的是你的错误。如果是这样,您只需在 settings/php.ini 中增加最大执行时间,这应该可以解决它。

注意:我建议您不要让 PHP 处理这些大文件。调用一些程序(通过system()exec())为您下载,因为 PHP 仍然存在垃圾收集问题。

于 2013-03-12T08:14:39.910 回答