Установите PDO_OCI на PHP7

He,

Уже несколько дней пытаюсь установить PDO_OCI на PHP7 на новый сервер. Я когда-либо на другом сервере PDO_OCI, но на PHP 5.4, и все хорошо, не проблема с этой версией.

У меня есть сообщение:

:/home/pear/download/PDO_OCI-1.0# make
/bin/bash /home/pear/download/PDO_OCI-1.0/libtool --mode=compile cc -I -I. 
-I/home/pear/download/PDO_OCI-1.0 -DPHP_ATOM_INC 
-I/home/pear/download/PDO_OCI-1.0/include 
-I/home/pear/download/PDO_OCI-1.0/main 
-I/home/pear/download/PDO_OCI-1.0 
-I/usr/include/php/20151012 
-I/usr/include/php/20151012/main 
-I/usr/include/php/20151012/TSRM 
-I/usr/include/php/20151012/Zend 
-I/usr/include/php/20151012/ext 
-I/usr/include/php/20151012/ext/date/lib 
-I/usr/lib/oracle/instantclient/include/oracle/12.1/client  -DHAVE_CONFIG_H  -g -O2   -c 
/home/pear/download/PDO_OCI-1.0/oci_driver.c -o oci_driver.lo
libtool: compile:  cc -I -I. 
-I/home/pear/download/PDO_OCI-1.0 -DPHP_ATOM_INC 
-I/home/pear/download/PDO_OCI-1.0/include 
-I/home/pear/download/PDO_OCI-1.0/main 
-I/home/pear/download/PDO_OCI-1.0 
-I/usr/include/php/20151012 
-I/usr/include/php/20151012/main 
-I/usr/include/php/20151012/TSRM 
-I/usr/include/php/20151012/Zend 
-I/usr/include/php/20151012/ext 
-I/usr/include/php/20151012/ext/date/lib 
-I/usr/lib/oracle/instantclient/include/oracle/12.1/client -DHAVE_CONFIG_H -g -O2 -c 
/home/pear/download/PDO_OCI-1.0/oci_driver.c  -fPIC -DPIC -o .libs/oci_driver.o

/home/pear/download/PDO_OCI-1.0/oci_driver.c: In function 'pdo_oci_fetch_error_func':
/home/pear/download/PDO_OCI-1.0/oci_driver.c:51:3: error: 
too many arguments to function 'add_next_index_string' add_next_index_string(info, einfo->errmsg, 1);

In file included from /usr/include/php/20151012/main/php.h:39:0,
                 from /home/pear/download/PDO_OCI-1.0/oci_driver.c:25:
/usr/include/php/20151012/Zend/zend_API.h:432:14: note: declared here
 ZEND_API int add_next_index_string(zval *arg, const char *str);
              ^
/home/pear/download/PDO_OCI-1.0/oci_driver.c: In function 'oci_handle_preparer':
/home/pear/download/PDO_OCI-1.0/oci_driver.c:238:59: warning: passing argument 5 of 'pdo_parse_params' from incompatible pointer type
  ret = pdo_parse_params(stmt, (char*)sql, sql_len, &nsql, &nsql_len TSRMLS_CC);
                                                       ^
