0

我有一个与这里类似的问题

我正在使用 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() 问题?

4

1 回答 1

1

您不需要 dl() 来加载您的扩展,如果您的扩展与您的 PHP 兼容(PHP 扩展应该在线程安全、API 编号和编译器版本方面与 PHP 服务器匹配),那么在重新启动服务器后您应该会看到您phpinfo()页面中的扩展名(在您的情况下为 extensionV2),否则加载扩展时会出现问题。
编辑-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;
    }
  }
}
于 2013-03-17T11:51:03.290 回答