PHP扩展版本不一致;更可靠的方法?
已运行以下程序:PHP扩展版本不一致;更可靠的方法?,php,versioning,php-extension,Php,Versioning,Php Extension,已运行以下程序: foreach(get_loaded_extensions() as $name){ $extensions[strtolower($name)] = phpversion($name); } var_dump($extensions); 我注意到一些加载的扩展没有显示版本,而是显示false,例如: 'pcre' => boolean false 但是,当我点击phpinfo()时,它会显示一个版本号: 为什么phpversion()函数不能获取正确的结果?
foreach(get_loaded_extensions() as $name){
$extensions[strtolower($name)] = phpversion($name);
}
var_dump($extensions);
我注意到一些加载的扩展没有显示版本,而是显示false,例如:
'pcre' => boolean false
但是,当我点击phpinfo()
时,它会显示一个版本号:
为什么phpversion()
函数不能获取正确的结果?我知道在这个例子中,我可以简单地拉取PCRE\u版本
,但是需要为一些但不是所有的扩展这样做是愚蠢的gd
也显示false
编辑:修复
foreach(get_loaded_extensions() as $name){
$extensions[strtolower($name)] = phpversion($name);
}
$extensions = array_replace($extensions, array(
'iconv' => ICONV_VERSION,
'pcre' => PCRE_VERSION,
'libxml' => LIBXML_DOTTED_VERSION,
'gd' => GD_VERSION,
// others i may be missing, will get to it
));
编辑:这里是完整的转储和
phpinfo()
输出,仅供咯咯笑用:
array
'core' => string '5.3.8' (length=5)
'bcmath' => boolean false
'calendar' => boolean false
'com_dotnet' => string '0.1' (length=3)
'ctype' => boolean false
'date' => string '5.3.8' (length=5)
'ereg' => boolean false
'filter' => string '0.11.0' (length=6)
'ftp' => boolean false
'hash' => string '1.0' (length=3)
'iconv' => boolean false
'json' => string '1.2.1' (length=5)
'mcrypt' => boolean false
'spl' => string '0.2' (length=3)
'odbc' => string '1.0' (length=3)
'pcre' => boolean false
'reflection' => string '$Revision: 313665 $' (length=19)
'session' => boolean false
'standard' => string '5.3.8' (length=5)
'mysqlnd' => string 'mysqlnd 5.0.8-dev - 20102224 - $Revision: 310735 $' (length=50)
'tokenizer' => string '0.1' (length=3)
'zip' => string '1.9.1' (length=5)
'zlib' => string '1.1' (length=3)
'libxml' => boolean false
'dom' => string '20031129' (length=8)
'pdo' => string '1.0.4dev' (length=8)
'bz2' => boolean false
'simplexml' => string '0.1' (length=3)
'wddx' => boolean false
'xml' => boolean false
'xmlreader' => string '0.1' (length=3)
'xmlwriter' => string '0.1' (length=3)
'apache2handler' => boolean false
'phar' => string '2.0.1' (length=5)
'mbstring' => boolean false
'exif' => string '1.4 $Id: exif.c 314376 2011-08-06 14:47:44Z felipe $' (length=52)
'gd' => boolean false
'gettext' => boolean false
'imap' => boolean false
'mysql' => string '1.0' (length=3)
'mysqli' => string '0.1' (length=3)
'pdo_mysql' => string '1.0.2' (length=5)
'pdo_odbc' => string '1.0.1' (length=5)
'pdo_sqlite' => string '1.0.1' (length=5)
'soap' => boolean false
'sockets' => boolean false
'sqlite' => string '2.0-dev' (length=7)
'sqlite3' => string '0.7-dev' (length=7)
'tidy' => string '2.0' (length=3)
'xmlrpc' => string '0.51' (length=4)
'mhash' => boolean false
'xdebug' => string '2.1.1' (length=5)
phpversion()返回该扩展的版本,如果存在,则返回FALSE
没有关联的版本信息或扩展未启用
您在
phpinfo()
中看到的不是扩展的版本信息,而是库的c客户机版本。prce
扩展本身没有版本信息。系统中不是安装了扩展本身,而是安装了共享库的版本吗?这很奇怪。打印zend_module->version
,然后phpversion调用,该调用还返回module->version
。我也很好奇。你的PCRE是静态链接到PHP,还是动态加载?我怀疑在编译时它实际上不是一个加载的扩展。@Phil Lello-啊,说得好,也许这就是原因。我想我应该在转储中适应这种情况,比如gd
和其他情况。谢谢@xdazz-我会手动检查某些扩展(例如pcre
和gd
);请参阅编辑以进行修复(在我的上方,阻碍包含phpinfo()
dump)。