导航:首页 > 编程语言 > php无法加载动态库

php无法加载动态库

发布时间:2023-08-19 12:28:30

A. 无法加载动态库php_ldap.dll

载php_ldap.dll,用的是php-5.3.3-Win32-VC6-x86,所以要找对应的ldap版本,大约是149KB.

然后查看php手册的LXXV. LDAP Functions介绍,看到还有两个依赖库libeay32.dll and ssleay32.dll需要放到环境变量path里,由于这两个文件在php目录下,而且安装php时path已包含该路径,所以不需要设置,反之,就要放到windows能找到的目录了,比如win2000,就要复制到system32文件夹下。

然后,重启apache.

用phpinfo()查看加载成功。

扩展库是php扩展的功能,比如php本来不支持操作某种功能 ,但在新版本想对它提供支持,就以扩展的方式来提供,这样,我们在配置php时,如果我们不用此功能,我们就可以让php不加载他.从而节省服务器资源.提供其性能

php的扩展库一般放在php目录下的ext目录里.你在网上下载的php压缩解压后应该可以看到.

php.ini中的 extension_dir 用来指定你的扩展名的地址 。

php.ini中有一排像 ;extension="xxxxxx.dll" 的内容就是用来配置让你的php运行环境支持什么不支持什么。

以下为php.ini中的剪切段

;extension=php_bz2.dll

;extension=php_curl.dll

;extension=php_dba.dll

在PHP配置出现不能加载模块之类的错误

加载LDAP模块的问题

在Windows XP环境下配置php和ldap容易出现 php中加载php_ldap.dll的问题

解决办法:

需要在C:WINNTSYSTEM32, or C:WINDOWSSYSTEM拷贝PHP安装目录中的libeay32.dll和ssleay32.dll 即可

产生原因:

这是php本身带有的一个bug

B. 如何修复PHP的警告:PHP启动:无法加载动态库'分机\\\ php

扩展库是php扩展的功能,比如php本来不支持操作某种功能
,但在新版本想对它提供支持,就以扩展的方式来提供,这样,我们在配置php时,如果我们不用此功能,我们就可以让php不加载他.从而节省服务器资源.提供其性能
php的扩展库一般放在php目录下的ext目录里.你在网上下载的php压缩包解压后应该可以看到.
php.ini中的
extension_dir
用来指定你的扩展名的地址

php.ini中有一排像
;extension="xxxxxx.dll"
的内容就是用来配置让你的php运行环境支持什么不支持什么。
以下为php.ini中的剪切段
------------------------------
;extension=php_bz2.dll
;extension=php_curl.dll
;extension=php_dba.dll

C. PHP可否调用动态链接库

当php.ini中的enable_dl选项为on时,可以使用下面这个函数来加载dll文件:
int dl ( string library ),但是当系统处于安全模式时,即使enable_dl为on,也无法使用.

<?php
// Example loading an extension based on OS
if (!extension_loaded('sqlite')) {
if (strtoupper(substr(PHP_OS, 0, 3) == 'WIN')) {
dl('php_sqlite.dll');
} else {
dl('sqlite.so');
}
}

// Or, the PHP_SHLIB_SUFFIX constant is available as of PHP 4.3.0
if (!extension_loaded('sqlite')) {
$prefix = (PHP_SHLIB_SUFFIX == 'dll') ? 'php_' : '';
dl($prefix . 'sqlite.' . PHP_SHLIB_SUFFIX);
}
?>

这属于动态加载dll文件,还有一种方法就是,将你的dll文件放到php的ext目录下,然后在你的php.ini文件里面找到一大堆:extension=php_xxxx.dll那里,找个空行,按照这个写法写上去,注意前面不要有";"号.重启apache后,就可以调用里面的东西了.

D. php中gd库已打开,还是不能加载

只要去除php.ini配置文件中gd库文件前面的分号就可以了啊,要重启apache。

E. C++的标准动态库为什么不能被PHP调用

php调用C/C++动态链接库
一、简介
一般而言,php速度已经比较快,但是,对于一些较高级开发者而言,如果想要追求更快的速度,那毫无疑问可以通过自己写c代码,并编译为动态链接库(常为.so文件),然后php通过创建一个新的扩展(extension),并在扩展里调用该.so文件,同时对外暴露出php函数接口。
在实际使用中,只要调用该函数接口,即可使用底层更快速的c函数服务。

