Установка драйвера Php PDO OCI с использованием pecl

Я пытаюсь установить драйвер PDO для OCI.

При поиске в Google pdo_oci я нахожу следующий URL:

https://pecl.php.net/package/PDO_OCI

Он отображает это сообщение в верхней части страницы:

Этот пакет больше не поддерживается и был заменен. Пакет перемещен на канал http://www.php.net/pdo_oci, пакет ext/pdo_oci.

Что означает это сообщение, как добавить этот канал с помощью pecl?

Я попытался добавить этот канал с помощью pear channel-discover php.net/pdo_oci, но, похоже, это не сработало. Я также не могу найти файл channel.xml для php.net/pdo_oci, поэтому я могу попробовать pear channel-add channel.xml.


person Zamicol    schedule 02.06.2015    source источник
comment
Есть несколько вариантов; чтобы дать полезный ответ, было бы неплохо узнать больше о вашей установке PHP. Вы использовали готовый пакет (например, в Debian, apt-get install php5…) или компилировали PHP самостоятельно?   -  person salathe    schedule 03.06.2015
comment
Использование RHEL6 с репозиториями Remi. 2.6.32-504.3.3.el6.x86_64 #1 SMP Пт, 12 декабря, 16:05:43 EST 2014 x86_64   -  person Zamicol    schedule 18.06.2015


Ответы (2)


РЕДАКТИРОВАТЬ

Если у вас уже установлен php (например, из репозитория), вы можете скомпилировать только PDO_OCI из исходного кода PHP (вам необходимо установить InstantClient)

Внутри папки pdo_oci выполните следующие команды:

$ phpize  
$ ./configure --with-pdo-oci=instantclient,/usr,12.1  
$ make && make install  
$ echo "extension=pdo_oci.so" > /etc/php.d/pdo_oci.ini  
$ service httpd restart

Этот метод создаст только pdo_oci.so в папке расширений PHP, не нужно перекомпилировать весь PHP. Вы можете сделать это с версиями PHP репозиториев, и можете сделать это с любым расширением внутри папки ext в исходном коде PHP.


Во-первых, извините за мой плохой английский.

У меня был тот же вопрос, но я уже мог решить.

Как говорится в сообщении, это расширение PECL устарело. Вам нужно скомпилировать PHP из исходного кода с PDO_OCI, включенным в исходный код PHP.

Я сделал это в CentOS 6.6 с установленными MySQL, Apache и InstantClient:

Установите зависимости, такие как

curl-devel
freetype-devel
libc-client
libc-client-devel
libjpeg-devel
libmcrypt-devel
libpng-devel
libtool-ltdl-devel
libxml2-devel
libXpm-devel
libc-client
libc-client-devel
libmcrypt-devel
libpng-devel
db4-devel

...And other prompted dependencies in the ./configure 
(always install the *-devel package too)

Загрузить исходный код PHP

$ wget http://ar2.php.net/get/php-5.6.10.tar.gz/from/this/mirror  

Разархивируйте загруженный файл и перейдите в папку

$ tar -xzf php-5.6.10.tar.gz  
$ cd php-5.6.10  

Выполните команду configure с нужными параметрами (мой пример ниже)

./configure \   
--prefix=/usr \  
--sysconfdir=/etc \  
--localstatedir=/var \  
--datadir=/usr/share/php \  
--mandir=/usr/share/man \  
--with-config-file-path=/etc \  
--with-config-file-scan-dir=/etc/php.d \  
--with-zlib \  
--enable-bcmath \  
--with-bz2 \  
--enable-calendar \  
--with-gdbm \  
--with-gmp \  
--enable-ftp \  
--with-gettext \  
--enable-mbstring \  
--with-readline \  
--with-apxs2 \  
--with-pdo-oci=instantclient,/usr,12.1 \  
--enable-dba=shared \  
--with-pdo-mysql --with-mysql-sock=/var/mysql/mysql.sock \  
--with-pdo-pgsql \ 
--with-mcrypt \  
--with-mhash \  
--with-curl \  
--with-gd \
--enable-gd-native-ttf \
--with-jpeg-dir=/usr \
--with-png-dir=/usr \
--with-zlib-dir=/usr \
--with-xpm-dir=/usr \
--with-vpx-dir=/usr \
--with-freetype-dir=/usr \
--with-t1lib=/usr \
--with-libxml-dir=/usr \
--with-mysql=mysqlnd \
--with-mysqli=mysqlnd \  
--enable-soap \
--with-xmlrpc \
--with-xsl \
--with-tidy=/usr \
--enable-pcntl \
--enable-sysvshm \
--enable-sysvmsg \
--enable-shmop

Если вы видите какую-либо ошибку при выполнении этой команды, возможно, вам не хватает какой-то зависимости (возможно, зависимости, о которой я не упомянул).

После запуска команды configure без ошибок

$ make && make install  

На данный момент PHP уже установлен. Для подтверждения используйте следующую команду:

$ php -v  

Но прежде чем закончить, нам нужно внести некоторые коррективы...

Скопируйте php.ini в правильный каталог

### If you're on a development server    
$ cp php.ini-development /etc/php.ini

### If you're on a production server
$ cp php.ini-production /etc/php.ini

Открыть файл конфигурации Apache для редактирования

$ vi /etc/httpd/conf/httpd.conf

Добавьте следующие строки, чтобы Apache интерпретировал PHP (игнорируйте, если уже есть)

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps   

Перезапустите Apache

$ service httpd restart
person jflizandro    schedule 29.06.2015
comment
Отредактировано, чтобы включить больше деталей - person jflizandro; 02.07.2015
comment
спасибо за это, у меня сработало (только первый бит, до первого разделителя) - person Rob G; 20.06.2016
comment
В некоторых дистрибутивах может быть ошибка, приводящая к Cannot find php_pdo_driver.h при настройке. (bugs.php.net/bug.php?id=59450) Темп. обходной путь: создайте символическую ссылку перед настройкой: sudo ln -s /usr/include/php5/ /usr/include/php - person Marki; 26.11.2017
comment
Большое спасибо, чувак, ты спас мой день! Работает на Ubuntu 18.10 с php7.2-fpm :) - person Victor Parmar; 04.03.2019

После установки драйверов Oracle вы можете использовать этот этот класс здесь, а затем вам просто нужно изменить подключение к PDO от чего-то вроде

$pdo = new PDO("oci:dbname=mydatabase;charset=utf8", "user", "password");

to

$pdo = new PDOOCI\PDO("mydatabase", "user", "password");

Остальное должно работать точно так же, как если бы вы использовали объект PDO.

person taq    schedule 24.06.2015