Connexion à Oracle [TPI PHP+Oracle] - PHP - Programmation
Marsh Posté le 06-04-2004 à 16:06:14
alors suivant les conseils déjà obtenus, j'ai ajouté l'extension pour la dll oci dans le php.ini.
Ensuite j'ai réalisé un test pour savoir si des fonctions spécifiques à ces dll étaient reconnues. niet.
pour terminer il semblerait que je doive installer un client oracle (logique ) vu que la base oracle n'est pas chez moi.
de retour jeudi sur le projet
Marsh Posté le 06-04-2004 à 16:47:49
tu as redémarré apache après avoir modifié le php.ini?
sur mon projet, j'avais utilisé les fonctions oci, et ça roulez
edit: le petit topic util: http://forum.hardware.fr/hardwaref [...] 8159-1.htm
Marsh Posté le 06-04-2004 à 19:35:26
ouais je l'avais vu merci
en fait effectivement je n'avais pas redémarré apache (jetez-moi des cailloux ) et j'ai des problèmes de location de dll.
j'ai du partir à la bourre et j'ai pas pu tout regardé en détail, je m'y remets jeudi (autre projet pour demain)
Marsh Posté le 06-04-2004 à 19:38:14
urd-sama a écrit : ouais je l'avais vu merci |
si il n'y a que ça pour te faire plaisir:
Marsh Posté le 13-04-2004 à 10:25:52
de retour sur le projet.
Alors j'ai enfin compris que en fait le php.ini appelait des librairies oracles situées dans le répertoire php qui elles-même appelaient des librairies utilisées par mon client oracle (si c'est faux dites-le moi).
Ayant compris ceci, j'ai pu modifier mes variables d'environnement (PATH) pour qu'il aille à la bonne place tout seul.
La librairie oracle (objets ora_xxx) fonctionne donc apparemment sans autre problème (j'ai pu me connecter sur ma base \o/).
Maintenant, autre problème avec l'ajout de la librairie oci (car elle m'a l'air bien plus pratique à utiliser que la ora). First il me fait une erreur comme quoi il me trouve pas la dll dans le répertoire extension de php, malgré que je l'ai bien copié et que j'aie la bonne version.
secondo, j'ai une autre erreur, à savoir celle-ci:
dois-je comprendre que je ne peux pas y faire grand-chose et que cette dll (que je ne peux pas modifier car sur le share spécifique des librairies oracle qu'uitlise mon client) ne contient pas ce qu'il me faut?
y'a-t-il une autre solution que de me contenter de la librairie oracle?
merci
Marsh Posté le 13-04-2004 à 13:36:39
tu as désactivé la dll des ora*? peut-être qu'il aime pas les deux en même temps
Marsh Posté le 13-04-2004 à 13:45:10
bonne idée, mais apparemment non
je pense que c'est plutot un problème de version, mais je ne sais pas encore quelle version exacte j'aurai pour mon travail de diplome
Marsh Posté le 13-04-2004 à 16:21:15
emploie les fonctions ora_*. Les OCI sont clairement pour Oracle 8
Marsh Posté le 13-04-2004 à 17:23:39
à l'époque (ça fait un peu plus d'un an maintenant), tout ce que j'ai pu lire conseillait les fonctions oci pour 9i
Marsh Posté le 13-04-2004 à 17:28:04
bin avec "php_oci8.dll" comme nom de fichier, j'avais conclu que cette API visait Oracle 8 en priorité
Marsh Posté le 13-04-2004 à 17:49:27
perso j'ai lu que c'était pour les versions 7 et 8, faut que je cherche si c'est pour la 9
effectivement j'ai toujours la ora, si jamais j'utiliserai celle-là mais à première vue la oci a l'air moins chiante à utiliser
Marsh Posté le 13-04-2004 à 17:55:42
urd-sama a écrit : perso j'ai lu que c'était pour les versions 7 et 8, faut que je cherche si c'est pour la 9 |
sltm
perso, je traine quelque peu sur le forum Oracle de developpez.net...
ce n'est pas pour faire de la pub, mais, moi, ils m'ont bien renseigné.
bon courage
Marsh Posté le 13-04-2004 à 18:08:20
merci pour le tuyau
Marsh Posté le 13-04-2004 à 18:42:21
urd-sama a écrit : perso j'ai lu que c'était pour les versions 7 et 8, faut que je cherche si c'est pour la 9 |
j'avais lu oci -> 8 et 9, mais ora -> 7
c'est un peu vieux dans ma tête, pê que je me trompe
il me semble que Mara's Dad a bossé sur PHP/Oracle, et en général, il est plutôt de bon conseil
Marsh Posté le 13-04-2004 à 20:16:23
OCI contient plus de fonctions, et marche tout aussi bien d'un client 9 vers un serveur 8 que d'un client 9 vers un serveur 9 ...
Marsh Posté le 13-04-2004 à 20:54:43
dropsy a écrit : |
j'ai peut-etre confondu moi aussi
Marsh Posté le 15-04-2004 à 07:59:16
good news!
Ce matin en startant mon apache j'ai remarqué qu'il me faisait pas d'erreur, premier
je vais voir ma page et je constate qu'il comprendre mes lib oci, deuxième
j'essaye de piger si j'avais peut-etre mal restarté mon apache, mais non, vu que j'ai fais sur plusieurs jours avec assez de restart de mon pc pour être sure , troisième
donc deux solutions, ou la dll sur le serveur oracle a changé (peu propable) ou alors cela provient d'un mix à la con (genre un script avec ora + oci + tel manip dans php.ini = BUMP).
Bref, le problème avec l'oci semble ok pour l'instant, le blème c'est que je ne sais pas pourquoi ni comment
Marsh Posté le 15-04-2004 à 08:02:33
t'auras la réponse en le réinstallant
Marsh Posté le 15-04-2004 à 08:21:17
non mais sérieusement, t'as intérêt à t'assurer que ce n'est pas le fruit du hasard sinon tu risques de mauvaises surprises au moment du déploiement
Marsh Posté le 15-04-2004 à 08:22:39
ouais je sais bien, et c'est ca qui m'emmerde
edit: enfin bon, je le déploie pas donc le problème n'est pas vraiment là
Marsh Posté le 15-04-2004 à 10:52:47
urd-sama a écrit : ouais je sais bien, et c'est ca qui m'emmerde |
d'un autre côté rien te dit que demain matin ton erreur ne sera pas revenue
Marsh Posté le 15-04-2004 à 10:57:40
dropsy a écrit : |
tais-toi donc
Marsh Posté le 21-04-2004 à 12:34:29
petit up concernant l'avancée de ce travail de diplome. ma librairie oci fonctionne toujours, j'ai donc fait quelques tests de connexion, requêtes. d'ailleurs pour les requêtes rien de plus simple, pour les intéressés:
Code :
|
on peut donc passer sans problèmes tout type de requête (il me semble qu'avec la ora c'était beaucoup plus compliqué).
J'ai également fait quelques tests et appris ce qu'étaient les dblink, views, users, etc sous oracle. Pas de problèmes apparents et je pense avoir pigé le truc.
sinon je fais encore le pré-acquis cette semaine, et la semaine prochaine je commence le travail à proprement dit, qui durement 3-4 semaines (60 heures réelles). Je vous tiens au courant
Marsh Posté le 21-04-2004 à 15:14:56
allez, une petite variante.
Avec mon client oracle (toad) je fais la requête de création de vue suivante:
Code :
|
tout fonctionne à merveille. Je transpose ceci dans le code, de cette manière:
Code :
|
et là, j'ai une erreur ORA-00911: invalid character
j'ai regardé la doc, et cette dernière dit que cette erreur intervient lorsqu'il y a des caractères spéciaux dans les noms, et que l'on a pas mis entre "". vu que ce n'est pas le cas pour cette requête je cherche à savoir pourquoi il ne veut pas me la faire.
Marsh Posté le 21-04-2004 à 15:30:22
je vais peut-être dire une connerie (j'ai jamais utilisé les vues), mais les requêtes ne sont pas identiques
il y a "(TEST)" en plus
Marsh Posté le 21-04-2004 à 15:32:57
j'ai bien très bien compris ce que tu as voulu dire, mais si je mets :
OR REPLACE FORCE VIEW SCOTT.test "(TEST)" AS SELECT TEST FROM HALLO
il me fait une erreur sous php et toad: missing keywords
Marsh Posté le 21-04-2004 à 15:42:26
urd-sama a écrit : j'ai bien très bien compris ce que tu as voulu dire, mais si je mets : |
bonjour,
je plussote ce que dit dropsy, tes 2 requetes ne sont pas identiques.
autre chose, tu as mis le point-virgule à l'intérieur de ton expression alors qu'il n'y était pas dans l'exemple précédent
Code :
|
ça pourrait venir de là aussi ?
P.S.: je n'y connais rien en php...
bon courage
Marsh Posté le 21-04-2004 à 15:44:43
oui mais c'est le but qu'elle ne soit pas identiques, ou alors je ne peux pas utiliser le ociparse pour passer une autre requête?
purée, en testant "pour de rire" en enlevant le point-virgule ca a l'air de fonctionner
script:
Code :
|
Marsh Posté le 21-04-2004 à 15:45:42
curieux on
ça sers à quoi le (test)? c'est pour faire un alias ?
curieux off
merci
Marsh Posté le 21-04-2004 à 15:47:01
je sais pas exactement, c'est les colonnes sélectionnées dans la vue apparemment (si je les mets pas ca va aussi)
pour info, doc sur la syntaxe des vues:
http://www.laltruiste.com/document [...] eview.html
Marsh Posté le 21-04-2004 à 15:48:55
ah ok,
dsl, j'étais à côté de la plaque, c'est en effet la colonne de ta vue...
merci
---->[]
Marsh Posté le 21-04-2004 à 16:44:08
urd-sama a écrit : j'ai bien très bien compris ce que tu as voulu dire, mais si je mets : |
bah je disais juste que la requête que tu passais à TOAD n'était pas la même que celle que tu faisais en php
et maintenant que tu le dis, c'est vrai que je ne met jamais le ; à la fin de mes requêtes, mais le message d'erreur n'était pas des plus explicites
Marsh Posté le 21-04-2004 à 17:20:02
clair, en plus je pensais que c'était totalement facultatif dans ce cas-là
c'est bon à savoir en tout cas
Marsh Posté le 26-04-2004 à 14:59:07
voilà je recois mon cahier des charges et débute le travail demain matin.
j'ai pu faire mes tests oracle ainsi qu'une ébauche d'interface html et de cas d'utilisation.
mon oci fonctionne toujours, espérons que ca dure
Marsh Posté le 26-04-2004 à 15:21:36
copie tes fichiers de configuration de côté (httpd.conf et php.ini), on sait jamais
Marsh Posté le 06-04-2004 à 14:59:26
Bonjour
Je vais bientôt devoir réaliser un travail de diplôme, qui portera sur la connexion sur plusieurs bases de données oracle à partir de php.
Je n'ai pas encore la donnée définitive, je la posterai dès que possible. Durant ce travail de diplome, j'ai le droit de demander de l'aide ou je veux, mais j'aimerais mieux des indices que des solutions toute faite (car je devrai défendre mon truc lors d'une présentation et tout le tralala).
--------------------------------------------------------
Travail fourni (mis à jour régulièrement)
1. Donnée du projet
Sujet :
Le travail consiste à élaborer une application Web nommée O'Viewer. Cette dernière permettra à un utilisateur d'accéder librement à certaines parties du dictionnaire Oracle.
Pré-acquis :
Avoir des notions de PHP, installé Apache, PHP, et déjà interfacé une base de données Oracle.
Environnement de développement :
Un PC en configuration standard de <entreprise>, WIN2000, EasyPHP.
Exigences fonctionnelles :
L'administrateur de l'application pourra, après identification:
- Ajouter / Supprimer des requêtes (sur le dictionnaire Oracle) qui seront mises à disposition des utilisateurs.
- Ajouter / Supprimer l'accès à une base de données pour les utilisateurs.
- Tester le fonctionnement d'une requête mise à disposition d'un utilisateur.
L'utilisateur pourra librement et sans identification, accéder à toutes les requêtes / instances définies par l'administrateur. Le résultat sera donné sous forme d'un tableau.
Il faudra également mettre en place, au niveau Oracle, la structure et les objets permettant de satisfaire au concept de sécurité décrit plus loin.
Exigences de l'interface utilisateur :
Le résultat des requêtes donné sous forme de tableau sera complètement dynamique, puisque les colonnes correspondantes aux requêtes ne seront pas connues à l'avance.
Les bases de données à disposition ainsi que les requêtes disponibles seront présentées à l'utilisateur sous forme de listes déroulantes. Une seule base et une seule requête pourront être choisies à la fois.
Exigences de qualité :
Afin que l?intégration de l?application O'Viewer dans un site existant soit facile, toutes les mises en forme et mises en pages doivent être réalisées dans un fichier CSS.
Le rapport devra décrire et expliquer brièvement le concept de sécurité (fonctionnement DB-link privé / vue)
Concept de sécurité :
- On distingue deux catégories de base de données : La base d?entrée qui est le point d?entré du système, et les bases de travail, sur lesquelles les utilisateurs veulent avoir les informations du dictionnaire.
- L?utilisateur générique OV_USER et l?administrateur OV_ADMIN ne se connectent, via l?application, que sur la base d?entrée, prévue à cet effet. C?est uniquement sur cette base que l?administrateur OV_ADMIN pourra créer des objets.
- Les bases de travail sont reliées à la base d?entrée par des db-links privés appartenant à OV_ADMIN.
- Seul l?administrateur a les droits de connexion, et de consultation du dictionnaire, sur les bases de travail.
- L?utilisateur générique OV_USER ne pourra consulter les bases de travail qu?au travers de vues, mises à disposition par OV_ADMIN sur la base d?entrée.
- Lors de la mise à disposition d'une nouvelle base de données, il faudra manuellement sur celle-ci créer le user OV_ADMIN et lui donner les droits nécessaires. (Niveau DBA)
2. Planning du projet
3. Journal de travail
Je mets dans cette partie tout ce que j'ai fais, les problèmes rencontrés, l'aide recue, etc.
4. Réalisation du projet
Le projet a été séparé en différentes phases, s?inspirant de la méthodologie de travail RUP. Ces différentes phases décrivent une partie du projet. Le détail des phases sera expliqué dans les points ci-dessous, mais voici tout d?abord un résumé succinct de ces différentes phases, dans le cadre de ce projet :
Initialisation : Définit « ce que l?on va réaliser »
Elaboration : Définit « comment va-t-on le réaliser »
Construction : La réalisation proprement dite (code)
Transition : Documentation technique et utilisateur en vue du déploiement
4.1. Initialisation
Cette phase a été réalisée en pré acquis du projet. (à rédiger)
4.2. Elaboration
4.2.1. Architecture logicielle et matérielle
Cette dernière a été définie dans le cahier des charges par le supérieur professionnel. L?application O?Viewer réalisée en PHP communiquera avec la base d?entrée par l?intermédiaire des utilisateurs OV_ADMIN et OV_USER. Ces derniers pourront accéder aux bases de travail par l?intermédiaire de vues et de DB_LINK. Ce processus sera plus amplement expliqué dans le chapitre sur les concepts de sécurité.
Dans le cadre du projet, l?application O?Viewer et la base d?entrée se trouvent sur deux serveurs différents. Les bases de travail peuvent être sur le serveur de la base d?entrée ou d?autres serveurs.
4.2.2. Acteurs
Pour ce projet nous aurons trois acteurs, l?utilisateur normal, l?utilisateur administrateur et le DBA.
Utilisateur normal :
? Accès au formulaire des requêtes sur les différentes instances
? Exécution d?une requête sur une instance choisie
? Accès au résultat d?une requête
Utilisateur administrateur :
? Mêmes actions que l?utilisateur normal
? Ajout/suppression de requêtes sur chaque instance
? Ajout/suppression d?accès à une base de données
? Création d?utilisateur sur une instance
DBA (DataBase Administrator)
? Créé les utilisateurs sur les bases de travail
4.2.3. vue d'ensemble des cas d'utilisation
4.2.4. Détails des cas d?utilisation
UC#1 ? choixRequete
Description Accès aux formulaires des requêtes sur les différences instances
Acteur(s) abilité(s) Normal, administrateur
Pré-conditions Ouverture de l?interface web
Détails Page par défaut de l?application web
Exceptions Aucune
Notes -
Variantes -
UC#2 - executionRequete
Description Exécution d?une requête sur les différentes instances proposées
Acteur(s) abilité(s) Normal, administrateur
Pré-conditions UC#1
Détails ? Choisir une instance dans le menu déroulant
? Cliquer sur le bouton Suivant
? Choisir une requête dans le menu déroulant
? Cliquer sur le bouton exécuter
Exceptions Message d?erreur si l?instance ou la requête n?est pas sélectionnée
Message d?erreur si l?instance n?est pas disponible
Message d?erreur si la requête n?est pas réalisable
Message d?avertissement si aucune instance n?est disponible
Message d?avertissement si aucune requête n?est disponible
Notes -
Variantes -
UC#3 ? resultatRequete
Description Accès au résultat d?une requête
Acteur(s) abilité(s) Normal, administrateur
Pré-conditions UC#1, UC#2
Détails Le résultat de la requête est disponible sous forme de tableau dynamique
Exceptions Aucune
Notes -
Variantes Pour l?administrateur, le chemin suivant peut être employé :
? UC#1
? UC#4
? Cliquer sur une instance
? Cliquer sur le bouton Exécuter correspondant à la requête
UC#4 ? login
Description Login administrateur
Acteur(s) abilité(s) Administrateur
Pré-conditions UC#1
Détails ? Entrer le nom d?utilisateur
? Entrer le mot de passe
? Cliquer sur le bouton Valider
? Un nouveau menu apparaît
Exceptions Message d?erreur si le nom d?utilisateur ou le mot de passe n?est pas valide
Notes -
Variantes -
UC#5 ? ajoutInstance
Description Ajout d?une instance
Acteur(s) abilité(s) Administrateur
Pré-conditions UC#4, UC#9
Détails ? Entrer le nom de l?instance à ajouter
? Cliquer sur le bouton Ajouter
Exceptions Message d?erreur si le nom d?instance contient des caractères non alpha-numériques
Notes -
Variantes -
UC#6 ? suppressionInstance
Description Suppression d?une instance
Acteur(s) abilité(s) Administrateur
Pré-conditions UC#4
Détails ? Cliquer sur le bouton Supprimer correspondant à l?instance
Exceptions Avertissement si aucune base n?est disponible
Notes Le UC#9 doit être réalisé à la suite de ce cas d?utilisation
Variantes -
UC#7 ? ajoutRequete
Description Ajout d?une requête pour une instance
Acteur(s) abilité(s) Administrateur
Pré-conditions UC#4
Détails ? Cliquer sur l?instance où la requête sera ajoutée
? Entrer la requête
? Cliquer sur le bouton Valider
Exceptions Message d?erreur si la requête est invalide
Notes -
Variantes -
UC#8 ? suppressionRequete
Description Ajout d?une requête pour une instance
Acteur(s) abilité(s) Administrateur
Pré-conditions UC#4
Détails ? Cliquer sur l?instance où la requête sera supprimée
? Cliquer sur le bouton Supprimer correspondant à l?instance
Exceptions Aucune
Notes -
Variantes -
UC#9 ? ajoutsupprUser
Description Ajout ou suppression de l?utilisateur OV_ADMIN sur une base de travail
Acteur(s) abilité(s) DBA
Pré-conditions Ouverture du client Oracle
Détails ? Réaliser la requête d?ajout ou de suppression de l?utilisateur
? Si ajout, donner les droits à l?utilisateur
Exceptions Aucune
Notes -
Variantes -
4.2.5. Modèle des données
Deux variantes se sont présentées concernant le modèle des données. La première était de ne pas réaliser de tables et d?afficher les vues et instances disponibles d?après les vues du dictionnaire d?Oracle (all_db_links et all_views). La deuxième de créer une ou plusieurs tables contenant ces informations.
La première solution présentait deux problèmes. Lorsque l?utilisateur administrateur créé une instance, le DB-LINK va être créé puis testé, et s?il ne fonctionne pas (dans le cas ou l?utilisateur n?a pas été créé sur la base de travail), il sera supprimé. Si l?utilisateur normal arrive au moment où le DB-LINK est créé mais non valide, il pourra tout de même l?utiliser et ceci amènera un message d?erreur. Le deuxième problème était qu?il aurait été plus convivial pour l?utilisateur normal de voir un titre des requêtes lors de la sélection (« Sélection des vues DBA » au lieu de la requête SQL correspondante par exemple). Cette information n?étant pas stockée dans le dictionnaire, il fallait l?entreposer autre part.
Pour ces raisons je me suis donc orientée vers la première solution, en créant deux tables. Voici le modèle des données :
Notons que ces tables seront présentes sur le base d?entrée et créée par l?utilisateur OV_ADMIN. Les bases de travail ne contiendront pas de données relatives à ce projet.
4.2.6. Concept de sécurité
Protection du login administrateur :
Sur les pages dédiés à l?administrateur, un contrôle d?authentification de session devra être mis en place afin que l?on ne puisse pas accéder aux pages réservées.
Protection des bases de données Oracle :
Afin que l?accès aux données des tables de travail soit disponible à l?utilisateur OV_USER, un système de DB_LINK a été mis en place. Voici un schéma imagé de comment s?exécute une requête de l?utilisateur OV_USER sur une base de travail.
1) L?utilisateur OV_USER est sur la base de données HELLO_ORA. Il a précédemment reçu les droits sur la vue HELLO_VIEW du schéma OV_ADMIN.
2) L?utilisateur OV_USER exécute la vue HELLO_VIEW. Il va donner le relai (symbolisé par une liste de courses) à OV_ADMIN.
3) L?utilisateur OV_ADMIN va emprunter le DB_LINK privé (que lui seul peut emprunter) et arriver sur la base HELLO_CLE
4) L?utilisateur OV_ADMIN de la table HELLO_ORA va prendre l?identité de l?utilisateur OV_ADMIN créé sur HELLO_CLE (dans notre cas, mais plus généralement il prendra l?identité définie dans le DB_LINK). Il va consulter les tables concernées par la vue (seul l?utilisateur OV_ADMIN de la table HELLO_CLE possède les droits d?accès sur ces tables). Puis il effectuera le chemin inverse et donnera les données à l?utilisateur OV_USER.
Grâce à ce système, les failles de sécurité sont réduites. Seul l?utilisateur OV_ADMIN a accès aux bases de travail. En utilisant les vues, l?utilisateur OV_USER a donc indirectement l?accès aux tables dont il a besoin.
4.2.7. Prototype
http://www.mangaclub.ch/urd/imagecenter/Perso/116.gif
--------------------------------------------------------
Bref. pour le moment je débute la période de pré-acquis, c'est à dire les choses à effectuer avant le travail proprement dit. Cela concerne la connexion à une base oracle, et quelques tests avec les vues, les droits et les DBLink.
pour l'instant j'en suis au touuuut début. J'ai installé apache et je te de me connecter sur une base oracle d'un autre serveur. J'ai trouvé ce script (entre autre, j'aimerais plutot utiliser oci par la suite).
et bien sur, l'erreur obtenue suivante:
J'ai enlevé le commentaire de la ligne "extension=php_oracle.dll" (merci dropsy) dans le php.ini, mais aucun changement à l'horizon malheureusement. Je ne sais pas vraiment chercher à vrai dire, donc je recherche de l'aide auprès de vous
Merci d'avance pour votre aide, je vous tiendrai au courant de l'évolution de ce travail de diplome qui est une note importante de mon CFC d'informaticienne (formation de 4 ans que je termine en aout).
Pour info:
-> 30 avril: pré-acquis
-> début mai: commencement du travail de diplomes (60 périodes de 45 minutes)
-> mi-mai: intervention d'une tierce-personne pour voir ou en est le projet
-> fin-mai: fin du projet
-> juin: présentation orale à 3 personnes (1 personne consciente du dossier; 1 personne toute neuvelle; le maitre d'apprentissage (mais il n'a pas le droit de poser des questions durant la présentation))
Message édité par urd-sama le 29-04-2004 à 09:41:44