Page 1 sur 1
PHP 5 se perd dans des require_once en cascade
Posté : 04 mai 2012, 18:05
par arrobe
Salut,
Je suis en PHP 5 sur un serveur Debian
J'ai 3 fichiers PHP et dans chaque j'ai mis en ligne 1 error_log("debut fichier" . __FILE__); et en dernière ligne "fin fichier"
Le fichier 1 fait un require_once du fichier 2
Le fichier 2 fait un require_once du fichier 3
Et le fichier 3 fait plein d'autres require_once (mais c'est pas le problème)
Dans ma log, j'ai :
Debut fichier 1
Debut fichier 2
Debut fichier 3
Fin fichier 3
Fin fichier 2
... et c'est tout.
Pas d'autres traces (J'ai un error_reporting à E_ALL | E_STRICT )
Dernier point : le 1er fichier est appelé en Ajax.
Quelqu'un à une idée ?
Re: PHP 5 se perd dans des require_once en cascade
Posté : 04 mai 2012, 20:25
par Calimero
Salut,
Si tu réponds à la question "qu'est ce qui manque dans mes logs ?", tu auras un gros indice sur l'endroit où se produit ton problème (forcément, entre le dernier truc qui marche et le premier qui n'a pas marché...).
On ne pourra pas t'en dire davantage sans code.
Re: PHP 5 se perd dans des require_once en cascade
Posté : 05 mai 2012, 09:35
par arrobe
Salut Caliméro,
J'avais déjà demandé son avis à Cap'tain Evident.
La question (que j'aurais dut formuler) est "Pourquoi je ne récupère pas la main dans "Fichier 1" alors qu'il n'y a aucune instruction entre le dernier "error_log" exécuté et le prochain ? "
Et corolaire : "Pourquoi je n'ai aucune trace dans la log ?"
Re: PHP 5 se perd dans des require_once en cascade
Posté : 05 mai 2012, 09:47
par sirakawa
error_log() si je comprends bien la doc envoie un message d'erreur, mais ne redirige pas les messages d'erreurs.
Moi je laisserais les erreurs s'afficher à l'écran error_reporting (E_ALL) ,
et en reprenant l'idée de Calimero, en mettant des die () qu'on déplace ou en ajoutant une erreur volontaire pour voir si on arrive jusque là;
Re: PHP 5 se perd dans des require_once en cascade
Posté : 05 mai 2012, 10:14
par arrobe
Je n'ai pas été clair dans ma question :
Dans fichier 1 j'ai un error_log juste après le require_once "fichier 2"
... qui n'est jamais exécuté (le error_log, pas le require).
A la fin de "fichier 2" j'ai un error_log qui lui est bien affiché.
Je n'ai donc aucune instruction entre le dernier error_log affiché et la suite.
... et aucune trace dans la log.
Le "problème" de la trace est secondaire (c'est juste un outil de debug)
Ce que je voudrais principalement, c'est "récupérer" la main dans mon "fichier 1" après le require_once
Re: PHP 5 se perd dans des require_once en cascade
Posté : 05 mai 2012, 10:32
par Calimero
Désolé pour l'évidence mais tu y prêtes un peu le flanc en nous faisant jouer aux devinettes.
Le problème que tu nous décris est curieux en effet. Il nous faudrait maintenant du code permettant de tester et reproduire ce bug. Soit tu nous copies tes fichiers tels qu'ils sont, soit tu simplifies au maximum tes fichiers (en ne laissant donc que les require() et les error_log() ) en vérifiant au passage que le problème se produit toujours, avant de nous les copier.
Re: PHP 5 se perd dans des require_once en cascade
Posté : 05 mai 2012, 11:04
par arrobe
Mon fichier 1 (upload.php de son vrai nom)
<?php
error_log('upload - 1 - Fichier : ' . __FILE__ . ' a la ligne ' . __LINE__ );
require_once("../includes/php/config.php");
error_log('upload - 2 - Fichier : ' . __FILE__ . ' a la ligne ' . __LINE__ );
// etc ....
Mon fichier 2 (config.php, bien sur)
<?php
error_log('config - 1 - Fichier : ' . __FILE__ . ' a la ligne ' . __LINE__ );
// plein de define comme
define(ARGOS_PATH, '/var/www/dev.domaine.tld/www/intranet/');
// puis, en bas :
require_once(ARGOS_PATH . "includes/php/include.php");
error_log('config - 2 - Fichier : ' . __FILE__ . ' a la ligne ' . __LINE__ );
?>
Coté log :
[Sat May 05 10:18:12 2012] [error] [client 82.236.151.38] upload - 1 - Fichier : /var/www/dev.domaine.tld/www/intranet/documents/upload.php a la ligne 2
[Sat May 05 10:18:12 2012] [error] [client 82.236.151.38] config - 1 - Fichier : /var/www/dev.domaine.tld/www/intranet/includes/php/config.php a la ligne 2
[Sat May 05 10:18:13 2012] [error] [client 82.236.151.38] config - 2 - Fichier : /var/www/dev.domaine.tld/www/intranet/includes/php/config.php a la ligne 71, referer:
http://dev.domaine.tld/intranet/util...eur.php?code=1
... et c'est tout !
pas de "retour" à upload.php
Re: PHP 5 se perd dans des require_once en cascade
Posté : 05 mai 2012, 11:10
par Calimero
Merci pour le code mais l'extrait de log que tu as donné ne correspond pas (présence d'un referer absent de ton code, + heure "
un peu décalée"

). Peux-tu t'assurer que le code que tu viens de donner pose bien le problème stp ?
Re: PHP 5 se perd dans des require_once en cascade
Posté : 05 mai 2012, 11:14
par arrobe
Merci pour le code mais l'extrait de log que tu as donné ne correspond pas (présence d'un referer absent de ton code, + heure "
un peu décalée"

). Peux-tu t'assurer que le code que tu viens de donner pose bien le problème stp ?
Si, si ça correspond : c'est juste que j'avais fait la copie tout à l'heure.
Par contre tu viens de me donner une superbe piste : L’appel Ajax doit foutre le bordel et je dois me retrouver avec un double appel à mon fichier config.php.
Je creuse ça...