2009-07-10 216 views
13

我想要做和我以前的Python问题完全一样的东西,但在PHP中。 See my previous (answered) question如何让php脚本运行另一个php脚本

上一个问题的PHP脚本会执行一些操作,然后在同一台服务器上运行另一个PHP脚本,执行某些操作然后退出(而第二个脚本仍然继续工作)。我如何实现这一目标?

请注意,PHP脚本也是在同一时间(所以也许我们可以在前面的问题使用等,其中给我的回答是片段,由蟒蛇只是打开URL不是运行工段的一个网页.. 。虽然我没有线索,如果这是有用的信息,也许这是不同的PHP,我不太经验的PHP)...我想使每个脚本独立 - 所以如果第一个PHP脚本将完成我想第二个PHP脚本继续工作,即使第一个结束了

您认为最优雅的方式是做什么?会回应iframe的工作,还是我应该这样做呢?

回答

2

如果用户将使用Web浏览器访问php脚本,我会使用ajax来调用第二页。

用户甚至不知道它被调用。

对AJAX

+17

下投票发送原始海报W3Schools的。请参阅:http://w3fools.com/ – 2013-01-14 16:46:42

+4

#1需要自动替换为与MDN w3schoolds。 https://developer.mozilla.org/en/docs/AJAX – 2013-08-08 01:33:01

+0

不好,因为基本上是一个链接的回答,不知道如何使用Ajax从PHP脚本调用另一个php脚本 – Andrew 2015-09-03 19:40:38

2

如果需要这个脚本等要运行教程参见w3schools,具体取决于客户端的做法并不明智。

我会做的是使用this StackOverflow question(指向this comment in the PHP documentation)的答案中描述的技术,并将其他脚本作为后期处理。

但是,该评论是在2006年撰写的,从那时起事情可能会发生变化。请尝试技巧(因为我会做,只是为了好玩),看看它是否适用于你:)

1

据我所知,没有任何方法可以运行第二页(AJAX是例外)。据我所知,PHP不支持多线程(如果我错了,请纠正我),并且网络的“单线程”本质似乎无论如何都击败了它。

我宁愿倾向于看看您的具体应用程序,并找出为什么您需要有两个单独的页面运行 - 然后重新设计过程,所以它不。

我愿意打赌,从开发的角度来看,重新设计工程师将不再是一个头痛的问题,也是一个逻辑和实施方案。

16

这是一个位UNIX的/ Linux的唯一劈,可能无法在共享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. 
0

我无法让我以前的答案工作,但我怀疑这可能是我自己的服务器的错,或者新的浏览器拒绝关闭连接时指示(我真的不是一个亲该shtuff工程)。

如果该方法不为你工作,要么,尝试this article on pseudo-multi-threading in PHP,看看你是否有更好的运气:)

4

你可以通过把 header('Location: second.php'); 在first.php又一次年底做在second.php结束时开始执行third.php等等。甚至你可以创建两个脚本之间的周期,即结束first.php后,second.php将启动和执行second.php再次first.php后,再次second.php等。

但请记住,这是一个依赖于浏览器的功能,多少脚本可以被执行此起彼伏,完全依赖于浏览器多少次允许重定向。我发现mozilla允许23个重定向,这意味着你可以一个接一个地执行23个脚本。

3

要在同一台服务器上运行第二个脚本

$appUrl = $_SERVER['HTTP_HOST']; 
$path = 'second.php';//your path here 
$appUrl = 'http://'.$appUrl.'/'.$path; 
file_get_contents($appUrl); 
0

如果您的远程脚本是通过HTTP简单的网页访问,你可以尝试变异与HTTP GET请求,其中响应超时通过设置为最短的时间,例如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秒。