在不暂停脚本的情况下调用网页

时间:2011-04-04 14:15:56

标签: php curl

是否有任何方法可以使用curl或其他任何方式调用网页,而不会暂停调用脚本?

换句话说,

php code here
.
.
.
.
call_web_page();
.
.
.
php codes 2 here 

脚本运行php代码,然后调用网页并将php代码恢复到最后,而不等待被调用网页的结果。

不需要call_web_page();要成为一个函数,它可能是一些代码行来调用页面...

PS:没有AJAX或EXEC

5 个答案:

答案 0 :(得分:2)

您可以对页面加载完成时执行的PHP脚本执行Ajax请求。这样您就可以让用户知道您正在等待响应并让他们完成加载页面。但是,如果您需要检索的某些数据,可以考虑隐藏真实的页面元素并仅显示进度条。然后,当您拥有数据时,可以使用它填充元素,只是一个想法

更新,您可以将任务委派给计算机上运行的进程(如果您具有该级别的访问权限)

看看Run PHP Task Asynchronously也许这也有帮助。

答案 1 :(得分:0)

您可以使用与此答案类似的方法执行第二个php脚本(或系统命令 - 例如curl)作为后台进程:php execute a background process


编辑:由于没有exec sys命令

你可以使用file('http://yourserver.com/another.php');发出另一个php进程的请求。该文件包含此代码,并立即返回。该请求应该在您的服务器上发生,而无需徒步到互联网。

header("Connection: close");
header("Content-Length: " . mb_strlen($response));
echo $response;
flush();
do_function_that_takes_five_mins();

代码取自How to continue process after responding to ajax request in PHP?

答案 2 :(得分:0)

你想要做的是做asynchroneaus调用通过运行一些并行线程然后在某个连接点等待所有线程完成的操作。

实际上PHP中没有本机多线程支持,但你可以查看这篇文章:Does PHP have threading?

如果你想在php中实现多线程,可以使用一些建议。

答案 3 :(得分:0)

为什么不抓住页面并将其缓存30分钟(或更长时间,具体取决于内容)。然后,每次用户打开页面时都不需要等待。

你会使用类似的过程:

  • 检查本地缓存副本是否存在/不是太旧
  • 如果旧/不存在 - > fopen远程文件
  • 打开本地文件缓存
  • 根据需要重复多个文件

关于SO的更多阅读:

答案 4 :(得分:0)

由于PHP不是基于事件的i / o会阻塞,并且由于你不接受任何AJAX / Exec解决方案,我认为你不能在PHP中实现它。

也许尝试使用Node,Ruby EventMachine或Twisted Python?