二、起因
之所以本人要研究这么个问题,主要是近来项目中需要调用一个自己开发的图像处理的动态链接库,希望服务器能够对客户端提供该图像处理服务。而我们服务器开发语言选择了php,所以着手此问题。

三、实现方法
废话不多说,为了实现php调用c库,我在网上搜了个遍也没找到几篇好文章,只有两篇还不错的,分享在本文最末,有兴趣的读者可以去阅读。
下面,本文的开发环境背景是CentOS release 6.5 。为了能够调用c库,我们的php 5.6.9,apache 2.4均是下载源码并编译的,不可直接通过yum安装!请注意。至于php和apache的源码编译本文不提,只要注意在configure打开合适开关即可。

具体步骤如下:
将共享库.so添加入系统配置中(假设共享库名为 'libhello.so')
cp libhello.so /usr/local/lib
echo /usr/local/lib > /etc/ld.so.conf.d/local.conf
/sbin/ldconfig
在php/ext目录下创建扩展头文件,取名为myfunctions.def
在该文件里填写c函数声明即可。每个函数一行。
string hello(int a)
int hello_add(int a, int b)
使用ext_skel搭建扩展骨架
./ext_skel --extname=myfunctions --proto=myfunctions.def
打开config.m4 中的enable开关
PHP_ARG_ENABLE(myfunctions, whether to enable myfunctions support,
[ --enable-myfunctions Include myfunctions support])
上面把扩展骨架建立好了,下面重新配置php (下面是我个人配置文件,读者需要结合自己情况修改)
./buildconf --force //生成新配置脚本
'./configure' '--prefix=/usr/local/php' '--with-libdir=lib64' '--enable-fpm' '--with-fpm-user=php-fpm' '--with-fpm-group=www--enable-mysqlnd' '--with-mysql=mysqlnd' '--with-mysqli=mysqlnd' '--with-pdo-mysql=mysqlnd' '--enable-opcache' '--enable-pcntl' '--enable-mbstring' '--enable-soap' '--enable-zip' '--enable-calendar' '--enable-bcmath' '--enable-exif' '--enable-ftp' '--enable-intl' '--with-openssl' '--with-zlib' '--with-curl' '--with-gd' '--with-zlib-dir=/usr/lib' '--with-png-dir=/usr/lib' '--with-jpeg-dir=/usr/lib' '--with-gettext' '--with-mhash' '--with-ldap' '--disable-fileinfo' '--with-config-file-path=/usr/local/php/etc' '--with-apxs2=/usr/local/httpd/bin/apxs' '--enable-myfunctions' // 配置
记住!一定在末尾加上 —enable-myfunctions 。这样子才会被编译进php中。
当扩展编译进去了之后,就可以开始修改扩展里的myfunctions.c文件,在里面可以添加php->c的转接函数,在转接函数里可以调用.so内的函数。
比如要添加一个hello_add的php函数,里面可以调用c函数add(int a, int b)
a. 添加函数声明
PHP_FE(hello_add, NULL)
b. 添加php函数
PHP_FUNCTION(hello_add){ ... }
注意,在该函数里,如果调用了.so文件里的接口函数,那么待会在make的时候,要指定所使用的.so共享库,该共享库必须完成第1步中添加到系统配置的操作。
如果调用了.so文件,那么要在php/Makefile中添加
Extra_LDFLAG = -lhello //对应前面的libhello.so
Extra_libs = -lhello
(make clean)
每次修改完上面的c文件,都要重新make
make
make install
重启apache服务器
httpd -k restart
在phpinfo里可以看到新扩展,可以直接在php调用新扩展内的函数。

阅读全文

与php无法加载动态库相关的资料

热点内容
mc手机版如何免费开服务器 浏览:627
加密货币延期发布 浏览:978
福昕pdf阅读器删除 浏览:436
app收集信息怎么设置 浏览:288
python少儿编程图 浏览:747
命令方块解禁 浏览:930
海康威视服务器地址和设备标识 浏览:298
做网站用php还是html 浏览:199
脸部识别算法模型厂家 浏览:176
反编译的程序带注释吗 浏览:713
安装软件服务器未响应怎么解决 浏览:531
阀门开度单片机 浏览:568
python多线程有什么坑 浏览:681
程序员从互联网跳槽到银行里 浏览:244
百度网盘资源解压后暂不支持在线 浏览:220
android自动化环境 浏览:253
androidrealm加密 浏览:513
地图正在解压缩是什么意思 浏览:217
电脑软件能放在文件夹吗 浏览:786
uc服务器怎么打开 浏览:364