1

在这里,我将详细介绍我的流程。

我正在同一主机上执行 Ajax 请求。AJAX 调用saveUser.php

saveUser.php,我已经包括在内Common.php

Common.phpcreateFile1()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操作都在一次又一次地执行,直到我sample2.php从 SSH 停止该进程。

我检查了进程列表,每次 ' 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';
4

2 回答 2

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 相同),然后使用它。你能测试一下那个设置并报告吗?

于 2012-10-15T08:21:03.040 回答
1

这完全一样的事情发生在我身上。我试图让一个 php 脚本在另一个 php 脚本上调用 exec() 但由于某种奇怪的原因,它只会 exec() 本身再次创建一个无限循环。当前接受的答案没有让我到任何地方,但我能够通过指定 php.ini 的绝对路径来让它工作。

所以,而不是

exec('php /home/public/sample2.php > /dev/null &');

这将是

exec('/usr/local/bin/php /home/public/sample2.php > /dev/null &');
于 2016-12-21T07:38:29.543 回答