Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP exec()未按预期工作_Php - Fatal编程技术网

PHP exec()未按预期工作

PHP exec()未按预期工作,php,Php,我正在编写一个应用程序,允许经过批准的开发人员将php代码提交到我们的数据库,以便以后运行 我试图实现一个系统,在运行他们的代码之前,检查是否存在任何问题 我在上找到了以下代码 函数checkPHP($string){ $string=escapeshellcmd($string); exec(“php-r\”$string\”,$output,$exit); 如果($exit==0),则返回TRUE; 否则返回FALSE; } /*测验*/ $test=数组(“打印('foo');”, “打印

我正在编写一个应用程序,允许经过批准的开发人员将php代码提交到我们的数据库,以便以后运行

我试图实现一个系统,在运行他们的代码之前,检查是否存在任何问题

我在上找到了以下代码

函数checkPHP($string){
$string=escapeshellcmd($string);
exec(“php-r\”$string\”,$output,$exit);
如果($exit==0),则返回TRUE;
否则返回FALSE;
}
/*测验*/
$test=数组(“打印('foo');”,
“打印(\'foo\”);“,
“品脱('foo');”,
“打印('foo);”,
打印('foo','bar')
);

对于($i=0;$i请尝试使用php-l-r-l标志执行语法检查。如果使用-l,我不知道是否需要使用-r标志

更新:我在命令行中尝试了这一点。以下是使用正确语法时得到的结果:

$ php -l            # what I executed
<?php                   #
print ('foo');          #  What I entered
?>                      #
No syntax errors detected in -   # What I got

$ echo $?  
0             # exit status
$ php -l
<?php
print ('foo);
?>

Warning: Unexpected character in input:  ''' (ASCII=39) state=1 in - on line 2
No syntax errors detected in -

$ echo $?
0
$php-l#我执行了什么
#
在-#我得到的东西中未检测到语法错误
$echo$?
0#退出状态
下一个问题使用了错误的语法:

$ php -l            # what I executed
<?php                   #
print ('foo');          #  What I entered
?>                      #
No syntax errors detected in -   # What I got

$ echo $?  
0             # exit status
$ php -l
<?php
print ('foo);
?>

Warning: Unexpected character in input:  ''' (ASCII=39) state=1 in - on line 2
No syntax errors detected in -

$ echo $?
0
$php-l

尝试使用php-l-r-l标志执行语法检查。如果使用-l,我不知道是否需要-r标志

更新:我在命令行中尝试了这一点。以下是使用正确语法时得到的结果:

$ php -l            # what I executed
<?php                   #
print ('foo');          #  What I entered
?>                      #
No syntax errors detected in -   # What I got

$ echo $?  
0             # exit status
$ php -l
<?php
print ('foo);
?>

Warning: Unexpected character in input:  ''' (ASCII=39) state=1 in - on line 2
No syntax errors detected in -

$ echo $?
0
$php-l#我执行了什么
#
在-#我得到的东西中未检测到语法错误
$echo$?
0#退出状态
下一个问题使用了错误的语法:

$ php -l            # what I executed
<?php                   #
print ('foo');          #  What I entered
?>                      #
No syntax errors detected in -   # What I got

$ echo $?  
0             # exit status
$ php -l
<?php
print ('foo);
?>

Warning: Unexpected character in input:  ''' (ASCII=39) state=1 in - on line 2
No syntax errors detected in -

$ echo $?
0
$php-l

php
命令需要执行来自
STDIN
或文件的代码,-r标志将在不需要
标记的情况下计算后面的内容,但之后它仍在等待文件名

一种解决方案是编写要计算的代码,并将其名称传递给
php
。这会将
eval
命令更改为
eval(“php$string”,$output,$exit);
其中$string是要执行(测试)的代码所在的文件名


您需要确保文件以
开头
php
命令期望执行
STDIN
或文件中的代码,-r标志将评估接下来的内容,而不需要
标记,但之后它仍在等待文件名

一种解决方案是编写要计算的代码,并将其名称传递给
php
。这会将
eval
命令更改为
eval(“php$string”,$output,$exit);
其中$string是要执行(测试)的代码所在的文件名


您需要确保文件以
开始谢谢。不幸的是,它仍然不起作用。使用php-l-r,我得到了相同的结果,但是使用php-l,我在所有行上都不正常。-r不需要放置开始和结束标记。也许您可以尝试自己添加它们
$string=“”
然后只做php-l?谢谢卡洛斯-仍然没有乐趣-变得不像以前那么好。对返回的内容感到好奇,我在else语句中添加了
print$exit
,我得到了255谢谢卡洛斯。不完全是我想要的。非常感谢你的时间。谢谢你。不幸的是,它仍然不起作用。使用php-l-r,我得到了同样的结果,但使用php-l时,并非所有行都可以,-r不需要放置开始和结束标记。也许您可以尝试自己添加它们
$string=“”
只做php-l?谢谢卡洛斯-仍然没有乐趣-变得不像以前那么好。对返回的内容感到好奇,我在else语句中添加了
print$exit
,我得到了255谢谢卡洛斯。不完全是我想要的。非常感谢你抽出时间。可能相关的已安装模块包括mod_suexec和mod_cgi.Install可能相关的ed模块包括mod_suexec和mod_cgi。谢谢Tarek。正是我需要的。非常感谢。谢谢Tarek。正是我需要的。非常感谢。