【问题标题】:cant load extension using enable_dl()无法使用 enable_dl() 加载扩展
【发布时间】:2013-03-13 13:58:50
【问题描述】:

我遇到了和here类似的问题

我正在使用 Apache2 服务器。

我做了一个简单的扩展名 extensionV2.so 当我这样做时,我可以加载扩展并在我的代码中使用它

extension = extensionV2.so in php.ini.

并在我的 php 文件中使用它的功能。

但是如果我使用

<?php

dl('extensionV2.so');
var_dump(get_loaded_modules());

?>

我得到了错误

Fatal error: Call to undefined function dl() in /var/www/html/My.php on line 9

注意:

我使用的是 php 5.3

根据phpinfo()

Thread Safety - disabled
Safe Mode - Off
enable_dl()  = On

我通过终端中的 php -r 获得所需的输出。 我知道 dl() 不再通过 apache2handlers 使用...是否有任何替代选项可以解决 dl() 问题?

【问题讨论】:

    标签: apache2 php-extension


    【解决方案1】:

    你不需要 dl() 来加载你的扩展,如果你的扩展与你的 PHP 兼容(PHP 扩展应该在线程安全、API 编号和编译器版本方面与 PHP 服务器匹配)然后,在重新启动你的服务器后您应该在 phpinfo() 页面中看到您的扩展名(在您的情况下为 extensionV2),否则在加载您的扩展时会出现问题。
    EDIT-1

    这是在您的代码中使用 dl() 的替代方法:

    // Try to load our extension if it's not already loaded.
    if (!extension_loaded('extensionV2')) {
      if (strtolower(substr(PHP_OS, 0, 3)) === 'win') {
        if (!dl('extensionV2.dll')) return;
      } else {
        // PHP_SHLIB_SUFFIX gives 'dylib' on MacOS X but modules are 'so'.
        if (PHP_SHLIB_SUFFIX === 'dylib') {
          if (!dl('extensionV2.so')) return;
        } else {
          if (!dl('extensionV2.'.PHP_SHLIB_SUFFIX)) return;
        }
      }
    }
    

    【讨论】:

    • 感谢@Amir。抱歉回复晚了!通过说“你不需要 dl() 来加载你的扩展”,你的意思是编辑 php.ini 文件以包含 extension = extensionV2.so 还是在我的代码中使用 dl() 在运行时加载?很简单,把.so文件放到/usr/lib/php/modules目录下,重启服务器,执行php -r 'echo testExtFn();'得到Fatal error:Call to undefined function testExtFn() in Command line code on line 1,加上extension = extensionV2.so to php.ini,问题就解决了。您是否指定了一些我不理解的其他方法?
    • 显然,我没有理解你的问题,我编辑了我的答案,希望对你有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-25
    • 2015-04-09
    • 2018-05-27
    • 1970-01-01
    • 1970-01-01
    • 2022-12-09
    • 2013-05-01
    相关资源
    最近更新 更多