【发布时间】:2014-02-13 04:53:20
【问题描述】:
我们的代码库中有现有的东西使用 dompdf(版本 0.5.1)...没有命名空间。
当我包含 aws.phar 时,使用类似
require '/path/to/aws.phar';
突然间,我遇到致命错误
Class 'DOMPDF' not found in XXXX on line 1193
导致错误的代码只是类的新实例化:
$dompdf = new \DOMPDF();
我猜这是一个命名空间问题,但我不知道如何解决它,因为我已经将全局转义放在 DOMPDF 前面...如果我注释掉 phar 的 require 行,那么一切恢复正常。
我也确实打开了 AWS.phar 以查看里面发生了什么。从未混淆的代码中,我看到他们正在使用 symfony 类加载器。
$classLoader = new Symfony\Component\ClassLoader\UniversalClassLoader();
$classLoader->registerNamespaces(array(
'Aws' => 'phar://aws.phar/src',
'Guzzle' => 'phar://aws.phar/vendor/guzzle/guzzle/src',
'Symfony\\Component\\EventDispatcher' => 'phar://aws.phar/vendor/symfony/event-dispatcher',
'Doctrine\\Common' => 'phar://aws.phar/vendor/doctrine/common/lib',
'Psr\\Log' => 'phar://aws.phar/vendor/psr/log',
'Monolog' => 'phar://aws.phar/vendor/monolog/monolog/src'
));
我还尝试了几种不同的方法来向类加载器注册 dompdf,但它们都抛出了错误。如果没有命名空间,我猜它是 bc。
我也尝试在加载 phar 之前和之后加载 dompdf 包含配置文件,它似乎没有区别。
大家有什么建议吗?
【问题讨论】:
-
您使用的是哪个版本的 dompdf?您是在包含 aws.phar 之前还是之后包含 dompdf 配置文件? v0.5.x 不使用比 0.6.0 兼容性差的自动加载器。
-
我们使用的是 v0.5.1。我已经尝试在 aws.phar 之前和之后都包含配置,似乎没有任何区别。我不明白你的句子“v0.5.x 没有使用比 0.6.0 兼容性差的自动加载器。”你的意思是“确实使用了不太兼容的自动加载器”?
-
那个版本的 DOMPDF 的源代码在哪里?
-
@HerbGirl 哈哈,是的,应该是“v0.5.x 使用了不太兼容的自动加载器”……虽然这还是有点尴尬。
-
@JeremyLindblom 仅供参考,您可以在此处找到 0.5.x 源代码:github.com/dompdf/dompdf/tree/v0.5.2。但我认为仅使用该版本就是问题所在。
标签: php amazon-web-services namespaces dompdf