Lecture du flux php d'un fichier local

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Lecture du flux php d'un fichier local

par Ludoi » 13 mars 2007, 19:53

Un excellent conseil, adopté ;)

par titerm » 13 mars 2007, 18:11

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.

par Ludoi » 13 mars 2007, 18:03

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+

par titerm » 13 mars 2007, 16:48

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 :)

par Ludoi » 13 mars 2007, 16:26

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!

par titerm » 02 mars 2007, 22:52

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

par mere-teresa » 02 mars 2007, 21:57

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

par Invité » 02 mars 2007, 21:11

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!

par titerm » 02 mars 2007, 16:56

tu peux faire un eval() du contenu du fichier
ou utiliser virtual() au choix

Lecture du flux php d'un fichier local

par Ludoi » 02 mars 2007, 16:18

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!