我有一个脚本,使用php -l检查php文件中的语法错误.它在
Windows中工作正常但在
Linux中输出不正确:
正在检查语法错误的文件exec_ip.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.='
'.$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,system代替exec,但都有相同的行为.我试图追查过去2天的根本原因……请帮忙
编辑:有时我看到以下错误日志“PHP警告:exec():无法在第5行的/home/user/public_html/exect.php中分叉[php -l / tmp / PHPFileI4T43l]”.
我认为它是递归exec命令本身在每次递归时创建一个新进程,但无法得到它的原因.