解决PHP startup: Unable to load dynamic library的错误

在 Windows 下安装完 PHP 和 web 服务器之后,可能想要安装一些扩展库来获得更多功能。可以通过修改 php.ini 来选择当 PHP 启动时加载哪些扩展库。也可以在脚本中通过使用 dl() 来动态加载。

PHP 扩展库的 DLL 文件都具有 php_ 前缀。

很多扩展库都内置于 Windows 版的 PHP 之中。这意味着要加载这些扩展库不需要额外的 DLL 文件和 extension 配置指令。Windows 下的 PHP 扩展库列表列出了需要或曾经需要额外 PHP DLL 文件的扩展库。下面是内置的扩展库列表:

PHP 4 中(截止到 PHP 4.3.11):BCMathCaledarCOMCtypeFTPMySQLODBCOverloadPCRESessionTokenizerWDDXXMLZlib

PHP 5 中(截止到 5.0.4)有以下修改。新增内置:DOMLibXMLIconvSimpleXMLSPLSQLite。以下不再内置:MySQLOverload

PHP 搜索扩展库的默认位置在 PHP 4 中是 C:/php4/extensions,在 PHP 5 中是 C:/php5。要修改此项以符合用户自己的 PHP 设置,需要编辑 php.ini 文件:

  • 需要修改 extension_dir 设置以指向用户放置扩展库的目录或者说放置 php_*.dll 文件的位置。例如:

    extension_dir = C:/php/extensions

     

  • 要在 php.ini 中启用某扩展库,需要去掉该行 extension=php_*.dll 前的注释符号,将想要加载的扩展库前的分号(;)删除即可。

    Example#1 启用 Bzip2 扩展库

    // 将这一行;extension=php_bz2.dll// 改成这样extension=php_bz2.dll

     

  • 有些扩展库需要额外的 DLL 才能工作。其中一部分包括在发行包里,PHP 4 中在 C:/php/dlls/ 目录下,PHP 5 中在主目录下,但还有一些,例如 Oracle(php_oci8.dll)所需要的 DLL 没有绑定在发行包里。如果安装 PHP 4,将绑定的 DLL 从 C:/php/dlls 拷贝到主目录 C:/php 中。别忘了将 C:/php 放到系统路径 PATH 中去(此过程在另外的 FAQ 条目中有说明)。

  • 某些 DLL 没有绑定在 PHP 发行包中,详情见每个扩展库的文档页。此外有关 PECL 的说明见手册页 PECL 扩展库安装。在 PECL 中有日益增加数目巨大的 PHP 扩展库,这些扩展库需要单独下载

Note: 如果运行服务器模块版的 PHP,在修改了 php.ini 之后别忘了重新启动 web 服务器以使其改动生效。

 

下表说明了哪些扩展库需要额外的 DLL。

