Скомпилируйте драйвер `mysql_pdo` на RHEL 6 (нет доступа в интернет, нет` yum install`)

У меня очень неприятная проблема с pdo_mysql,

Конфигурация:

  • RedHat Enterprise Linux 6 x64 (не подключен к интернету)
  • PHP 5.6.21
  • MariaDB 10.1.14

Вот что я сделал:

  • удалить по умолчанию mysql пакет и установил mariadb (все перечисленное здесь: http://ftp.ddg.lth.se/mariadb//mariadb-10.1.14/yum/rhel6-amd64/rpms/ кроме oqgraph-engine.rpm). Я был в состоянии запросить таблицы, поэтому я предполагаю, что установка в порядке.
  • при запуске веб-приложения я получил сообщение об ошибке could not find driver поэтому я попытался скомпилировать 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 каталоги перечислены:

введите описание изображения здесь
введите описание изображения здесь

1

Решение

То, что вы делаете, компилирующее расширение как отдельное, не полностью поддерживается. Но вы должны быть в состоянии обойти это.

Для использования модулей MySQL в PHP есть два варианта: либо использовать libmysql, либо mysqlnd. Увидеть http://php.net/manual/en/mysql.php а также http://php.net/mysqlnd для фона.

По умолчанию система сборки предполагает, что вы используете mysqlnd, но в вашей системе в настоящее время не установлено myslqnd. У вас есть два варианта:

  1. сначала установите mysqlnd, затем pdo_mysql
  2. использовать libmysql

Для 1) вы идете в ext / myslqnd и выполняете там шаги phpize, configure, make, make install. Когда-нибудь phpize может пожаловаться, тогда вам придется переименовать config9.m4 там, чтобы config.m4 первый. После установки mysqlnd вы можете перейти к pdo_mysql и сделать то, что вы пытались. Теперь следует найти правильные заголовки.

Для 2) вам нужен libmysql, включая заголовки разработки, установленные в вашей системе. Затем вы можете запустить конфигурацию, используя --with-pdo-mysql=/usr опция, которая говорит, где найти libmysql.

В общем, я бы предложил использовать mysqlnd, используя подход 1).


Дополнение:
При переходе к 1) вы должны убедиться, что mysqlnd и pdo_mysql загружены из вашего php.ini, а mysqlnd должен быть первым!
Так что-то вроде

extension=mysqlnd.so
extension=pdo_mysql.so

в конце ваш php.ini может работать

1

Другие решения

Вы должны изменить файл конфигурации. Пути закодированы неправильно.

Замените ‘ext / mysqlnd /’ на ‘../../ext/mysqlnd/’ в файлах .h.

1

пожалуйста, попробуйте это при настройке.

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

0
По вопросам рекламы [email protected]