Intercepter un require_once [Résolu]

Signaler
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
-
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
-
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

Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Lol, Fhx...bon rétablissement ;-) Suis sûr que ça va vite aller mieux!
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3
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 :)
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
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.
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
8
Ooops... J'ai juste oublié que je n'utilisai pas encore PHP5...

Parse error ! bien sûr...
Domage pour moi
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
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 :-)
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
8
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.
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3
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 !!
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
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 ;-)
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
FhX => tous mes voeux de bon rétablissement...parce que t'as pas l'air loin d'y passer là lol.
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3
Sql serveur 2000 !! Wouahou :D

Ca doit bien donné ca j'imagine !
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
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... ;-)
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3
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 ?? ;) ;) ;)
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
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).