运行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 '"'

[php] Fatal error: Class Exception not found in