IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Tableaux] file_get_contents fait planter mon serveur


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 152
    Points : 80
    Points
    80
    Par défaut [Tableaux] file_get_contents fait planter mon serveur
    Bonjour,

    Voila hier prise de tête avec cette fonction : file_get_contents

    Je désire lire le content d'un fichier avec file_get_contents. Le fichier est un fichier *.php. Mais lorsque j'utilise file_get_contents cela fait planter le serveur illico presto. (dans la seconde)

    J'ai testé avec un fichier txt contenant un simple mot et ça fonctionne. De là, j'ai copier coller le contenu de mon fichier php dans ce fichier txt et cela n'a pas fonctionné.

    Je suis, via des suppressions au fur et à mesure du contenu de ce fichier, arrivé à l'endroit ou caractère qui fait bugé file_get_contents.

    Exemple1: (contenu du fichier à lire)
    class bidon{

    fonction test($i,$y)
    Ca marche !

    Exemple2: (contenu du fichier à lire)
    class bidon{

    fonction test($i,$y) {
    Ca marche pas!

    Pourquoi le simple faite d'ajouter { fait planter file_get_contents alors que ce caractère est utilisé précédemment ?

    J'ai essayé avec fread, précédé d'un fopen et c'est pareil.

    Je suis sous xp !

    Besoin d'aide !

    Merci,

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 466
    Points : 15 850
    Points
    15 850
    Par défaut
    c'est Apache qui plante ? si oui qu'est ce que tu as comme erreur dans le fichier "error.log" ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 152
    Points : 80
    Points
    80
    Par défaut
    J'ai 3 warning sur simplexml

    [error] PHP Warning: simplexml_load_file()... I/O Warning : failed to load external entity...
    [error] PHP Warning: simplexml_load_file()... I/O Warning : failed to load external entity...
    [error] PHP Warning: simplexml_load_file()... I/O Warning : failed to load external entity...

    et puis l'erreur

    [crit] Parent: child process exited withi status 3 --Aborting

    J'ai testé à un autre endroit de mon site (homepage) file_get_contents mais sur la même cible et cela fonctionne.


    Etrange, apparemment si j'utilise file_get_contents et qu'en suite je fais un simplexml_load_file() ça ne marche pas. Je n'ai le temps pour le moment de tester car je taff.

    simplexml_load_file() et file_get_contents sont dans des classes différentes.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 152
    Points : 80
    Points
    80
    Par défaut
    Pour le [error] PHP Warning: simplexml_load_file()... I/O Warning : failed to load external entity... il y avait effectivement un erreur. Qui est corrigée mais hélas c'est peut être plus compliqué que ça.


    Bon confirmation.... file_get_contents fonctionne très bien . Le problème vient d'un eval que je fais.

    Pour expliquer ce que je fais :

    J'ai un système de cache mémoire qui fonctionne nickel et je suis occupé à installer un système d'autoload de class via __autoload($name).

    Quand je fais $obj1=new class1(); sans avoir fait de require sur le fichier contenant cette class, _autoload est appelé.

    Dans _autoload, je regarde le nom de la class demandée $name et je regarde dans un tableau en cache l'adr du fichier contenant cette class (une classe par fichier) et charge le contenu du fichier .php dans ce tableau. Si le fichier est déja contenu dans le tableau je ne le recharge pas.

    Donc dans mon autoload j'ai à un moment donné eval($content). $content contenant le code de la définition de ma classe. Lors du chargement du contenu dans mon tableau, je retire les balises <?php et ?>.


    En pratique :

    Je fais le test avec une classe qu'on va appeler classDB.

    Sur la homepage je fais ça sans faire de require_once du fichier contenant la class. Autoload est donc appelé une seule fois

    $obj1=new classDB();
    $langues1=$obj1->getLangues();
    var_dump($langues1);

    $obj2=new classDB();
    $langues2=$obj2->getLangues();
    var_dump($langues2);

    Cela fonctionne correctement


    Mais à un autre endroit de mon code, cela ne fonctionne pas. Quand je dis que ça fonctionne pas j'ai apache qui plante avec comme seul message d'erreur: [crit] Parent: child process exited withi status 3 --Aborting


    Je vais essayer de comprendre la différence entre les 2 !

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 152
    Points : 80
    Points
    80
    Par défaut
    J'ai trouvé d'ou venait le problème.

    Pour rappel, j'ai mis en place un système __autoload avec mise en cache mémoire des définitions des classe que je fais via un eval.

    L'Eval dans l'autoload buggait mais cela dépendait ou je mettais le $obj = new class();

    En fait le problème venait du fait que je n'avais pas neutralisé (//) tous les require_once vers le fichier php qui contient la classe. Avant de faire $obj = new class, il y avait déja eu un require_once sur le fichier et à cause de cela c'est comme si je redéclarais une seconde fois ma classe. Et comme cela se passait dans un eval ça plantais apache sans me dire pourquoi. Donc en neutralisant les require_once vers le fichier en question... cela fonctionne nickel. Mais à partir de maintenant, je n'utiliserai plus les require_once avant une instanciation de class.


    Donc c'est résolut même si la solution dévie largement du problème de départ.

    Merci pour l'aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [CVSNT] Fait planter mon pc.
    Par warenbe dans le forum CVS
    Réponses: 0
    Dernier message: 29/10/2008, 20h17
  2. comment trouver ce qui fait planter mon VS ?
    Par gorgonite dans le forum Visual Studio Team System
    Réponses: 3
    Dernier message: 04/06/2008, 00h40
  3. Requete qui fait planter le serveur.
    Par Lambrosx dans le forum Installation
    Réponses: 6
    Dernier message: 05/04/2007, 19h28
  4. Réponses: 2
    Dernier message: 17/03/2007, 14h43
  5. Réponses: 3
    Dernier message: 27/01/2007, 10h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo