Page 1 sur 1

Lecture du flux php d'un fichier local

Posté : 02 mars 2007, 16:18
par Ludoi
Bonjour à tous!

J'ai besoin d'ouvrir dans Dom le contenu xml généré par un fichier php local. Si j'ouvre un fichier local directement depuis $dom->loadXML, il va charger le code php et non pas le code généré.

Y a t-il un moyen simple et "propre" pour récupérer le contenu généré par un fichier php situé localement sur le serveur? (pour l'instant, j'ouvre le fichier avec son adresse absolue -http://serveur.com/xml.php-, ce qui force le parsing php mais qui demande une connexion réseau inutile).

Merci d'avance!

Posté : 02 mars 2007, 16:56
par titerm
tu peux faire un eval() du contenu du fichier
ou utiliser virtual() au choix

Posté : 02 mars 2007, 21:11
par Invité
Je connaissais pas virtual(), c'est l'occasion d'apprendre ;)
Dommage qu'il ne soit pas prévu un paramètre dans les fonctions du type fopen ou file_get_content...

Merci pour ta réponse!

Posté : 02 mars 2007, 21:57
par mere-teresa
As tu regardé file_get_contents() ?

Cela charge le contenu d'un fichier dans une chaîne

http://fr3.php.net/manual/fr/function.f ... ntents.php

Posté : 02 mars 2007, 22:52
par titerm
mere-teresa... Il cite cette fonction, on peux supposer qu'il l'a regardé, de plus, lire un fichier avec file_get_contents ne l'évalura pas sauf a le préfixer via http hors, dans le premier post, il cherche une autre solution...

Ludoi....
J'ai l'impression que tu te compliques la vie... les eval et autre virtual sont rarement réelleemnt nécessaire...
tu es déjà en train d'évaluer du php...
si tu fais un ob_start(), un include de ton xml.php et un $res=ob_get_clean()
tu aura le resultat de ton xml dans $res, ensuite tu load dans le dom via
loadXML() au lieu de load

Posté : 13 mars 2007, 16:26
par Ludoi
En fait, je n'ai pas précisé l'étendue de ma problématique. Le souci, c'est que le fichier xml est généré par un package de classes php qui utilise lui-même des include relatifs à son propre répertoire. un include direct génèrerait des erreurs de chargement (je pourrais bien sûr arranger cela mais mon objectif est de ne pas avoir du tout à m'en soucier).

Voici la solution que j'utilise maintenant:

Code : Tout sélectionner

$xmlpath = '../xmlserver/xml.php'; function parseLocalPhpFile ( $localfilepath ) { // start buffering ob_start (); // Repertoire courant (Pour réinitialisation à la fin du process) $currentDir = getcwd(); // Modification du répertoire courant de travail >> '../xmlserver' chdir ( dirname ( $localfilepath ) ); // include du fichier xml (seulement le nom de fichier) include ( basename ( $localfilepath ) ); // Reinitialisation du répertoire courant de travail chdir ( $currentDir ); // Retour du contenu interprété return ob_get_clean(); }
Ca fonctionne très bien et ça me permet de récupérer le contenu de mes fichier xml interprétés sans me soucier des chemins d'include relatifs qu'eux même utilisent.

Par contre, je suis sûr qu'il existe une solution plus propre. A mon avis, ça doit se passer par là:
http://fr3.php.net/manual/fr/wrappers.php.php
ou sur le concept de contexte de fopen(). Mais bon, j'y ai passé une demi heure et j'ai déjà mal à la tête ;)

Merci pour vos réponses!

Posté : 13 mars 2007, 16:48
par titerm
Bah, je trouve ca pas si mal...

Quand a wrappers...
Notez que le comportement de PHP à ce sujet est relativement bogué dans les versions antérieures à 5.2.1.
Ca limite tout de suite un peu qd meme :)

Posté : 13 mars 2007, 18:03
par Ludoi
T'as raison! Je vais passer à la suite, d'autant que cette fonction me parait assez fiable et fait appel à des procédures mieux documentées (et pas buggées! comme tu dis ) que j'aurais pas de mal à comprendre si je dois revenir dessus dans 1 an!

Je vais juste mettre un petit @ devant include et l'ajouter à mes utilitaires. C'est le genre de fonction qui peut servir à plein de choses, je crois.

A+

Posté : 13 mars 2007, 18:11
par titerm
Je suis contre les @....

Cacher les erreurs n'est pas une solution.... Tu fais un if is_readable, et un include si c'est vrai. Ca c'est propre. Le @include, c'est du bricolage... AMHA.

Posté : 13 mars 2007, 19:53
par Ludoi
Un excellent conseil, adopté ;)