php exec / shell_exec / system / popen / proc_open在Linux上运行调用脚本本身无数次

我有一个脚本,使用php -l检查php文件中的语法错误。 它在Windows正常工作,但在Linux中提供不正确的输出:

正在检查语法错误的文件exec_ip.php的内容是(它有语法错误,要检查):

<?php $arr['12] = 'asd'; ?> 

和脚本是:

 $slash = file_get_contents('exec_ip.php'); //echo $slash; $tmpfname = tempnam("tmp", "PHPFile"); file_put_contents($tmpfname, $slash); exec("php -l ".$tmpfname,$error); $errtext = ''; foreach($error as $errline) $errtext.='<br>'.$errline; unlink($tmpfname); echo 'ERR:'.$errtext; 

结果在WINDOWS(WAMP){CORRRECT}:

 ERR: Parse error: syntax error, unexpected T_STRING, expecting ']' in C:\WINDOWS\Temp\PHP1F1.tmp on line 2 Errors parsing C:\WINDOWS\Temp\PHP1F1.tmp 

结果在LINUX(Centos / cPanel){UNKNOWN OUTPUT}:

 ERR: Content-type: text/html ERR: Content-type: text/html ERR: Content-type: text/html ERR: Content-type: text/html ERR: Content-type: text/html ERR: Content-type: text/html ERR: Content-type: text/html ERR: Content-type: text/html ERR: ... too many same above lines 

请有人帮助我,并指出为什么它在Linux生产服务器提供不正确的输出。 我也尝试使用shell_exec,popen,proc_open,系统代替exec,但都具有相同的行为。 我试图追溯过去两天的根源…请帮助

编辑:有时我看到以下错误日志“PHP的警告:执行():无法在第5行/ home / user / public_html / exect.php叉[php -l / tmp / PHPFileI4T43l]”。 我认为这是recursionexec命令自己创build一个新的进程,每个recursion,但不能得到它的原因。

Solutions Collecting From Web of "php exec / shell_exec / system / popen / proc_open在Linux上运行调用脚本本身无数次"

经过2天的头痛和大量的谷歌搜索…我找到了解决方案的链接http://www.mombu.com/php/php-5-forum/t-24759-exec-or-system-et-all -cause-一个无限-环-的起动请求的程序-8469354.html

它是从环境中读取脚本名称的PHP CGI版本,从而导致我的调用脚本无限次地运行或者直到允许的最大进程数或者直到整个内存被消耗。

解决方案只需使用命令php-cli而不是命令php。

我在我的代码中替换下面的行

 exec("php -l ".$tmpfname,$error); 

 exec("php-cli -l ".$tmpfname,$error); 

现在一切都很好

我希望这会帮助别人。 我也改变了这个问题的标题,以便其他人可以很容易地找到谷歌相同问题的解决方案。