In file included from /home/pear/download/PDO_OCI-1.0/oci_driver.c:29:0:
/usr/include/php/20151012/ext/pdo/php_pdo_driver.h:678:13: note: expected 'size_t *' but argument is of type 'int *'
 PDO_API int pdo_parse_params(pdo_stmt_t *stmt, char *inquery, size_t inquery_len,
         ^
/home/pear/download/PDO_OCI-1.0/oci_driver.c: At top level:
/home/pear/download/PDO_OCI-1.0/oci_driver.c:411:2: warning: initialization from incompatible pointer type
  oci_handle_preparer,
 ^
/home/pear/download/PDO_OCI-1.0/oci_driver.c:411:2: warning: (near initialization for 'oci_methods.preparer')
/home/pear/download/PDO_OCI-1.0/oci_driver.c:412:2: warning: initialization from incompatible pointer type
  oci_handle_doer,
  ^
/home/pear/download/PDO_OCI-1.0/oci_driver.c:412:2: warning: (near initialization for 'oci_methods.doer')
/home/pear/download/PDO_OCI-1.0/oci_driver.c:413:2: warning: initialization from incompatible pointer type
  oci_handle_quoter,
  ^
/home/pear/download/PDO_OCI-1.0/oci_driver.c:413:2: warning: (near initialization for 'oci_methods.quoter')
Makefile:198: recipe for target 'oci_driver.lo' failed
make: *** [oci_driver.lo] Error 1

Моя конфигурация: Сервер Linux Система Linux 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt20-1+deb8u4 (2016-02-29) x86_64 PHP Версия PHP 7.0.4-1~dotdeb+8.1 Драйверы PDO mysql Поддержка OCI8 включена (работает).

Я прочитал, что PDO_OCI включен в PHP7 https://github.com/php/php-src/tree/PHP-7.0.7/ext/pdo_oci но как его активировать?

Мой код для PHP 5.4 не работает на этом сервере PHP7.

У кого-нибудь есть решение?

С уважением


person mogly    schedule 12.05.2016    source источник


Ответы (2)


Загрузите исходные файлы вашего PHP (получите URL из https://www.php.net/downloads , например https://www.php.net/distributions/php-7.4.16.tar.bz2):

PHP_VERSION=7.3.27 # Set to your PHP version

cd /tmp
sudo apt-get install php-dev -y
wget https://www.php.net/distributions/php-${PHP_VERSION}.tar.gz
tar xvfj php-${PHP_VERSION}.tar.bz2
rm php-${PHP_VERSION}.tar.bz2

Скопируйте pdo_oci в /tmp:

cp -r /tmp/php-${PHP_VERSION}/ext/pdo_oci /tmp
cd /tmp/pdo_oci

Плагин сборки:

sudo phpize
sudo ./configure --enable-option-checking=fatal # Optionally add more parameters
sudo make
sudo make install

Наконец, создайте и свяжите файлы:

sudo echo "extension=pdo_oci.so" > /etc/php/7.3/mods-available/pdo_oci.ini
sudo ln -s /etc/php/7.3/mods-available/pdo_oci.ini /etc/php/7.3/apache2/conf.d/20-pdo_oci.ini

Перезапустите апач2

person Daniel Cruz Santos    schedule 08.02.2018

Это расширение заброшено и не будет компилироваться. Почему? API PHP значительно изменился в версии 7; ошибка, которую вы видите, указывает на то, что сигнатуры внутренних функций изменились:

/home/pear/download/PDO_OCI-1.0/oci_driver.c: In function 'pdo_oci_fetch_error_func':
/home/pear/download/PDO_OCI-1.0/oci_driver.c:51:3: error: 
too many arguments to function 'add_next_index_string' add_next_index_string(info, einfo->errmsg, 1);

Как это исправить, зависит от того, как вы установили PHP. Я надеюсь, что вы скомпилировали его самостоятельно, так как вы делаете то же самое для расширений. Если это так, просто перекомпилируйте, используя --with-pdo-oci=DIR, где DIR — домашний каталог Oracle.

Если вы установили из пакета через apt, у вас есть несколько вариантов. 1) посмотрите, можете ли вы получить драйвер PDO-OCI таким же образом (не похоже, что он есть.) 2) удалите свои пакеты и сделайте все из исходников. 3) Попробуйте сторонний драйвер.

person miken32    schedule 12.05.2016
comment
У меня есть тест github.com/taq/pdooci, но мне нужно переписать много кода. Я могу подключиться и распечатать информацию с решением, но я не могу переписать весь свой код. Я думаю, что лучший способ для меня - установить PDO_OCI на версию 7 php. У кого-нибудь есть туто для этого? Я не видел его в Интернете. Кто-нибудь установил PDO_OCI на PHP7, и он работает? - person mogly; 13.05.2016