PHP脚本突然停止,没有任何错误

时间:2013-03-12 08:11:18

标签: php curl

我有一个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%下载的。

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

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

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

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

1 个答案:

答案 0 :(得分:0)

为确保您可以下载较大的文件,您必须确保存在:

  1. 可用于php的足够内存
  2. 最大执行时间限制设置得足够高。
  3. 根据你对ssh2_sftp所说的话(假设你是通过php运行它)你的问题是第二个问题。检查您的错误(-logs)以查找是否真的是您的错误。如果是这样,你只需增加你的settings / php.ini中的最大执行时间,那就应该修复它。

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