如何在后台运行PHP函数,而不是进程?例如,我必须这样做:
(php code)
1º) retrieve data from database#1
2º) retrieve data from database#2
3º) If #1 and #2 have finished, do my calculations.
函数#1和#2也是PHP代码。我不想使用“exec”或“system”,因为它们不是外部进程,它们也是PHP代码!我想应该存在一些聪明的方法来在后台运行PHP函数或行,就是这样。有什么想法吗?
答案 0 :(得分:3)
PHP不执行多线程*,因此您无法在同一脚本中执行此操作。
您需要启动一个单独的PHP进程,该进程通过单独的脚本运行。
对于CLI和可能的CGI模式, *)there is pcntl_fork
但它有陷阱,文档和示例在这看起来很稀疏,它仅限于Unix / Linux,我假设你在一个网页无论如何它都不起作用。
答案 1 :(得分:0)
您可以设置cURL multi handler
,它可以并行运行不同的脚本(并从中获取数据)。在我看来,这是在PHP中运行多线程脚本的最佳选择。
你必须改变一些东西 - 你想在后台运行的功能必须移动到他们自己的脚本中,并由cURL处理程序单独调用。
http://php.net/manual/en/function.curl-multi-exec.php
以下是一些使用示例:
答案 2 :(得分:0)
正如其他海报所说,直接无法进行穿线。
就您的具体问题而言,有一些方法可以做到这一点。您可以使用MySQLi::multi_query()
。第一个查询需要先完成,然后才能使用第二个查询的结果
$mysqli->multi_query($sql1 . ';' . $sql2);
$result1 = $mysqli->store_result();
$rows1 = $result1->fetch_all();
$result2 = $mysqli->store_result();
$rows2 = $result2->fetch_all();
两个查询并排执行。结果会同步返回,但它可以正常工作。
您还可以使用register_tick_function()
模拟线程。有some docs在线to actually使用时间刻度for threading。但是我必须警告你,以这种方式试图滥用它们通常是一个非常糟糕的主意,因为它并不是真正的线程它不会表现得不好喜欢它(语句仍按顺序执行,因此阻塞语句将阻止所有内容)。
答案 3 :(得分:0)
Php确实支持线程化 (需要PECL pthreads> = 0.34)
你会在这里找到一个例子http://php.net/manual/en/thread.start.php