PHP unable to run MYSQLI functions on Amazon EC2 m

2019-02-11 02:20发布

问题:

Ugh, I'm running into some real trouble with my Amazon micro instance. I'm just now implementing a PHP <-> MYSQL interface. The instance seems to be reporting that the MYSQLI plugin is not installed, however, all other indications are contrary. I've exhausted my patience with searching and will now appeal to the higher intellect of the internet as a whole. Thanks for looking!

My Code:

<?php
    error_reporting(E_ALL);
    ini_set('error_reporting', E_ALL);
    ini_set('display_errors', 'On');
    $mysql = mysqli_connect( 'localhost', 'EulerPhpUser', '*********' );
    // more code

error message: Fatal error: Call to undefined function mysqli_connect() in /var/www/html/euler/login.php on line 27

$ cat /etc/*-release
Amazon Linux AMI release 2013.03

Here's the portion of my php.ini file

; Maximum number of links.  -1 means no limit.
; http://www.php.net/manual/en/mysqli.configuration.php#ini.mysqli.max-links
mysqli.max_links = -1

; Default port number for mysqli_connect().  If unset, mysqli_connect() will use
; the $MYSQL_TCP_PORT or the mysql-tcp entry in /etc/services or the
; compile-time value defined MYSQL_PORT (in that order).  Win32 will only look
; at MYSQL_PORT.
; http://www.php.net/manual/en/mysqli.configuration.php#ini.mysqli.default-port
mysqli.default_port = 3306

; Default socket name for local MySQL connects.  If empty, uses the built-in
; MySQL defaults.
; http://www.php.net/manual/en/mysqli.configuration.php#ini.mysqli.default-socket
mysqli.default_socket =

; Default host for mysql_connect() (doesn't apply in safe mode).
; http://www.php.net/manual/en/mysqli.configuration.php#ini.mysqli.default-host
mysqli.default_host =

; Default user for mysql_connect() (doesn't apply in safe mode).
; http://www.php.net/manual/en/mysqli.configuration.php#ini.mysqli.default-user
mysqli.default_user =

; Default password for mysqli_connect() (doesn't apply in safe mode).
; Note that this is generally a *bad* idea to store passwords in this file.
; *Any* user with PHP access can run 'echo get_cfg_var("mysqli.default_pw")
; and reveal this password!  And of course, any users with read access to this
; file will be able to reveal the password as well.
; http://www.php.net/manual/en/mysqli.configuration.php#ini.mysqli.default-pw
mysqli.default_pw =

; Allow or prevent reconnect
mysqli.reconnect = Off

This is the only section of the phpifo() where my search for mysqli yielded results

Configure Command 
'./configure' '--build=x86_64-redhat-linux-gnu' '--host=x86_64-redhat-linux-gnu' '--target=x86_64-amazon-linux-gnu' '--program-prefix=' '--prefix=/usr' '--exec-prefix=/usr' '--bindir=/usr/bin' '--sbindir=/usr/sbin' '--sysconfdir=/etc' '--datadir=/usr/share' '--includedir=/usr/include' '--libdir=/usr/lib64' '--libexecdir=/usr/libexec' '--localstatedir=/var' '--sharedstatedir=/var/lib' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--cache-file=../config.cache' '--with-libdir=lib64' '--with-config-file-path=/etc' '--with-config-file-scan-dir=/etc/php.d' '--disable-debug' '--with-pic' '--disable-rpath' '--without-pear' '--with-bz2' '--with-exec-dir=/usr/bin' '--with-freetype-dir=/usr' '--with-png-dir=/usr' '--with-xpm-dir=/usr' '--enable-gd-native-ttf' '--with-t1lib=/usr' '--without-gdbm' '--with-gettext' '--with-gmp' '--with-iconv' '--with-jpeg-dir=/usr' '--with-openssl' '--with-pcre-regex=/usr' '--with-zlib' '--with-layout=GNU' '--enable-exif' '--enable-ftp' '--enable-magic-quotes' '--enable-sockets' '--with-kerberos' '--enable-ucd-snmp-hack' '--enable-shmop' '--enable-calendar' '--without-sqlite' '--with-libxml-dir=/usr' '--enable-xml' '--with-system-tzdata' '--with-mhash' '--with-apxs2=/usr/sbin/apxs' '--libdir=/usr/lib64/php' '--enable-pdo=shared' '--with-mysql=shared,/usr' '--with-mysqli=shared,/usr/lib64/mysql/mysql_config' '--with-pdo-mysql=shared,/usr/lib64/mysql/mysql_config' '--with-pdo-sqlite=shared,/usr' '--without-gd' '--disable-dom' '--disable-dba' '--without-unixODBC' '--disable-xmlreader' '--disable-xmlwriter' '--without-sqlite3' '--disable-phar' '--disable-fileinfo' '--disable-json' '--without-pspell' '--disable-wddx' '--without-curl' '--disable-posix' '--disable-sysvmsg' '--disable-sysvshm' '--disable-sysvsem' 

Finally, one other thing to note. I tried to run the following code, and the server returns a completely blank page back. No errors, no nothing. As if php crashed without generating an error. I'm not sure how to interpret that.

if (function_exists('mysqli_connect')) {
     echo 'mysqli is installed';
} 

I even got so frustrated that I tried some PDO, but then got error Connection failed: could not find driver

Please advise if any further info is requested and I'll promptly provide it. Thank you for the help

回答1:

In AWS, I got this error and found that I needed to run "yum install php-mysqli". This is in addition to the mysql and php packages.



回答2:

UPDATE:

Up to where I understand your PHP installation was compiled with mysqli support but the module is not enabled. Why? Because you specify that the only reference to mysqli in the phpinfo() is the Configure Command. Should it be enabled, a table like should show up.

So, maybe, you simply didn't uncomment the extension line in your php.ini file:

extension=mysqli.so

Initial post:

According to the official docummentation:

To check whether the system is using a configuration file, try retrieving the value of the cfg_file_path configuration setting. If this is available, a configuration file is being used.

In other words, you could check if your php.ini file is being taken into account (it may be in a wrong path). Try:

<?php echo 'Configuration file (php.ini) path: ', get_cfg_var('cfg_file_path');


回答3:

If you have installed php 7.1, eg

sudo yum install php71

You will also need to install mysqli separately, eg

sudo yum install php71-mysqli

Do not run

sudo yum install php-mysqli

As this will install php 5



回答4:

I can confirm this error on Amazon Linux upgrading PHP from 5.3 to 5.6.

There is no php56-mysqli package. There is php56-mysqlnd, which I had installed. php-mysqli was the 5.3 version [on AWS Linux].

The problem turned out to be that the installer left some PHP 5.3 pieces behind, notably /usr/bin/php (!).

To correct this problem, run:

$ alternatives --force --refresh php

Flag --force is needed to make alternatives overwrite files left where the links should have been.