Il existe une multitude de moyens pour développer des applications PHP pour Oracle, si vous souhaitez ensuite les mettre à disposition facilement c’est une autre histoire, à moins bien sûr de les livrer sous forme de machines virtuelle.
Cet article décrit pas à pas la démarche qui vous permettra de configurer une machine virtuelle Centos7 contenant un serveur Apache/PHP capable de se connecter à une base Oracle distante.
La version de machine virtuelle sur laquelle je travaille au départ est une installation Centos7 minimale à laquelle j’ai ajouté les outils et bibliothèques de développement. Les ports réseaux de la VM sont configuré en mode bridge sur la carte réseau que j’utilise et le mode DHCP a été choisi pour l’attribution des adresses IP.
Toutes les instructions passées le sont par l’utilisateur root.
Afin de me faciliter la tâche je me suis installé des outils de base qui ne sont pas installés par défaut, net-tools (ifconfig, netstat …) et vim.
yum install net-tools yum install vim
Installation du serveur apache et de PHP (les modules PHP-devel et PHP-pear permettent l’utilisation de PECL qui est un gestionnaire de package pour PHP):
yum install httpd yum install php yum install php-devel yum install php-pear
Afin de se connecter à Oracle et de tester j’installe l’instant client oracle 11g1, les bibliothèques de développement correspondantes dont les paquets rpm peuvent être téléchargés depuis le site d’oracle ainsi que SQL*plus pour effectuer des tests unitaires. après les avoir chargés sur ma VM je les installe avec les commandes suivantes :
yum localinstall oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm yum localinstall oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm yum localinstall oracle-instantclient11.2-sqlplus-11.2.0.4.0-1.x86_64.rpm
J’informe le système afin de lui indiquer où se trouvent les bibliothèques Oracle
export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib cd /etc/ld.so.conf.d/ vi instantclient-11g.x86_64.conf
Le contenu du fichier instantclient-11g.x86_64.conf est le suivant après édition :
/usr/lib/oracle/11.2/client64/lib /usr/lib/oracle/11.2/client64
J’utilise ensuite PECL pour installer la bibliothèque OCI8 pour PHP
pecl install oci8
Je configure ensuite PHP pour qu’il puisse travailler avec le module OCI8
cd /etc/php.d vim oci8.ini
Le contenu du fichier oci8.ini est alors le suivant
; Enable oci8 extension module extension=oci8.so
Et je configure le comportement par défaut OCI8.
cd /etc vim php.ini
La section concerant OCI8 du fichier php.ini devient alors la suivante (il s’agit là de mon choix de configuration):
[OCI8] ; credentials (OCI_SYSOPER, OCI_SYSDBA) ; http://php.net/oci8.privileged-connect oci8.privileged_connect = Off ; Connection: The maximum number of persistent OCI8 connections per ; http://php.net/oci8.max-persistent oci8.max_persistent = -1 ; http://php.net/oci8.persistent-timeout oci8.persistent_timeout = -1 ; ping during oci_pconnect() to check the connection validity. When ; set to 0, each oci_pconnect() will cause a ping. Using -1 disables ; http://php.net/oci8.ping-interval oci8.ping_interval = 60 ;oci8.connection_class = oci8.events = Off ; http://php.net/oci8.statement-cache-size oci8.statement_cache_size = 256 ; http://php.net/oci8.default-prefetch oci8.default_prefetch = 1024 ; Compatibility. Using On means oci_close() will not close ; oci_connect() and oci_new_connect() connections. ; http://php.net/oci8.old-oci-close-semantics oci8.old_oci_close_semantics = Off
Je configure ensuite SELINUX afin que le serveur http soit autorisé à émettre une connexion externe d’une part et de l’autoriser à écrire dans un répertoire (qui doit exister) en l’occurrence /var/www/html/config
setsebool -P httpd_can_network_connect on chown -R apache /var/www/* chcon -R -t httpd_sys_content_rw_t /var/www/html/config
J’ouvre ensuite le firewall
firewall-cmd --zone=public --add-port=http/tcp firewall-cmd --zone=public --add-port=http/tcp --permanent
Et je lance mon serveur httpd
systemctl start httpd.service
Je dois pouvoir vous connecter au port 80 de mon serveur, dont j’ai eu l’adresse en tapant, au choix ifconfig ou ip addr sur votre VM depuis un serveur distant.
- Au moment où l’article est écrit, c’est la version 5.4.16 de PHP qui est livrée en paquet rpm, elle ne fonctionne pas avec l’instant client 12c mais fonctionne bien avec l’instant client 11g.