Apache2 使用enable_dl()的铁路超高负荷扩展
我有一个和你一样的问题 我使用的是Apache2服务器 我制作了一个名为extensionV2.so的简单扩展 我可以加载扩展,并在加载时在代码中使用它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
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;
}
}
}