PHP:cURL会在后台完成,还是阻止所有进一步的脚本执行?

时间:2012-04-16 18:29:58

标签: php curl

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

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

$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秒,所以我可能不得不将整个过程移动到一份计划工作。用户不需要立即获得卷曲的结果,因此在完成该过程时对他来说无关紧要。

2 个答案:

答案 0 :(得分:4)

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

system("wget URL &");

答案 1 :(得分:0)

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

当然,这只适用于已启用JS的用户,但只是说:在浏览器中未启用JS的所有人都无法正常浏览网页。