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

PHP:cURL将在后台完成,还是阻止所有进一步的脚本执行?,php,curl,Php,Curl,我正在构建一个应用程序,它可以从外部URL中卷曲一些内容。到目前为止,这项工作总是很快/立即完成。但是,如果外部服务器需要很长时间才能响应,我不确定会发生什么。PHP会等到cURL完成后再执行下面的代码吗 我无法真正测试它,因为我不知道如何“模拟”较慢的响应。我希望这段伪代码能让我的问题更清楚: $ch = curl_init( $some_remote_url ); $fp = fopen( $some_local_file, 'wb' ); curl_setopt( $ch, CURLOPT

我正在构建一个应用程序,它可以从外部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作业。用户不需要立即得到卷曲的结果,因此当过程完成时,对他来说并不重要。

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


当然,这只适用于启用了JS的用户,但也就是说:浏览器中未启用JS的每个人都无法正常浏览web。

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

system("wget URL &");

+1个好问题。。。据我所知,20秒后,使用system()或exec()与常规cURL之类的同步任务的行为没有什么不同,但passthru()确实如此。不幸的是,出于安全原因,大多数托管服务器上都禁用了这三个功能。