oci_connect() ne fonctionne qu'à partir de la ligne de commande
OK, donc j'ai ce problème terrible avec bec, apache, php et suse. Tout d'abord, les versions:
PHP 5.3.15 (cli)
Apache/2.2.22 (Linux/SUSE)
OCI8 1.4.9
SUSE 12.2 32 bit
Oracle client 10.2.0.4
Problème
J'ai vraiment simple fichier php:
<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');
oci_connect('user', 'passwd', 'host/sid');
?>
Quand je le lance en ligne de commande, il exécute amende:
machine:~ # php oci.php
machine:~ #
Mais lorsque je l'exécute dans le navigateur, il me donne:
Warning: oci_connect() [function.oci-connect]: OCIEnvNlsCreate() failed. There is something wrong with your system - please check that ORACLE_HOME and LD_LIBRARY_PATH are set and point to the right directories
De configuration d'Apache
J'ai été aux prises avec ce problème pour un certain temps maintenant, et je suis sûr que mon apache configuration est correcte.
Je exporter toutes les variables requises avant tout processus apache est lancé - je ajouté
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/oracle/home/lib; export LD_LIBRARY_PATH
ORACLE_HOME=/path/to/oracle/home; export ORACLE_HOME
TNS_ADMIN=/path/to/oracle/home/network/admin; export TNS_ADMIN
NLS_LANG=POLISH_POLAND.EE8MSWIN1250; export NLS_LANG
au début de /etc/init.d/apache2
script (démarrage d'apache par /etc/init.d/apache2 start
).
Apache s'exécute à partir de wwwrun
de l'utilisateur, qui est en oinstall
et dba
groupes:
machine:~ # cat /etc/apache2/uid.conf
User wwwrun
Group www
machine:~ # id wwwrun
uid=30(wwwrun) gid=8(www) groups=8(www),113(oinstall),114(dba)
machine:~ # l $ORACLE_HOME
total 216
drwxr-xr-x 48 oracle oinstall 4096 Jan 25 17:07 ./
drwxrwxr-x 3 oracle oinstall 4096 Jan 25 17:01 ../
...
machine:~ #
Problème Possible
Je n'ai pas toutes les variables d'environnement dans Environment
section dans phpinfo();
de sortie - ce que cela pourrait être le problème? Si oui, comment puis-je résoudre ce problème? Est-il une sorte de problème de sécurité? J'ai lu sur des problèmes comme ça avec SELinux est activé, mais je ne l'ai pas, mon pare-feu est désactivé.
Solution?
Toute aide serait grandement appréciée!
Vous devez vous connecter pour publier un commentaire.
Problème résolu! Grâce à ces (Réglage de l'Oracle de l'Environnement section) des instructions et ken_yap réponse à cette fil.
De mettre des variables dans le Environnement section vous suffit de les ajouter dans
/etc/sysconfig/apache2
fichier:LD_LIBRARY_PATH=/path/to/oracle/lib
./etc/sysconfig/httpd
Une autre solution ( qui n'ont pas besoin d'un accès root ) est d'ajouter ces lignes dans la page php:
Ce qui concerne
Pour les utilisateurs de Debian - modifier le fichier
sur la fin du fichier, ajoutez un lien vers votre BEC de la bibliothèque - par exemple.
Une autre approche pour Centos 7 avec
nginx
Fait!