PHP 5 se perd dans des require_once en cascade

Petit nouveau ! | 5 Messages

04 mai 2012, 18:05

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 ?

ViPHP
ViPHP | 2287 Messages

04 mai 2012, 20:25

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.
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Petit nouveau ! | 5 Messages

05 mai 2012, 09:35

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 ?"

Mammouth du PHP | 2278 Messages

05 mai 2012, 09:47

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à;
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Petit nouveau ! | 5 Messages

05 mai 2012, 10:14

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

ViPHP
ViPHP | 2287 Messages

05 mai 2012, 10:32

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.
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Petit nouveau ! | 5 Messages

05 mai 2012, 11:04

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

ViPHP
ViPHP | 2287 Messages

05 mai 2012, 11:10

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 ?
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Petit nouveau ! | 5 Messages

05 mai 2012, 11:14

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...