假设我有两个PHP脚本, s1.php 和 s2.php 。我们还假设 s2.php 大约需要30分钟的运行时间。
我想使用 s1.php 异步调用 s2.php 。当 s2.php 被调用时,它将自行运行而不会向 s1.php 返回任何值。 s1.php 不会等待 s2.php 完成; s1.php 会继续执行下一个命令,而 s2.php 会自行启动。
所以这是 s1.php
的伪代码我该怎么做?
重要提示:我正在使用共享托管环境
答案 0 :(得分:0)
开箱即用,PHP不支持异步处理或线程。您最有可能的是排队和/或消息传递。
这可以像在s1.php
中的数据库中存储行并在注释中建议的那样在cron上运行s2.php
一样简单,该注释读取该数据库,提取新行并执行任何逻辑你需要。
由您来清理 - 确保您不会多次重新处理相同的行。
其他解决方案将使用RabbitMQ或IronMQ之类的内容。 IronMQ可能是一个值得关注的好地方,因为它是一个基于云的服务,可以在您的共享托管环境中很好地工作,并且它们允许一个“开发层”帐户,该帐户是免费的,并且可能需要更多api调用。< / p>
其他有趣的事情是ReactPHP因为它允许在php中使用非阻塞的io。
答案 1 :(得分:0)
afaik,没有好办法做到这一点:/ 你可以使用proc_open / exec(“nohup php5 s2.php”)〜,或$ cmh = curl_multi_init(); $ CH = curl_init( “https://example.org/s2.php”); curl_multi_add_handle($ CHM,$ CH); curl_multi_exec($ CHM,$ foo的); 虽然(或者如果你没有卷曲,用fopen代替......或者如果allow_url_fopen为false,你甚至可以使用socket_create ~~:/)