【问题标题】:PHP script stops suddenly without any errorPHP脚本突然停止而没有任何错误
【发布时间】:2013-03-12 08:11:18
【问题描述】:

我有一个 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 从远程服务器复制文件。但是当我从网络浏览器运行时同样的问题。它总是下载文件,执行下一行然后死掉!很奇怪!

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

【问题讨论】:

  • 您检查过网络服务器的错误日志吗?
  • 只是跑题了,抱歉,但我忍不住:我记得有次“640KB 应该足够所有人使用”。而现在,50-100 MB 是“小文件”。

标签: php curl


【解决方案1】:

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

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

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

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

【讨论】:

  • 您能解释一下我应该在哪些文件中搜索错误消息吗?检查 apache error.log、ssl_error_log - 没有错误消息。 Apache 是否可能在不留下任何消息的情况下重新启动?
猜你喜欢
  • 2019-03-12
  • 2013-06-30
  • 2019-06-25
  • 2011-01-06
  • 1970-01-01
  • 2019-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多