找不到“mysqli”类

时间:2015-03-14 20:30:45

标签: php apache mysqli

我知道这个问题在这里被多次询问,但我的情况有点不同,因为我编译了php5。

我使用--with-mysqli=mysqlnd选项配置了php并输出了命令:

 cat php.ini | grep extension 

给了我以下结果。

extension_dir = "/usr/local/lib/php/extensions/no-debug-zts-20121212/"
extension=imap.so
extension=mysqli.so
extension=mysqlnd.so
extension=pdo_mysql.so

此外,使用

列出文件
sudo ls -l /usr/local/lib/php/extensions/no-debug-zts-20121212/

给了我以下结果。

total 1312
-rwxr-xr-x 1 root root 302845 Mar 14 19:20 imap.so
-rwxr-xr-x 1 root root 127672 Mar 15 00:08 mysqli.so
-rwxr-xr-x 1 root root 196760 Mar 15 00:08 mysqlnd.so
-rwxr-xr-x 1 root root  47168 Mar 15 00:08 mysql.so
-rwxr-xr-x 1 root root 522240 Mar 14 12:57 opcache.so
-rwxr-xr-x 1 root root  26960 Mar 15 00:09 pdo_mysql.so
-rwxr-xr-x 1 root root 104808 Mar 15 00:09 pdo.so

有了这个配置,我仍遇到以下错误:

 [Sat Mar 14 23:49:37.520219 2015] [:error] [pid 8142:tid   
 140418847074048] [client 127.0.0.1:34142] PHP Fatal error: Class   
 'mysqli' not found in /var/www/warmmail/db_fns.php on line 5

现在测试是否加载了mysqli我把以下代码放在我的一个中 登陆页面:

<?php
echo 'Loaded .ini file is : '.php_ini_loaded_file();
echo '<br /><br />Function sets supported in this install are:<br />';
$extensions = get_loaded_extensions();
foreach($extensions as $each_ext)
{
echo "$each_ext<br />";
echo '<ul>';
$ext_funcs=get_extension_funcs($each_ext);
foreach($ext_funcs as $func)
{
echo "<li>$func</li>";
}
echo '</ul>';
}
?>

我得到了以下输出(仅显示摘录,因为它是一个大清单)

          o
          o
          o
    posix_get_last_error
    posix_errno
    posix_strerror
    posix_initgroups

Reflection

mysqlnd

shmop

    shmop_open
    shmop_read
    shmop_close
    shmop_size
    shmop_write
    shmop_delete
          o
          o
          o

正如我们可以看到mysql本机驱动程序(mysqlnd)被加载但是mysqli扩展及其功能(**我正在寻找)**未加载。

修改1

   php -i | grep -n mysqli

给出了以下结果。

PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/local/lib/php/extensions/no-debug-zts-20121212/mysqli.so' - /usr/local/lib/php/extensions/no-debug-zts-20121212/mysqli.so: undefined symbol: core_globals in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/local/lib/php/extensions/no-debug-zts-20121212/mysqlnd.so' - /usr/local/lib/php/extensions/no-debug-zts-20121212/mysqlnd.so: undefined symbol: core_globals in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/local/lib/php/extensions/no-debug-zts-20121212/pdo_mysql.so' - /usr/local/lib/php/extensions/no-debug-zts-20121212/pdo_mysql.so: undefined symbol: core_globals in Unknown on line 0

我该怎么办才能启动并运行mysqli?

1 个答案:

答案 0 :(得分:1)

最后我能够自己解决这个问题 最初我的配置脚本是:

sudo ./configure --with-apxs2=/usr/local/apache2/bin/apxs 
--with-mysqli=/usr/bin/mysql_config --with-pdo-mysql=/usr 
/bin/mysql_config --enable-embedded_mysqli --enable-embedded-
pdo-mysql --with-zlib --with-gd --with-mhash --with-mcrypt
--with-curl --with-openssl --with-zlib --with-jpeg-dir --with-png-dir    
--with-pcre-regex --with-pdo-mysql --enable-calendar --enable-exif 
--enable-ftp --enable-mbstring --enable-shmop --enable-soap --enable-
sockets --enable-wddx --enable-zip
libmysqlclient-dev 添加了 / usr / bin / 中的

mysql_config Debian包而不是我编译的mysql。事实上,我编译的mysql中的 mysql_config 文件位于 / usr / local / mysql / bin / 文件夹中。

所以我按如下所示更改了配置脚本并重新编译了php:

 sudo ./configure --with-apxs2=/usr/local/apache2/bin/apxs 
 --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql
 /bin/mysql_config --with-pdo-mysql=/usr/local/mysql/bin/mysql_config
 --enable-embedded_mysqli --enable-embedded-pdo-mysql --with-zlib 
 --with-gd --with-mhash --with-mcrypt --with-curl --with-openssl 
 --with-zlib --with-jpeg-dir --with-png-dir --with-pcre-regex --enable- 
 calendar --enable-exif --enable-ftp --enable-mbstring --enable-shmop  
 --enable-soap --enable-sockets --enable-wddx --enable-zip

这解决了这个问题。