PHP get_file_contents是异步的

时间:2013-05-17 10:30:04

标签: php

我只是想知道是否有人设法以异步方式获取远程URL的内容,对其进行处理,然后将其输出到当前文档而不使用AJAX。

3 个答案:

答案 0 :(得分:2)

PHP是单线程的。您必须使用浏览器功能来分叉另一个进程。

Javascript可以是异步的,你需要它来处理你的情况。

答案 1 :(得分:2)

没有使用file_get_contents,没有。或者,您可以使用CURL扩展及其非阻塞IO功能。所有这些都可以通过CURL的多处理程序获得。从某种意义上说,它是“异步”的,如果结果还没有准备好被读取,你可以轮询结果并继续处理其他事情。这使得它“异步”就意味着你永远不会阻止并等待响应,只要有工作要做 - 做到这一点。有些人难以理解的是异步和非阻塞之间的区别在大多数情况下使用PHP,你真正想要的是某种NB I / O.给定一些抽象层,您可以真正想出一个不错的IO回调接口,它具有所有的功能,但这是另一个故事..

请参阅http://www.php.net/manual/en/function.curl-multi-init.php这是它开始的地方,包含的示例很棒 见http://www.php.net/manual/en/function.curl-multi-exec.php 有关NB轮询器的信息,请参阅http://www.php.net/manual/en/function.curl-multi-select.php

这个人避免了卷曲的容易,直接处理http协议,这是另一种解决方案https://segment.io/blog/how-to-make-async-requests-in-php/,但需要更多关于socket api的知识。

干杯

答案 2 :(得分:0)

您可以做的是在PHP中创建非阻塞套接字连接,这意味着您的代码可以处理其他内容(例如,打印出HTML + flush()到浏览器),同时加载连接中的数据,然后轮询它后面。

只是谷歌'php异步套接字'