gpt4 book ai didi

php - 检查字符串是否是有效的 PHP 代码

转载 作者:行者123 更新时间:2023-12-05 08:57:22 26 4
gpt4 key购买 nike

我想做的事:

$str = "<? echo 'abcd'; ?>";
if (is_valid_php($str)){
echo "{$str} is valid";
} else {
echo "{$str} is not valid PHP code";
}

有没有一种简单的方法来执行 is_valid_php查看?

我只能找到在线 php 语法检查器和命令行检查语法的方法,或 php_check_syntax 这只适用于文件,我不想写入文件来检查字符串是否有效。

我不想使用 system()/exec()eval()

Related Question - 它很旧,所以我希望有新的东西

Other Related Question - 所有选项(据我所知)要么不再受支持,要么使用命令行,要么必须检查文件(不是字符串)

我不需要成熟的编译器或任何东西。我实际上只需要知道字符串是否是有效的 PHP 代码。

编辑: 有效的 php 代码,我的意思是它可以执行,没有编译器/语法错误,并且应该只包含 PHP 代码。它可能有运行时错误但仍然有效,例如 $y = 33/0; .它应该只包含 PHP... 例如,<div>stuff</div><? echo "str"; ?>将无效,但 <? echo "str"; ?>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 -";
}

只是有另一个想法...这次使用 eval 但安全:

测试代码.php

$code = "return; " . $_GET['code'];
//eval is safe here because it won't do anything
//since the first thing we do is return
//but we still get parse errors if it's not valid
//If that happens, it will crash the whole script,
//so we need it to be in a separate request
eval($code);
return "1";

代码中的其他地方:

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;
}

关于php - 检查字符串是否是有效的 PHP 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33530669/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com