centos6.7下编译安装php5.4.4时遇到的一些疑问

大圈 发布于 2016/05/07 18:15
阅读 281
收藏 0

./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-openssl --enable-fpm --enable-sockets --enable-sysvshm  --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib-dir --with-libxml-dir=/usr --enable-xml  --with-mhash --with-mcrypt  --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2 --with-curl

上面是我的编译参数。心里有一些疑问:

--with-mysql=/usr/local/mysql  这个选项是说mysql的安装目录,加上--with-mysql这个参数的目的是什么呢?如果我的mysql是yum安装的呢,mysql的安装目录散落在很多目录,那么我该怎么写,是不是就不用写了?

--with-mysqli=/usr/local/mysql/bin/mysql_config  这个选项的目的是什么呢?我的理解是增加php的mysqli扩展来驱动mysql.但是为什么又说驱动mysql是用mysql_connect()函数呢?难道是mysqli扩展提供了这个函数?今天我再看php5.6时已经没有了--with-mysqli这选项了,那又是靠什么来驱动mysql呢?

我对php实在不太了解,希望懂的人能给指点一下。多谢。


加载中
1
eechen
eechen
PHP针对各数据库系统对应的扩展

PHP中三种主要的MySQL连接方式:
PHP从5.4开始驱动底层实现都是PHP源码内置的mysqlnd:
php-src/ext/mysqlnd/
php-src/ext/mysql/
php-src/ext/mysqli/
php-src/ext/pdo_mysql/
关系:mysql,mysqli,pdo_mysql这3套PHP操作MySQL的接口底层都依赖PHP内置的MySQL驱动mysqlnd.
http://php.net/manual/zh/mysqli.overview.php
mysqli(首选) pdo_mysql(建议) mysql(不建议)

PHP5.3这样启用mysqlnd支持:
--with-mysql=mysqlnd
--with-mysqli=mysqlnd
--with-pdo-mysql=mysqlnd
PHP5.4后留空则默认启用mysqlnd:
--with-mysql
--with-mysqli
--with-pdo-mysql
PHP7开始不再支持--with-mysql.
--with-pdo-sqlite 默认启用,推荐采用pdo_sqlite来操作SQLite.
--with-sqlite3 默认启用,此扩展是试验性质的.
Windows二进制包ext目录下内置了下面几个扩展:
php_mysql.dll
php_mysqli.dll
php_pdo_mysql.dll
php_sqlite3.dll
php_pdo_sqlite.dll
Debian/Ubuntu软件包: php5-mysqlnd php5-sqlite

PostgreSQL Driver for PHP:
--with-pgsql=DIR
--with-pdo-pgsql=DIR
DIR is the PostgreSQL base install directory or the path to pg_config.
Debian/Ubuntu软件包: php5-pgsql
apt-cache depends php5-pgsql 看到其依赖libpq5这个PostgreSQL的C客户端库.
开发包libpq-dev里带了/usr/bin/pg_config.
sudo apt-get install libpq-dev
--with-pgsql=/usr/bin/pg_config
--with-pdo-pgsql=/usr/bin/pg_config

Oracle Driver for PHP:
--with-oci8=DIR
--with-pdo-oci=DIR 此扩展是试验性质的.
DIR defaults to $ORACLE_HOME.
或者安装Oracle Instant Client然后这样指定:
--with-oci8=shared,instantclient,/usr/lib/oracle/11.2/client/lib
--with-pdo-oci=shared,instantclient,/usr/lib/oracle,11.2
Oracle Instant Client下载地址(60MB):
http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html
php_oci8.dll
php_oci8_11g.dll
php_pdo_oci.dll
大圈
大圈
前辈,麻烦你再看下我的留言。
0
大圈
大圈

引用来自“eechen”的评论

PHP针对各数据库系统对应的扩展

PHP中三种主要的MySQL连接方式:
PHP从5.4开始驱动底层实现都是PHP源码内置的mysqlnd:
php-src/ext/mysqlnd/
php-src/ext/mysql/
php-src/ext/mysqli/
php-src/ext/pdo_mysql/
关系:mysql,mysqli,pdo_mysql这3套PHP操作MySQL的接口底层都依赖PHP内置的MySQL驱动mysqlnd.
http://php.net/manual/zh/mysqli.overview.php
mysqli(首选) pdo_mysql(建议) mysql(不建议)

PHP5.3这样启用mysqlnd支持:
--with-mysql=mysqlnd
--with-mysqli=mysqlnd
--with-pdo-mysql=mysqlnd
PHP5.4后留空则默认启用mysqlnd:
--with-mysql
--with-mysqli
--with-pdo-mysql
PHP7开始不再支持--with-mysql.
--with-pdo-sqlite 默认启用,推荐采用pdo_sqlite来操作SQLite.
--with-sqlite3 默认启用,此扩展是试验性质的.
Windows二进制包ext目录下内置了下面几个扩展:
php_mysql.dll
php_mysqli.dll
php_pdo_mysql.dll
php_sqlite3.dll
php_pdo_sqlite.dll
Debian/Ubuntu软件包: php5-mysqlnd php5-sqlite

PostgreSQL Driver for PHP:
--with-pgsql=DIR
--with-pdo-pgsql=DIR
DIR is the PostgreSQL base install directory or the path to pg_config.
Debian/Ubuntu软件包: php5-pgsql
apt-cache depends php5-pgsql 看到其依赖libpq5这个PostgreSQL的C客户端库.
开发包libpq-dev里带了/usr/bin/pg_config.
sudo apt-get install libpq-dev
--with-pgsql=/usr/bin/pg_config
--with-pdo-pgsql=/usr/bin/pg_config

Oracle Driver for PHP:
--with-oci8=DIR
--with-pdo-oci=DIR 此扩展是试验性质的.
DIR defaults to $ORACLE_HOME.
或者安装Oracle Instant Client然后这样指定:
--with-oci8=shared,instantclient,/usr/lib/oracle/11.2/client/lib
--with-pdo-oci=shared,instantclient,/usr/lib/oracle,11.2
Oracle Instant Client下载地址(60MB):
http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html
php_oci8.dll
php_oci8_11g.dll
php_pdo_oci.dll

多谢这位前辈详细的讲解,我搞错了一个地方,php5.6还是有--with-mysqli这个选项的。我现在明白了一些。如果
php和mysql不在同一台服务器那么这三个选项只管空着就行,默认是mysqlnd(If no value or mysqlnd is passed)。
--with-mysql
--with-mysqli
--with-pdo-mysql
如果mysql和php在同一台服务器且mysql也是编译安装的那么我们就写上相应的路径,如果是mysql是yum安装的,那么
除了--with-mysqli写上相应的路径,其他两个选项则也留空。是这样的吗,前辈?
返回顶部
顶部