PHP 扩展库
扩展库 说明 注解
php_bz2.dll bzip2 压缩函数库
php_calendar.dll 历法转换函数库 自 PHP 4.0.3 起内置
php_cpdf.dll ClibPDF 函数库
php_crack.dll 密码破解函数库
php_ctype.dll ctype 家族函数库 自 PHP 4.3.0 起内置
php_curl.dll CURL,客户端 URL 库函数库 需要:libeay32.dll,ssleay32.dll(已附带)
php_cybercash.dll 网络现金支付函数库 PHP <= 4.2.0
php_db.dll DBM 函数库 已废弃。用 DBA 替代之(php_dba.dll)
php_dba.dll DBA:数据库(dbm 风格)抽象层函数库
php_dbase.dll dBase 函数库
php_dbx.dll dbx 函数库  
php_domxml.dll DOM XML 函数库 PHP <= 4.2.0 需要:libxml2.dll(已附带),PHP >= 4.3.0 需要:iconv.dll(已附带)
php_dotnet.dll .NET 函数库 PHP <= 4.1.1
php_exif.dll EXIF 函数库 需要 php_mbstring.dll。并且在 php.ini 中,php_exif.dll 必须在 php_mbstring.dll之后加载。
php_fbsql.dll FrontBase 函数库 PHP <= 4.2.0
php_fdf.dll FDF:表单数据格式化函数库 需要:fdftk.dll(已附带)
php_filepro.dll filePro 函数库 只读访问
php_ftp.dll FTP 函数库 自 PHP 4.0.3 起内置
php_gd.dll GD 库图像函数库 在 PHP 4.3.2 中删除。此外注意在 GD1 中不能用真彩色函数,用 php_gd2.dll 替代。
php_gd2.dll GD 库图像函数库 GD2
php_gettext.dll Gettext 函数库 PHP <= 4.2.0 需要 gnu_gettext.dll(已附带),PHP >= 4.2.3 需要 libintl-1.dll,iconv.dll(已附带)。
php_hyperwave.dll HyperWave 函数库
php_iconv.dll ICONV 字符集转换 需要:iconv-1.3.dll(已附带),PHP >=4.2.1 需要 iconv.dll
php_ifx.dll Informix 函数库 需要:Informix 库
php_iisfunc.dll IIS 管理函数库
php_imap.dll IMAP,POP3 和 NNTP 函数库
php_ingres.dll Ingres II 函数库 需要:Ingres II 库
php_interbase.dll InterBase functions 需要:gds32.dll(已附带)
php_java.dll Java 函数库 PHP <= 4.0.6 需要:jvm.dll(已附带)
php_ldap.dll LDAP 函数库 PHP <= 4.2.0 需要 libsasl.dll(已附带),PHP >= 4.3.0 需要 libeay32.dll,ssleay32.dll(已附带)
php_mbstring.dll 多字节字符串函数库
php_mcrypt.dll Mcrypt 加密函数库 需要:libmcrypt.dll
php_mhash.dll Mhash 函数库 PHP >= 4.3.0 需要:libmhash.dll(已附带)
php_mime_magic.dll Mimetype 函数库 需要:magic.mime(已附带)
php_ming.dll Ming 函数库(Flash)
php_msql.dll mSQL 函数库 需要:msql.dll(已附带)
php_mssql.dll MSSQL 函数库 需要:ntwdblib.dll(已附带)
php_mysql.dll MySQL 函数库 PHP >= 5.0.0 需要 libmysql.dll(已附带)
php_mysqli.dll MySQLi 函数库 PHP >= 5.0.0 需要 libmysql.dll(PHP <= 5.0.2 中是 libmysqli.dll)(已附带)
php_oci8.dll Oracle 8 函数库 需要:Oracle 8.1+ 客户端库
php_openssl.dll OpenSSL 函数库 需要:libeay32.dll(已附带)
php_oracle.dll Oracle 函数库 需要:Oracle 7 客户端库
php_overload.dll 对象重载函数库 自 PHP 4.3.0 起内置
php_pdf.dll PDF 函数库
php_pgsql.dll PostgreSQL 函数库
php_printer.dll 打印机函数库
php_shmop.dll 共享内存函数库
php_snmp.dll SNMP 函数库 仅用于 Windows NT!
php_soap.dll SOAP 函数库 PHP >= 5.0.0
php_sockets.dll Socket 函数库
php_sybase_ct.dll Sybase 函数库 需要:Sybase 客户端库
php_tidy.dll Tidy 函数库 PHP >= 5.0.0
php_tokenizer.dll Tokenizer 函数库 自 PHP 4.3.0 起内置
php_w32api.dll W32api 函数库
php_xmlrpc.dll XML-RPC 函数库 PHP >= 4.2.1 需要 iconv.dll(已附带)
php_xslt.dll XSLT 函数库 PHP <= 4.2.0 需要 sablot.dll,expat.dll(已附带)。PHP >= 4.2.1 需要 sablot.dll,expat.dll,iconv.dll(已附带)。
php_yaz.dll YAZ 函数库 需要:yaz.dll(已附带)
php_zip.dll Zip 文件函数库 只读访问
php_zlib.dll ZLib 压缩函数库 自 PHP 4.3.0 起内置



=============================================================

把我以前的处理过程贴一下, 看是否对你有用。

数据库环境 : red flag linux dc 4.1 + oracle 9.2.0.4

PHP环境:win 2000 server sp4 + IIS 5 +php 5.2

过程 :1、 安装完php 5.2 后,mysql 正常, 安装phpbb ,正常。

2、由于php 5.2 抛弃了php_oracle.dll , 只剩下 php_oci8.dll,所以只能开启php_oci8.dll 扩展,修改php.ini 后,重新启动IIS,连接ORACLE失败, 提示找不到oci_connect 的定义。

3、baidu,google多方查找, 分别实验:关键目录复制,PATH 设置, ORACLE_HOME 、ORACLE_SID设置,msvcr71.dll 复制,后来在一些高人的帖子,发现问题应该出现在 oracle 的oci.dll,用了depend工具分析php_oci8.dll,发现在调用oci.dll 出错,OCILobRead2 函数是红色,按这个东东再查找帖子,发现有个牛人在骂oracle , 原来php5.2 的php_oci8.dll 必须要装oralce 10g 以上的client 才可以 , 因为OCILobRead2在oracle 10g的oci.dll 才有定义, oracle 支持建议安装oracle 10g client ,,

4、那位牛人自己动手, 修改了DLL , 咱没这个能力,只有老实下了oracle 10g client 的basic 版本, 30多M , 解压,发现没有安装文件 ,看了文档,建议是新开个目录,复制这些文件,把该目录加到PATH中。按照文档完成。重新启动IIS,这下子,PHP不提示错误了, 但ORALCE连接还是失败 , 提示没有可用的TNSNAME ,我的ORACLE 9I CLIENT还是正常的 ....

5、最后, 我把10g 的相关文件 在安全模式下覆盖了9i 的bin目录下的文件, 重起WIN。

6、测试,连接成功, 又发现问题, 乱码 ...

7、再次baidu , google , 把oci_connect 设定成对应的汉字编码。

8、成功!

你可能感兴趣的:(PHP)