gpt4 book ai didi

php 命名空间与 dompdf 和 A​​WS 发生冲突?

转载 作者:行者123 更新时间:2023-12-04 16:59:22 26 4
gpt4 key购买 nike

我们的代码库中有一些使用 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 v0.5.1 还没有实现 SPL 自动加载,它注册了 __autoload() .这种过时的自动加载方法效果不佳,因为一次注册多个自动加载功能很困难。另外,在编写使用 SPL 自动加载的 PHP 时,不会调用 v0.5.1 自动加载器。 PHP SPL 自动加载禁用调用 __autoload() ( spl_autoload_register )。

v0.6.0 ( just released ) 使用 SPL 自动加载并且应该与 AWS.phar 兼容。 v0.6.0(在大多数情况下)是 v0.5.1 的直接替代品,因此您可能想尝试升级您的 dompdf 副本。

如果由于某种原因无法实现,您可以在包含 dompdf_config.inc.php 后使用 SPL 手动注册 dompdf 自动加载器。您至少可以尝试以下操作:

<?php
require_once('dompdf/dompdf_config.inc.php');
spl_autoload_register('DOMDPF_autoload');
// ...
?>

dompdf v0.6.0 autoload include一个更完整的例子。

关于php 命名空间与 dompdf 和 A​​WS 发生冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21690037/

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