如何使php脚本运行另一个php脚本

如何使php脚本运行另一个php脚本,php,Php,我正试图做与我上一个Python问题中完全相同的事情,但是在PHP中 上一个问题中的PHP脚本做了一些事情,然后在同一台服务器上运行另一个PHP脚本,做了一些事情,然后退出(而第二个脚本仍在继续工作)。我如何做到这一点 请注意,PHP脚本同时也是一个网页(因此,也许我们可以像前面的问题一样使用它,我的问题的答案是一个片段,它使python只打开url而不是运行子进程…虽然我不知道这是否是有用的信息,也许它在PHP中不同,我在PHP方面不是很有经验)。。。我希望每个脚本都是独立的——因此,如果第一

我正试图做与我上一个Python问题中完全相同的事情,但是在PHP中

上一个问题中的PHP脚本做了一些事情,然后在同一台服务器上运行另一个PHP脚本,做了一些事情,然后退出(而第二个脚本仍在继续工作)。我如何做到这一点

请注意,PHP脚本同时也是一个网页(因此,也许我们可以像前面的问题一样使用它,我的问题的答案是一个片段,它使python只打开url而不是运行子进程…虽然我不知道这是否是有用的信息,也许它在PHP中不同,我在PHP方面不是很有经验)。。。我希望每个脚本都是独立的——因此,如果第一个php脚本将完成,我希望第二个php脚本继续工作,即使第一个脚本结束了


你认为最优雅的方式是什么?如果用户使用web浏览器访问php脚本,我将使用ajax调用第二个页面

用户甚至不知道正在调用它

如果您需要运行另一个脚本,请参阅有关AJAX的教程,这取决于客户端

我要做的是使用答案(指向)中描述的技术,并将另一个脚本作为后处理


然而,这一评论是在2006年写的,从那时起情况可能已经发生了变化。请尝试一下这项技术(正如我将要做的,只是为了好玩),看看它是否适合您:)

据我所知,没有任何方法可以运行第二个页面(AJAX是例外)。据我所知,PHP不支持多线程(如果我错了,请纠正我),而且web的“单线程”特性似乎无论如何都会打败它

我更倾向于查看您的特定应用程序,并找出为什么需要运行两个单独的页面,然后重新设计流程,这样就不需要了


我敢打赌,从开发的角度来看,重新设计将不再那么令人头痛,从逻辑和实现的角度来看也是如此。

这是一种仅限于unix/linux的黑客行为,可能无法在共享web服务器上工作:

file1.php

<?php
$somearg = escapeshellarg('blah');
exec("php file2.php $somearg > /dev/null &");   
<?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.

如果您想要一个多线程应用程序,您应该研究一下。另请看。

我之前的答案无法正常工作,尽管我怀疑这可能是我自己的服务器的故障,或者是新浏览器拒绝在接到指示时关闭连接(我对shtuff的工作方式并不专业)

如果这种方法对你也不起作用,试试看,看你是否运气更好:)

你可以通过放置
header('Location:second.php')
在first.php的末尾,再次在second.php的末尾开始执行third.php,依此类推。即使您可以在两个脚本之间创建循环,即在结束first.php之后,second.php将被启动,在再次执行second.php之后,first.php、second.php等等


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

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

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

如果您的远程脚本可以通过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秒的延迟。

这种方法在Apache上有效吗?这个关于文档()的评论是否定的,但是其他人说有点。此外,ignore_user_abort只涉及用户按下stop键,而不是脚本本身提前关闭连接。不,pcntl_fork在mod_php下不起作用。OP未指定脚本是否用于web或cli。Stackoverflow需要使用MDN自动替换W3D。不好,因为基本上只是一个链接答案,没有解释如何使用php脚本中的ajax调用另一个php脚本文件。\u get\u contents只是获取它的内容,对吗?它如何帮助执行文件?如果我错了,请纠正我,对不起,我正在学习。是的-我同意。。文件内容刚刚给我文件的文本。。它没有执行它你得到网页的内容它的意思是它被执行了,