Apache2 使用enable_dl()的铁路超高负荷扩展

Apache2 使用enable_dl()的铁路超高负荷扩展,apache2,php-extension,Apache2,Php Extension,我有一个和你一样的问题 我使用的是Apache2服务器 我制作了一个名为extensionV2.so的简单扩展 我可以加载扩展,并在加载时在代码中使用它 extension = extensionV2.so in php.ini. 并在我的php文件中使用它的函数 但是如果我使用 <?php dl('extensionV2.so'); var_dump(get_loaded_modules()); ?> 注: 我使用的是PHP5.3 根据phpinfo() 我通过终端中的ph

我有一个和你一样的问题

我使用的是Apache2服务器

我制作了一个名为extensionV2.so的简单扩展 我可以加载扩展,并在加载时在代码中使用它

extension = extensionV2.so in php.ini.
并在我的php文件中使用它的函数

但是如果我使用

<?php

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

?>
注:

我使用的是PHP5.3

根据
phpinfo()

我通过终端中的php-r获得所需的输出我通过apache2handlers知道dl()不再使用了。。。是否有其他解决dl()问题的方法

加载扩展时不需要使用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;
    }
  }
}

谢谢@Amir。很抱歉回复晚了!通过说“加载扩展不需要使用dl()”,您的意思是编辑php.ini文件以包含extension=extensionV2.so,还是在我的代码中使用dl()在运行时加载?简单地说,将.so文件放在
/usr/lib/php/modules
目录中,然后重新启动服务器,执行
php-r'echo testExtFn();'
给出了
致命错误:在命令行代码的第1行调用未定义的函数testExtFn()
扩展=扩展v2.so添加到php.ini
后,问题得到了解决。你是否指定了我不理解的其他方法?显然,我不理解你的问题,我编辑了我的答案,希望能有所帮助。
Thread Safety - disabled
Safe Mode - Off
enable_dl()  = On
// 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;
    }
  }
}