Intercepter un require_once

Résolu
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 - 16 févr. 2006 à 11:31
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 - 17 févr. 2006 à 18:14
Hello,


je bloque rarement au point de poser une question, mais là...je ne parviens pas à mes fins et j'ai épuisé mes idées ;-)


La problématique est relativement simple :
je travaille sur un bug connu de mon script de documentation.
Le principe pour documenter des classes est simple : le fichier dans lequel se trouve la classe est choisi, et je fais un require_once dessus. Jusque là, tout va bien. Mais comme mon script remonte les classes héritées, j'ai dû faire un require_once sur toutes les classes uploadées, car, sans règle de nommage, je n'ai pas de moyen de savoir dans quel fichier se trouve la classe héritée.
Ca marche très bien (tant qu'on a pas 200 fichiers uploadés, évidemment, mais ça, c'est un autre problème) quand le fichier de la classe héritée se trouve "au-dessus", ou "avant" le fichier de la classe héritante dans le répertoire.
Mais si elle est après, le require_once du fichier de la classe héritante me sort évidemment une erreur, car il ne trouve pas la aclasse héritée (normal, elle n'a pas encore été incluse).


J'ai donc fait plusieurs tests :
@require_once ne plante plus, mais bloque par contre (évidemment, pas de message d'erreur, mais ça bloque quand même au require défaillant).
J'ai alors testé ça :

<?php
$aDocs = scandir ('classes');
$aFlag = array_fill (0, count ($aDocs) - 1, 0);
while (in_array (0, $aFlag)) {
foreach ($aDocs as $clef => $obj) {
if ($obj !== '.' && $obj !== '..') {
try {
require_once ('classes/'.$obj);
$aFlag[$clef] = 1;
} catch (Exception $e) {
continue;
}
}
}
}
?>


Le but étanht de flagger les fichiers inclus, et, si on rencontre un problème lors d'une inclusion, on saute et on passe aau suivant. Et on reboucle tant que tous les fichiers n'ont pas été flaggés à 1.
Mais rien à faire, le require_once plante, même dans le bloc du try {}.


J'ai ensuite utilisé la bufferisation de sortie :


<?php
$contents = '';
$aDocs = scandir ('classes');
$aFlag = array_fill (0, count ($aDocs) - 1, 0);
while (in_array (0, $aFlag)) {
foreach ($aDocs as $clef => $obj) {
if ($obj !== '.' && $obj !== '..') {
try {
ob_start ();
require_once ('classes/'.$obj);
$aFlag[$clef] = 1;
$contents .= ob_get_contents ();
ob_end_clean ();
} catch (Exception $e) {
continue;
}
}
}
}
echo $contents;
?>


Mais pareil, le require_once plante lamentablement.
Idem avec un @, je précise.


Je me suis alors lancé dans un $contents .= get_file_contents (...) à la place du require_once (), et un eval à la fin (voui je sais...mlais j'étais désespéré)
Mais là, ça tourne carrément trop longtemps au niveau du file_get_contents (je ne parle donc même pas du eval...).


Et là, je n'ai plus d'idée...
Alors si quelqu'un en avait une!! ;-)


Merci :-)

33 réponses

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
16 févr. 2006 à 18:16
Lol, Fhx...bon rétablissement ;-) Suis sûr que ça va vite aller mieux!
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
16 févr. 2006 à 18:25
Ca fait 3 fois en 2 mois... ca commence à faire beaucoup chez moi je trouve :)
Jtrouve même plus le temps de coder, jpasse mon temps à dormir en ce moment.

C'est triste, je me serais bien penché sur ton projet vite fait, mais dès que je lis plus de 5 lignes de codes j'ai un mal de crane qui s'installe :D

On verra un peu plus tard si ca va mieux :)
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
16 févr. 2006 à 18:29
Ouais et puis comme ça, j'ai le temps de le faire avancer lol.

T'es victime de la serial-gastro qui sévit en ce moment...?
Y en a plein ici! J'y échappe pour le moment...je croise les doigts lol.
0
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
16 févr. 2006 à 18:31
Ooops... J'ai juste oublié que je n'utilisai pas encore PHP5...

Parse error ! bien sûr...
Domage pour moi
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
16 févr. 2006 à 18:33
Effectivement, lol.
Et tu ne peux pas mettre à jour cette source pour php4...l'API de réflexion utilisé est spécifique PHP5.

Faut t'y mettre! Une tite install de WAMP, tranquille, et le tour est joué pour tester un peu PHP5 :-)
0
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
16 févr. 2006 à 19:02
C'est pas le problème de faire une installation...

