这里我正在详细介绍我的流程。
我正在同一主机上执行Ajax请求。
AJAX调用saveUser.php
在saveUser.php
中,我添加了Common.php
。
Common.php
有createFile1()
和createFile2()
功能。
createFile1()
只为其他目的创建sample1.php
。
在createFile2()
中,我正在创建一个文件sample2.php
并执行exec('php /home/public/sample2.php > /dev/null &');
命令来执行该文件。
我分别从createFile1()
调用此createFile2()
和saveUser.php
函数,这是由AJAX请求调用的。
由于我已将exec命令设置为在命令结束时按“&
”在后台运行,因此它将在不等待响应的情况下返回,并且一切顺利进行。
但是当我检查我的服务器时,这些文件sample1.php和sample2.php一次又一次地被创建。似乎所有这些saveUser.php
操作都会一次又一次地执行,直到我从SSH停止sample2.php
进程。
我检查了进程列表,每次“php /home/public/sample2.php
”都有new process_id
,因此它确认它一次又一次被执行。如果我删除exec()
代码并从SSH执行此sample2.php,它会按预期工作,没有这样的问题。
请建议我哪里出错了?服务器配置是否有任何问题,我使用的是hostgator共享帐户。
此外,我还在Common.php
中包含了相同的sample2.php
文件,以便通知以防它可以提供帮助。
提前感谢您的帮助。
saveUser.php代码
include_once dirname(__FILE__).'/Common.php';
createFile1();
createFile2();
echo 'saved successfully!';
Common.php代码
function createFile1()
{
$template = file_get_contents('sendDmTemplate.php');
$serviceFp = fopen('sendDmFiles/sample1.php',"w");
fwrite($serviceFp , $fileContent);
fclose($serviceFp);
}
function createFile2()
{
$fileContent = file_get_contents(dirname(__FILE__).'/sampleFileTemplate.php');
$serviceFp = fopen('sample2.php',"w");
fwrite($serviceFp , $fileContent);
fclose($serviceFp);
exec('php '.dirname(__FILE__).'/sample2.php > /dev/null &');
}
sample2.php代码
include_once dirname(__FILE__).'/Common.php';
echo 'hi';
答案 0 :(得分:1)
检查以下内容:
1)你确定你没有多次调用你的脚本saveUser.php吗? Mayby在javascript XHR中的某个地方犯了错误吗?通过查看(apache?)日志来检查这一点。
2)你确定你的php在没有-q的情况下执行正常吗?我使用php -q pathtoscript.php
3)如果不是1或2:在saveUser.php的这里(或某处)发布代码
编辑:我看到了你的问题。您创建的文件再次包含common.php,然后再次执行。等等 - 错误的哎呀。我写得太早了。现在再看一遍。4)您是否可以使用一些重定向到saveUser.php的错误处理?
编辑:
5)由于您将正在执行命令的文件与include_once结合使用,可能会出现问题,但我不确定。您可以通过调整sampleFileTemplate.php来更改sample2.php内容的内容来测试它。创建一个common2.php(与common.php具有相同的内容),然后使用它。告诉你设置和报告的testdrive?
答案 1 :(得分:1)
这件事发生在我身上。我试图让一个PHP脚本调用exec()在另一个PHP脚本上,但由于一些奇怪的原因,它只会exec()本身再次创建一个无限循环。目前接受的答案并没有让我任何地方,但我能够通过指定php的绝对路径让它工作。
所以,而不是
exec('php /home/public/sample2.php > /dev/null &');
它将是
exec('/usr/local/bin/php /home/public/sample2.php > /dev/null &');