检查字符串是否为有效的PHP代码
我想做:检查字符串是否为有效的PHP代码,php,syntax-checking,Php,Syntax Checking,我想做: $str = "<? echo 'abcd'; ?>"; if (is_valid_php($str)){ echo "{$str} is valid"; } else { echo "{$str} is not valid PHP code"; } $str=”“; 如果(有效的php($str)){ 回显“{$str}有效”; }否则{ echo“{$str}不是有效的PHP代码”; } 是否有一种简单的方法来执行是否有效\u php检查 我所能找到的只
$str = "<? echo 'abcd'; ?>";
if (is_valid_php($str)){
echo "{$str} is valid";
} else {
echo "{$str} is not valid PHP code";
}
$str=”“;
如果(有效的php($str)){
回显“{$str}有效”;
}否则{
echo“{$str}不是有效的PHP代码”;
}
是否有一种简单的方法来执行是否有效\u php
检查
我所能找到的只是在线php语法检查器和检查语法的命令行方法,或者只对文件有效,我不想为了检查字符串是否有效而写入文件
我不想使用system()
/exec()
或eval()
-这是旧的,所以我希望有新的东西
-所有选项(据我所知)要么不再受支持,要么使用命令行,要么必须检查文件(而不是字符串)
我不需要一个成熟的编译器或任何东西。我只需要知道字符串是否是有效的PHP代码
编辑:通过有效的php代码,我的意思是它可以执行,没有编译器/语法错误,并且应该只包含php代码。它可能有运行时错误并且仍然有效,比如
$y=33/0代码>。它应该只包含PHP。。。例如,stuff
将无效,但
和echo“$str”
将是有效的您可以通过管道将字符串传输到php-l,并使用shell_exec调用它:
$str1 = "<?php echo 'hello world';";
$str2 = "<?php echo 'hello world'";
echo isValidPHP($str1) ? "Valid" : "Invalid"; //Valid
echo isValidPHP($str2) ? "Valid" : "Invalid"; //Inalid
function isValidPHP($str) {
return trim(shell_exec("echo " . escapeshellarg($str) . " | php -l")) == "No syntax errors detected in -";
}
在代码的其他地方:
echo isValidPHP("<?php echo \"It works!\";");
function isValidPHP($code) {
$valid = file_get_contents("http://www.yoursite.com/test_code.php?" . http_build_query(['code' => $code]));
return !!$valid;
}
echo isvalidppp(“您可以将字符串通过管道传输到php-l,并使用shell_exec调用它:
$str1 = "<?php echo 'hello world';";
$str2 = "<?php echo 'hello world'";
echo isValidPHP($str1) ? "Valid" : "Invalid"; //Valid
echo isValidPHP($str2) ? "Valid" : "Invalid"; //Inalid
function isValidPHP($str) {
return trim(shell_exec("echo " . escapeshellarg($str) . " | php -l")) == "No syntax errors detected in -";
}
在代码的其他地方:
echo isValidPHP("<?php echo \"It works!\";");
function isValidPHP($code) {
$valid = file_get_contents("http://www.yoursite.com/test_code.php?" . http_build_query(['code' => $code]));
return !!$valid;
}
echo是有效的HP(在我的头顶上,这是最简单的
$str = "<? echo 'abcd'; ?>";
file_put_contents("/some/temp/path", $str);
exec("php -l /some/temp/path", $output, $result);
if ($result == 0){
echo "{$str} is valid";
} else {
echo "{$str} is not valid PHP code";
}
unlink("/some/temp/path");
$str=”“;
文件内容(“/some/temp/path”,$str);
exec(“php-l/some/temp/path”,$output,$result);
如果($result==0){
回显“{$str}有效”;
}否则{
echo“{$str}不是有效的PHP代码”;
}
取消链接(“/some/temp/path”);
我没有使用php\u check\u语法的原因是:
它已被弃用
它实际上执行代码
在我看来,这是最简单的
$str = "<? echo 'abcd'; ?>";
file_put_contents("/some/temp/path", $str);
exec("php -l /some/temp/path", $output, $result);
if ($result == 0){
echo "{$str} is valid";
} else {
echo "{$str} is not valid PHP code";
}
unlink("/some/temp/path");
$str=”“;
文件内容(“/some/temp/path”,$str);
exec(“php-l/some/temp/path”,$output,$result);
如果($result==0){
回显“{$str}有效”;
}否则{
echo“{$str}不是有效的PHP代码”;
}
取消链接(“/some/temp/path”);
我没有使用php\u check\u语法的原因是:
它已被弃用
它实际上执行代码
编辑:刚刚看到您希望避免使用exec()。
我认为如果没有它,这将是非常困难的,php删除了check_语法函数是有原因的。
也许(我真的只是在这里猜测,当涉及到您想要投入的精力时)在容器中运行php-l(docker现在几乎都是如此)并通过http调用将代码传递给docker守护进程(这里只需对标准php cli执行run命令即可)。然后,您可以毫无顾虑地使用下面的代码示例(前提是您不授予容器obv任何权限)
您可以像这样使用exec和php命令行:
由于管道化的输出,不需要任何文件。通过重定向到dev null,我们在别处也不会得到不需要的输出。
当然还是有点脏,但这是我能想到的最短版本。编辑:刚刚看到您希望避免使用exec()。
我认为如果没有它,这将是非常困难的,php删除了check_语法函数是有原因的。
也许(我真的只是在这里猜测,当涉及到您想要投入的精力时)在容器中运行php-l(docker现在几乎都是如此)并通过http调用将代码传递给docker守护进程(这里只需对标准php cli执行run命令即可)。然后,您可以毫无顾虑地使用下面的代码示例(前提是您不授予容器obv任何权限)
您可以像这样使用exec和php命令行:
由于管道化的输出,不需要任何文件。通过重定向到dev null,我们在别处也不会得到不需要的输出。
当然还是有点脏,但这是我能想到的最短版本。向那些在线语法检查器发布curl请求怎么样?我不知道这些站点,所以我不确定是否可能,但你可以观察网络请求,看看是否可以用curl模拟。你能澄清一下“有效”吗?这是否意味着无编译时和运行时错误?或按预期工作?我所能找到的与您所做的相同。我检查了一个REST服务,但该服务也接受一个文件。写入(和删除)文件是一项非常简单的任务-所以我很好奇,为什么你不想用php_check_语法写入文件?@HPierce,我更新了我的问题来解释…php解析器或phc似乎是个不错的选择。@Jakar我知道检查字符串会更好,而写入和删除文件和内容只是一项愚蠢的冗余工作。Dependi如果您想检查代码多少次,写入文件不会轻易影响性能。如果我是您,我会在尝试其他操作之前立即开始写入文件,但这就是我:)向那些在线语法检查器发送curl请求怎么样?我不知道这些站点,所以我不确定这是否可能,但是你可以观察网络请求,看看是否可以用curl模拟它。你能澄清一下“有效”吗?这是否意味着无编译时和运行时错误?或按预期工作?我所能找到的与您所做的相同。我检查了一个REST服务,但该服务也接受一个文件。写入(和删除)文件是一项非常简单的任务-所以我很好奇,为什么你不想用php_check_语法写入文件?@HPierce,我更新了我的问题来解释…php解析器或phc似乎是个不错的选择。@Jakar我知道检查字符串会更好,而写入和删除文件和内容只是一项愚蠢的冗余工作。Dependi如果你想检查代码多少次,写入文件不会轻易影响性能