最近两天在安装phpunit的时候突然发现了一个问题,PHP总是报错PHP Warning: Module 'modulename' already loaded in Unknown on line 0,在linux下输入php –v查看php版本信息,也会报如上的错误。网上资料找了半天,搞清了真正的原因。下面我们看一下如何解决这个问题。
问题重现
当运行CLI版本的PHP命令行,您可能会收到以下错误:
[root@myserver /root]$ php -v
PHP Warning: Module 'pcre' already loaded in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/local/php5/lib/php/extensions/no-debug-non-zts-20060613/spl.so' - /usr/local/php5/lib/php/extensions/no-debug-non-zts-20060613/spl.so: Undefined symbol "pcre_exec" in Unknown on line 0
PHP Warning: Module 'SimpleXML' already loaded in Unknown on line 0
PHP Warning: Module 'session' already loaded in Unknown on line 0
PHP Warning: Module 'exif' already loaded in Unknown on line 0
PHP 5.2.3 (cli) (built: Jun 14 2007 15:29:17)
Copyright (c) 1997-2007 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies
问题原因
在PHP中有两种方式加载大多数的拓展。一是直接编译至PHP的二进制扩展,另一种是通过一个ini文件动态加载一个共享扩展。这些错误表明动态扩展通过ini文件被加载,即使他们已经编译成二进制。
解决办法
我们必须修改php.ini(or extensions.ini)并且注释掉那些已编译为二进制的拓展。例如,编辑后,你的ini文件看起来像下面的示例:
;extension=pcre.so
;extension=spl.so
;extension=simplexml.so
;extension=session.so
;extension=exif.so
你也可以删除这些行。一旦你已经禁用这些行,运行php – v,警告就消失了。
题外话
如果你想看看哪些拓展已经编译至你的PHP,运行以下命令
php –m
您还可以查看配置命令,该命令将显示哪些扩展是启用并进行,或建立作为共享、动态模块。
php -i | grep Configure
; Directory in which the loadable extensions (modules) reside.
extension_dir = "/usr/local/php5/lib/php/extensions/no-debug-non-zts-20060613/"
|