Fopen // Erreur 500 - Version imprimable +- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org) +-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38) +--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51) +--- Sujet : Fopen // Erreur 500 (/showthread.php?tid=122) |
RE: Fopen // Erreur 500 - niahoo - 23-01-2013 non mais sur les fopen(..., 'a') ou fopen(..., 'w'), ajout ou write ? RE: Fopen // Erreur 500 - Wells - 23-01-2013 ca dépend, ca ne plante pas au début de la boucle. puis arrive un moment ou ca plante. RE: Fopen // Erreur 500 - niahoo - 23-01-2013 (23-01-2013, 06:46 PM)niahoo a écrit : T'ass essayé de tout mettre dans $xml et de faire un seul xmlfic() (bon, logiquement ça devraît être pire si c'est un problème de RAM, mais c'est pas obligé. bon ben essaie ça on sait jamais, mais sinon il va te falloir mettre du débug pour voir l'utilisation de la RAM au fur et a mesure. Mais je suppose que ton XML doit pas non plus faire 1Mo quand même ? C'est possible que deux requêtes essaient d'agir sur le même fichier en même temps ? RE: Fopen // Erreur 500 - Wells - 24-01-2013 J'ai déjà mit, on depasse pas les 50 Mo de RAM, donc pas de soucis à ce niveau la. Pour l'accés simultanée, non c'est pas possible RE: Fopen // Erreur 500 - srm - 24-01-2013 Jusqu'à combien tu estimes le nombre de personnes qui peuvent avoir à écrire dans leur fichier ? RE: Fopen // Erreur 500 - Wells - 24-01-2013 Heu, ben chaque joueur lance la génération de son fichier chaque semaine, pk ? RE: Fopen // Erreur 500 - srm - 24-01-2013 Car ulimit limite peut-être le nombre de fichiers ouvert en même temps. Fait un fopen or die et log l'erreur. RE: Fopen // Erreur 500 - Xenos - 24-01-2013 D'après le code, certains cas peuvent aboutir à l'appel du triplet fopen/fputs/fclose plusieurs fois dans la même page. Deux possibilités: - fclose n'a pas le temps de bien se faire, car fopen est appelé trop vite (le script php va trop vite) - l'hébergeur limite le nombre de fopen par script php (sur un mutualisé, ca se tient) Dans ton cas, il vaudrait donc mieux procéder ainsi: -Lire le XML existant si besoin, puis le fermer (via file ou f_gets_content) - initialiser la variable $xml en début de code (avec le tag <?xml...?> dedans) - remplir cette variable dans ton script, sans toucher au fichier XML réel - sauver le fichier XML en fin de boucle, via file_puts_content - détruire $xml unlink est inutile. file_puts_content écrasera le fichier précédent. Ton procédé consistant à sauver le fichier xml dans la boucle, via intermédiaire, est bien trop lourd et peut saturer ton accès au disque dur, ou générer des erreurs dus à la latence. RE: Fopen // Erreur 500 - srm - 25-01-2013 Même en dehors de ça, ouvrir le fichier à chaque fois dans une boucle foreach c'est crade. Tu l'ouvres au début de la boucle et tu le fermes après. RE: Fopen // Erreur 500 - Wells - 29-01-2013 (24-01-2013, 12:37 PM)Xenos a écrit : - l'hébergeur limite le nombre de fopen par script php (sur un mutualisé, ca se tient) Sais tu comment il peut faire ça ? (php.ini ???) Sinon, pour le coup du xml injecte dans la boucle, cela était tout simplement une parade du à une forte limitation mémoire du serveur. La variable $XML faisait exploser la mémoire, donc j'avais fait le choix de l'injecter puis de la vidé à chaque tour de boucle. Cela n'étant plus nécessaire j'ai corrigé le script pour qu'il injecte tt à la fin. Mais ça ne résout pas mon soucis. Même avec deux ouvertures/écritures/fermetures de mon XML, même erreur... |