Mais le serveur sur lequel je développe est en PHP 4.23 et MySQL 3.23
(Il aime les .23 on dirait)

Pour PHP, c'est pas dramatique... Mais pour MySQL c'est un drame !!!

Enfin bref, mon ordi est un outils de travail. Donc je m'aligne sur les technologies utilisées.

Voilà pour la petite histoire.
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
16 févr. 2006 à 19:04
Nan... rhume je sais pas trop quoi. Pas bien compris ce qu'on m'a raconté lol !

Bref, un bourrage au médoc 24h/24... une lutte quotidienne tous les soirs pour aller dormir =) Jdois me coucher il est 5h30/6h du mat' c'est super génial :)

Mais bon, voui fait avancer ton truc, jm'y pencherais dans pas longtemps promi !!
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
16 févr. 2006 à 19:41
Bon ben tant pis J_G, tu ne profiteras pas de mon fabuleux code ;-)
Perso en tous cas, je me fais pas chier parce que mon pc est juste un outil de dév "test", pas de dév de prod...je fais les dév de prod directement sur nos serveurs en général (ou je copie mon dév de test lol, ça arrive). Du coup dessus j'ai wamp avec php5 et tout le toutim (mysql 5 et des poussières aussi), et une autre install avec php4.3 et mysql 3.23 aussi (directement sous Apache, sans wamp et consors quoi). ET un serveur sql server 2000 lol.
Bon faut faire gaffe à pas tout ouvrir en même temps...mais ça tourne ;-)
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
16 févr. 2006 à 19:42
FhX => tous mes voeux de bon rétablissement...parce que t'as pas l'air loin d'y passer là lol.
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
16 févr. 2006 à 19:45
Sql serveur 2000 !! Wouahou :D

Ca doit bien donné ca j'imagine !
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
17 févr. 2006 à 09:33
Voué...disons que...voué. Lol.
C'est costaud, et stable, ça c'est sûr. Rapide aussi (je n'ai pas comparé avec mysql mais bon, c'est une bdd rapide).
Après, y a plein de petits plus sympas, comme tjrs avec Microsoft, MAIS...des plus qu'il ne faut pas utiliser si on se dit qu'ujn jour, ptête, on voudra migrer la base suir une autre plateforme (remarque, c'est pareil avec mysql, mais y en a moins).
Les outils fournis sont très bien : Enterprise Manager est sympa mais bon, je préfère phpmyadmin lol...par contre, l'Analyseur de requêtes lui est génial! Les équivalents pour mysql (Query Browser) sont loin, très loin derrière!

Mais bon y a des trucs vraiment chiants : le format de dates est pénible (surtout en travaillant avec php en fait). Le fait qu'un link ne renvoie pas une ressource, mais un identifiant de ressource (tjrs en php donc), faut le savoir sous peine de se prendre méchamment la tête (ça a été mon cas avec ma classe d'abstraction de bdd lol).
Y a pas de num-rows, faut passer par une requête : SELECT @@IDENTITY. Ca marche bien, mais faut pas perdre le lien précédent, sinon...c'est la merde!
Mais le pire, je crois, c'est pour échapper les apostrophes (par exemple) : il faut les doubler! le \ ne marche pas, donc addslashes est totalement inefficace...et ça, c'est quand même une grosse daube de la part de microsoft : \ est quand même LE caractère d'échappement connu et reconnu par la plupart des langages. C'est lourd lol.
Y a aussi la clause TOP, qui est franchement moisie. On regrette le LIMIT propriétaire de mysql finalement. Pour faire une pagination, du coup, c'est un peu galère...on peut passer par la déclaration d'une variable, etc...mais bon.
En fait on peut faire énormément de choses juste par les requêtes. C'est un avantage, ET un désavantage parce que ça rend l'appli propriétaire. On est chez Microsoft, faut pas l'oublier... ;-)
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
17 févr. 2006 à 17:26
Voui, le serveur SQL parfait n'existe pas :)

Y'a toujours du bon et du mauvais partout.
Donc ca y est, tu te met avec SQL Server... Donc dans pas longtemps tu passes à ASP ?? ;) et après à .Net ?? ;) ;) ;)
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
17 févr. 2006 à 18:14
Ca va pas nan?? lol

Nan nan, c'est juste que c'est le serveur bdd qui a été choisi (avant mon arrivée), par ma boîte pour le développement d'un de nos gros projets.
Mais j'ai travaillé déjà avec sql server, jusqu'en décembre : avec sql server donc, et le framework XMLRad (langage serveur : Delphi, + xml, + xsl, + javascript).
0
Rejoignez-nous