我正在尝试与之前的Python问题完全相同,但在PHP中。 See my previous (answered) question
上一个问题的PHP脚本做了一些事情然后在同一台服务器上运行另一个PHP脚本,做了一些事情然后退出(而第二个脚本仍然继续它的工作)。我如何实现这一目标?
请注意,PHP脚本同时也是一个网页(所以也许我们可以像以前的问题一样使用它,我的问题的答案是片段,使得python只是打开网址而不是运行子进程...虽然我没有线索,如果这是有用的信息,也许它在PHP中有所不同,我在PHP中没有太多经验... ...而且我想让每个脚本独立 - 所以如果第一个php脚本将完成我希望第二个PHP脚本继续工作,即使第一个结束。
您认为最优雅的方式是什么?会回应iframe的工作还是应该以不同的方式做到这一点?
答案 0 :(得分:17)
这是一些unix / linux-only hack,可能无法在共享Web服务器上运行:
<强> file1.php 强>
<?php
$somearg = escapeshellarg('blah');
exec("php file2.php $somearg > /dev/null &");
<强> file2.php 强>
<?php
//do some stuff that will take a while
//$argv should contain 'blah', and also it seems the name of the php file
//this script will continue to run. You might want to set max_execution_time to a sensible value.
答案 1 :(得分:4)
您可以通过放置来完成
header('Location: second.php');
在first.php结束时再次在second.php结束时开始执行third.php,依此类推。即使你可以在两个脚本之间创建循环,即在结束first.php之后,second.php将被启动,并且在执行second.php之后再次执行first.php,再次执行second.php,依此类推。
但请记住,这是一个依赖于浏览器的功能,可以一个接一个地执行多少脚本,完全取决于浏览器允许重定向的次数。我发现mozilla允许23个重定向,这意味着你可以一个接一个地执行23个脚本。
答案 2 :(得分:3)
在同一台服务器上运行第二个脚本
$appUrl = $_SERVER['HTTP_HOST'];
$path = 'second.php';//your path here
$appUrl = 'http://'.$appUrl.'/'.$path;
file_get_contents($appUrl);
答案 3 :(得分:2)
答案 4 :(得分:2)
如果你需要运行这个其他脚本,取决于客户端是不明智的。
我要做的是使用this StackOverflow question(指向this comment in the PHP documentation)的答案中描述的技术,并将其他脚本作为后处理。
然而,该评论是在2006年写的,从那时起事情可能发生了变化。请试一试这项技术(正如我将要做的那样,只是为了好玩),看看它是否适合你:)
答案 5 :(得分:1)
据我所知,没有任何方法可以运行第二页(AJAX是个例外)。据我所知,PHP不支持多个线程(如果我错了,请纠正我)并且网络的“单线程”性质似乎无论如何都会打败它。
我宁愿倾向于查看您的特定应用程序,并找出为什么需要运行两个单独的页面 - 然后重新设计该过程,以便它不会。
我愿意打赌,从开发的角度来看,重新设计工程将不再是一个令人头疼的问题,也不再是逻辑和实施工具。
答案 6 :(得分:1)
如果您需要多线程应用程序,则应该查看pcntl_fork。另请查看ignore_user_abort。
答案 7 :(得分:0)
我无法获得以前的工作答案,但我怀疑这可能是我自己的服务器的错误,或者新的浏览器在指示时拒绝关闭连接(我真的不是专业人士如何shtuff工作)。
如果该方法对您不起作用,请尝试this article on pseudo-multi-threading in PHP,看看您是否有更好的运气:)
答案 8 :(得分:0)
如果您的远程脚本可以通过http作为简单网页访问,您可以尝试使用http get request的变量,其中响应超时设置为最短时间,例如通过CURL:
if( $curl = curl_init() ) {
curl_setopt($curl, CURLOPT_URL, 'http://your_site/your_script.php');
curl_setopt($curl, CURLOPT_TIMEOUT, 1);
curl_exec($curl);
curl_close($curl);
}
但是你在第一次执行脚本时会有1秒的延迟。