运行PHP-Parser报错:PHP Fatal error: Uncaught Error: Class ‘PhpParserParserFactory‘ not found
Posted 南瓜__pumpkin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了运行PHP-Parser报错:PHP Fatal error: Uncaught Error: Class ‘PhpParserParserFactory‘ not found相关的知识,希望对你有一定的参考价值。
安装php-Parser
使用PHP依赖管理工具Composer安装,由于本地Composer是全局配置,所以命令有所不同。
composer require nikic/php-parser
cd ./vendor/nikic/php-parser/
运行文件进行AST解析
nikic给出的代码示例如下,使用该软件,只需要把需要审计的代码放到$code变量中即可。
<?php
use PhpParser\\Error;
use PhpParser\\NodeDumper;
use PhpParser\\ParserFactory;
$code = <<<'CODE'
<?php
function test($foo)
{
var_dump($foo);
}
CODE;
$parser = (new ParserFactory)->create(ParserFactory::PREFER_PHP7);
try {
$ast = $parser->parse($code);
} catch (Error $error) {
echo "Parse error: {$error->getMessage()}\\n";
return;
}
$dumper = new NodeDumper;
echo $dumper->dump($ast) . "\\n";
测试
在nikic/php-parser/lib/目录下新建MyASTest.php,复制粘贴示例代码,使用测试代码替换7-12行的代码。
<?php
var_dump(token_get_all('<?php echo "hello"; $a=1;echo $a+$a;?>'));
?>
报错
使用PHPStorm打开MyASTest.php文件,使用PHP7.3.24命令解释器,发生报错。(完全使用示例代码也有相同报错)
PHP Fatal error: Uncaught Error: Class 'PhpParser\\ParserFactory' not found in /Users/didi/Downloads/vendor/nikic/php-parser/lib/MyASTest.php:15
Stack trace:
#0 {main}
thrown in xxx.php on line 15
报错分析
网上并没有找到明确的解决方式,但通过查阅use相关资料得知,use只是使用了命名空间,但是要想调用类,必须要加载类文件,或者自动加载。根据报错信息可以知道,use起作用了,但class类没有引用成功。
调试配置解决报错
尝试1-可行:使用自动加载。autoload.php文件在vendor目录下,通过目录遍历去包含该文件。比如本地在MyASTest.php文件第5行添加的代码如下,运行结果如图。
require_once __DIR__ . '/../../../autoload.php';
参考
《PHP中的use、命名空间、引入类文件、自动加载类的理解》,文章地址:https://blog.csdn.net/github_37767025/article/details/68064974
以上是关于运行PHP-Parser报错:PHP Fatal error: Uncaught Error: Class ‘PhpParserParserFactory‘ not found的主要内容,如果未能解决你的问题,请参考以下文章
bugfree登录后报错PHP Fatal error: Call-time pass-by-reference has been removed in
Fatal error: Call to undefined function curl_init()解决办法
pip运行报错Fatal error in launcher: Unable to create process using pip.exe
EasyNVR运行日志报错fatal error: concurrent map read and map write排查
(转)运行pip报错:Fatal error in launcher: Unable to create process using '"'