8

我正在构建一个应用程序,它在某一时刻会从外部 URL 卷曲一些内容。到目前为止,这总是很快/立即完成。但是,我不确定如果外部服务器需要很长时间才能响应会发生什么。PHP 会等待执行以下代码直到 cURL 完成吗?

我无法真正测试它,因为我不知道如何“模拟”较慢的响应。我希望这个伪代码能清楚地说明我的问题:

$ch = curl_init( $some_remote_url );
$fp = fopen( $some_local_file, 'wb' );
curl_setopt( $ch, CURLOPT_FILE, $fp );
curl_setopt( $ch, CURLOPT_HEADER, 0 );
curl_exec( $ch ); // Let's say this takes 20 seconds until the other server responds
curl_close( $ch );
fclose( $fp );
redirect( $some_other_url ); // Will this be executed instantly or only after 20 seconds?

我对此感到疑惑的原因是,如果远程服务器响应缓慢,我不希望我的用户查看“加载”页面 20 秒,因此我可能不得不将整个过程移至 cron 作业. 用户不需要立即卷曲的结果,因此该过程何时结束对他来说并不重要。

4

2 回答 2

5

Curl 将阻止执行。如果要在后台(异步)下载文件,请使用 cron 计划任务,或执行如下命令:

system("wget URL &");
于 2012-04-16T18:35:49.587 回答
0

我不知道这是否会停止脚本执行,但您可以创建一个脚本,直接将输出呈现到远程计算机,然后通过 AJAX 启动另一个脚本以执行您想要的 cURL 操作。最后它会返回一个响应,然后你的 JS 脚本会做重定向,或者你想要的。

当然这只对开启了JS的用户有效,只是说:浏览器中没有开启JS的每个人都无法正常浏览网页。

于 2012-04-16T18:34:45.093 回答