Php 在RHEL 6上编译'mysql_pdo'驱动程序(无internet访问,无'yum安装')

Php 在RHEL 6上编译'mysql_pdo'驱动程序(无internet访问,无'yum安装'),php,mysql,linux,pdo,makefile,Php,Mysql,Linux,Pdo,Makefile,我对pdo_mysql有一个非常恼人的问题 配置: RedHat Enterprise Linux 6 x64(未连接到internet) PHP 5.6.21 MariaDB 10.1.14 这就是我所做的: 卸载了默认的mysql软件包并安装了mariadb(此处列出的所有内容:除了oqgraph引擎.rpm)。我能够查询表,所以我认为安装是好的 运行web应用程序时,我遇到一个错误,说找不到驱动程序,因此我尝试编译phppdo_-mysql驱动程序 为了便于访问,我将源文件(与安装P

我对
pdo_mysql
有一个非常恼人的问题

配置:

  • RedHat Enterprise Linux 6 x64(未连接到internet
  • PHP 5.6.21
  • MariaDB 10.1.14
这就是我所做的:

  • 卸载了默认的
    mysql
    软件包并安装了
    mariadb
    (此处列出的所有内容:除了
    oqgraph引擎.rpm
    )。我能够查询表,所以我认为安装是好的
  • 运行web应用程序时,我遇到一个错误,说
    找不到驱动程序
    ,因此我尝试编译
    php
    pdo_-mysql
    驱动程序
  • 为了便于访问,我将源文件(与安装
    PHP
    时使用的文件相同)放在
    /PHP-5.6.21
  • 我导航到
    /php-5.6.21/ext/pdo_-mysql
    ,运行
    phpize
    ,然后运行
    /configure
    ,然后运行
    make
    。这里我有一大堆错误:

    [root@user029x ~]# cd /php-5.6.21/ext/pdo_mysql
    [root@user029x pdo_mysql]# phpize
    Configuring for:
    PHP Api Version:         20131106
    Zend Module Api No:      20131226
    Zend Extension Api No:   220131226
    [root@user029x pdo_mysql]# ./configure
    ......................................
    [root@user029x pdo_mysql]# make
    /bin/sh /php-5.6.21/ext/pdo_mysql/libtool --mode=compile cc -I/usr/local/include/php/ext -I -I. -I/php-5.6.21/ext/pdo_mysql -DPHP_ATOM_INC -I/php-5.6.21/ext/pdo_mysql/include -I/php-5.6.21/ext/pdo_mysql/main -I/php-5.6.21/ext/pdo_mysql -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib  -DHAVE_CONFIG_H  -g -O2   -c /php-5.6.21/ext/pdo_mysql/pdo_mysql.c -o pdo_mysql.lo
     cc -I/usr/local/include/php/ext -I -I. -I/php-5.6.21/ext/pdo_mysql -DPHP_ATOM_INC -I/php-5.6.21/ext/pdo_mysql/include -I/php-5.6.21/ext/pdo_mysql/main -I/php-5.6.21/ext/pdo_mysql -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -DHAVE_CONFIG_H -g -O2 -c /php-5.6.21/ext/pdo_mysql/pdo_mysql.c  -fPIC -DPIC -o .libs/pdo_mysql.o
    In file included from /php-5.6.21/ext/pdo_mysql/pdo_mysql.c:32:
    /php-5.6.21/ext/pdo_mysql/php_pdo_mysql_int.h:27:34: error: ext/mysqlnd/mysqlnd.h: No such file or directory
    /php-5.6.21/ext/pdo_mysql/php_pdo_mysql_int.h:28:50: error: ext/mysqlnd/mysqlnd_libmysql_compat.h: No such file or directory
    /php-5.6.21/ext/pdo_mysql/php_pdo_mysql_int.h:64:39: error: ext/mysqlnd/mysqlnd_debug.h: No such file or directory
    In file included from /php-5.6.21/ext/pdo_mysql/pdo_mysql.c:32:
    /php-5.6.21/ext/pdo_mysql/php_pdo_mysql_int.h:101: error: expected specifier-qualifier-list before ‘MYSQL’
    /php-5.6.21/ext/pdo_mysql/php_pdo_mysql_int.h:116: error: expected specifier-qualifier-list before ‘MYSQL_FIELD’
    /php-5.6.21/ext/pdo_mysql/php_pdo_mysql_int.h:121: error: expected specifier-qualifier-list before ‘MYSQL_RES’
    /php-5.6.21/ext/pdo_mysql/pdo_mysql.c:61:45: error: ext/mysqlnd/mysqlnd_reverse_api.h: No such file or directory
    /php-5.6.21/ext/pdo_mysql/pdo_mysql.c:62: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
    /php-5.6.21/ext/pdo_mysql/pdo_mysql.c:82: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘pdo_mysql_reverse_api’
    /php-5.6.21/ext/pdo_mysql/pdo_mysql.c: In function ‘zm_startup_pdo_mysql’:
    /php-5.6.21/ext/pdo_mysql/pdo_mysql.c:132: error: ‘pdo_mysql_reverse_api’ undeclared (first use in this function)
    /php-5.6.21/ext/pdo_mysql/pdo_mysql.c:132: error: (Each undeclared identifier is reported only once
    /php-5.6.21/ext/pdo_mysql/pdo_mysql.c:132: error: for each function it appears in.)
    make: *** [pdo_mysql.lo] Error 1
    
我找遍了所有我能找到的地方,检查了这里和服务器上类似的帖子。我没能找到一个明确的结论性答案来帮助我进一步调试。咨询的解决方案建议使用
yum install
(我不能)或重新安装所有内容(我真的不想再次经历整个过程…)

如果需要,这里是我使用上述方法安装的模块列表:

[PHP Modules]
Core
ctype
date
dom
ereg
fileinfo
filter
gd
hash
iconv
json
ldap
libxml
mbstring
oci8
pcre
PDO
PDO_OCI
pdo_sqlite
Phar
posix
Reflection
session
SimpleXML
SPL
sqlite3
standard
tokenizer
xdebug
xml
xmlreader
xmlwriter

[Zend Modules]
Xdebug
你能帮我弄清楚吗


编辑:
ext
mysqlnd
列出的目录:


您必须修改配置文件。路径编码不正确


将.h文件中的“ext/mysqlnd/”替换为“../../ext/mysqlnd/”。

不完全支持将捆绑扩展编译为独立扩展。但你应该能够解决这个问题

在PHP中使用MySQL模块有两种选择:使用libmysql或mysqlnd。有关背景信息,请参见和

默认情况下,构建系统假定您使用的是mysqlnd,但您的系统当前没有安装myslqnd。您有两个选择:

  • 首先安装mysqlnd,然后安装pdo_mysql
  • 使用libmysql
  • 对于1)您可以转到ext/myslqnd并在那里执行phpize、configure、make、make安装步骤。实际上,phpize可能会抱怨,那么您必须首先将其中的
    config9.m4
    重命名为
    config.m4
    。一旦安装了mysqlnd,您就可以转到pdo_mysql并按照您的尝试进行操作。它现在应该fid正确的标题

    对于2)您需要在系统上安装包含开发头的libmysql。然后可以使用
    --with-pdo-mysql=/usr
    选项运行configure,该选项告诉您在哪里可以找到libmysql

    一般来说,我建议使用方法1)使用mysqlnd


    补充: 在进行1)时,必须确保从php.ini加载mysqlnd和pdo_mysql,mysqlnd必须是第一个! 有点像

    extension=mysqlnd.so
    extension=pdo_mysql.so
    

    最后,php.ini可能会工作

    请在配置时尝试此操作


    ./configure--php-config=/path/to/your/php/bin/php-config--pdo-mysql=/path/to/your/mysql

    否!别这样!然后它可能会编译,但不会加载!你能再具体一点吗?你的意思是:
    ext/mysqlnd/mysqlnd.h
    ext/mysqlnd/mysqlnd\u libmysql\u compat.h
    ext/mysqlnd/mysqlnd\u debug.h
    ext/mysqlnd/mysqlnd\u reverse\u api.h
    ?如果是,我正在努力!请看我的答案options@johannes为了您的工作方式,F.Gran需要使用以下代码行修改配置文件:$PHP_OPENSSL=“yes”,否则,mysqlnd会抱怨在
    mysqlnd
    上找不到OpenSSL的evp.h库
    make
    ,只是抱怨说:
    make:**没有指定目标,也没有找到makefile。停止。
    。我应该在
    mysqlnd
    目录中编辑
    configure
    生成吗?我必须删除
    libmysql
    ,因为
    mariadb
    正在抱怨冲突。我现在正在尝试选项1),并将在整个过程中提供反馈!将行添加到
    php.ini
    phpize
    抱怨,我重命名了
    config9.m4
    。已到达
    make
    步骤,并收到以下消息:
    make:**未指定目标,也未找到makefile。停止。
    configure
    步骤以和错误结束:
    configure:error:找不到OpenSSL的
    。我在
    configure
    之后检查了
    mysqlnd
    目录,有三个文件名为
    Makefile
    Makefile.fragments
    Makefile.global
    Makefile.objects
    ,如前所述,所有这些都没有得到真正的支持。一个简单的修复方法可能是从配置[9]中删除与ssl相关的内容。m4并重新运行phpize。。。或者您可能会删除所有rpm安装的PHP,然后自己尝试完整的PHP构建(我不太了解mariadb,但他们也有自己的客户端库,可能选项2)我不需要自定义构建,只需要
    mysql
    pdo
    驱动程序。谢谢你的建议!仍然在寻找一种方法。。。