我正在尝试构建一个最小的 docker 镜像来使用 packagist.org/packages/nikic/php-parser:
FROM php
RUN apt-get update
RUN apt-get install zip -y
COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer
COPY . .
安装(单个)依赖项进展顺利(在外部
Dockerfile
完成说明):
root@e1aa9cdb4e13:/# composer install
< ... omitted for brevity ... >
Package operations: 1 install, 0 updates, 0 removals
- Downloading nikic/php-parser (v5.0.2)
- Installing nikic/php-parser (v5.0.2): Extracting archive
Generating autoload files
当我尝试运行文档中的示例时,我崩溃了:
root@e1aa9cdb4e13:/# php main.php
Fatal error: Uncaught Error: Class "PhpParser\ParserFactory" not found in /main.php:15
这是我使用的示例(取自文档中的“原样”):
<?php
use PhpParser\Error;
use PhpParser\NodeDumper;
use PhpParser\ParserFactory;
$code = <<<'CODE'
<?php
function test($foo)
{
var_dump($foo);
}
CODE;
$parser = (new ParserFactory())->createForNewestSupportedVersion();
try {
$ast = $parser->parse($code);
} catch (Error $error) {
echo "Parse error: {$error->getMessage()}\n";
return;
}
$dumper = new NodeDumper;
echo $dumper->dump($ast) . "\n";
编辑
从
include
目录添加显式 vendor
,
我似乎又向前迈进了一步:
include "/vendor/nikic/php-parser/lib/PhpParser/ParserFactory.php";
新错误消息:
Fatal error: Uncaught Error: Class "PhpParser\PhpVersion" not found in /vendor/nikic/php-parser/lib/PhpParser/ParserFactory.php:32
事实证明我错过了一个陈述:
<?php
require '/vendor/autoload.php';
当我添加这一行时,它工作得很好:
root@e1aa9cdb4e13:/# php main.php
array(
0: Stmt_Function(
attrGroups: array(
)
byRef: false
name: Identifier(
name: test
)
< ... omitted for brevity ... >
*我找到了参考资料这里