【问题标题】:How to use an external lib? (PclZip)如何使用外部库? (PclZip)
【发布时间】:2011-01-17 16:36:17
【问题描述】:

我想在 Magento 模块中使用 PclZip 库。我通过我的包管理器 (libphp-pclzip) 安装了它,但我无法直接在我的模块中使用它,Magento 自动加载器尝试获取该类并失败:

警告:include(PclZip.php):无法打开流:/home/frleq/Dev/projets/Compario/magento-community-1.4.2.0/lib/Varien/Autoload.php 中没有这样的文件或目录第 93 行

#0 /home/frleq/Dev/projets/Compario/magento-community-1.4.2.0/lib/Varien/Autoload.php(93): mageCoreErrorHandler(2, 'include(PclZip....', '/home/frleq/Dev...', 93, Array)
#1 /home/frleq/Dev/projets/Compario/magento-community-1.4.2.0/lib/Varien/Autoload.php(93): Varien_Autoload::autoload()
#2 [internal function]: Varien_Autoload->autoload('PclZip')
#3 [internal function]: spl_autoload_call('PclZip')
#4 /home/frleq/Dev/projets/Compario/magento-community-1.4.2.0/app/code/community/Compario/Connector/Helper/Data.php(8): class_exists('PclZip')

我怎样才能设法禁用自动加载或让它找到我的库?

谢谢!

【问题讨论】:

    标签: magento module autoload


    【解决方案1】:

    快速的解决方案是在你的库中添加目录以包含路径:

    $includePath = 'path/to/lib';
    set_include_path(get_include_path() . PS . $includePath);
    

    一个更快速的解决方案:

    require_once  'path/to/lib/PclZip.php';
    

    但更好的解决方案是将库的名称更改为对自动加载器可见。它应该在 lib 目录中,类的名称应该由以大写字母开头并用“_”分隔的单词组成。这些词应该与文件的目录结构匹配。 例如:

    'path/to/lib/PclZip.php' => Path_To_Lib_PclZip'
    

    【讨论】:

    【解决方案2】:

    请参阅this answer,了解有关在 Magento 中设置不会与内置冲突的自定义自动加载器的一些想法。

    【讨论】:

    • 这是一个优雅的解决方案,但是太重了!我不想为这么小的功能创建自定义自动加载器。如果安装了 PclZip,最终目标是提出一个存档,但我可以跳过这一步。所以我不会为此创建自定义自动加载器。无论如何谢谢;)
    猜你喜欢
    • 1970-01-01
    • 2013-12-29
    • 2017-07-22
    • 2017-08-13
    • 1970-01-01
    • 2014-05-30
    • 1970-01-01
    • 2020-08-20
    • 2013-07-02
    相关资源
    最近更新 更多