Je charge des fichiers de classe PHP dynamiquement avec AutoLoad. Et ces fichiers pourraient être manquants ou corrompus par une raison quelconque.
AutoLoad Signalera avec succès les fichiers manquants afin que la logique d'application puisse gérer cela. Mais si ces fichiers sont corrompus, l'ensemble du traitement s'arrête avec un écran vide pour l'utilisateur et «Erreur PHP Payse: erreur de syntaxe» dans le journal des erreurs. P>
est-il possible de vérifier la syntaxe du fichier PHP à partir du code PHP ? P>
J'ai regardé ici: http : //us.php.net/manual/fr/function.php-check-syntax.php - Il est obsolète. P>
et p> semble être une mauvaise manière ( http://bugs.php.net/bug .php? id = 46339 ) p> pensées? p> p>
4 Réponses :
En bref: Je ne peux pas voir un moyen de le faire, mais j'ai une idée qui pourrait être suffisante. P>
Il existe des programmes de surveillance des journaux ou peut filtrer les journaux via des outils standard pour les fichiers avec des erreurs d'analyse. Si un fichier apparaît, vous mettez le nom de fichier Villain dans une liste noire et votre autochargeur vérifie avant de charger sur cette liste. P>
Avec cette méthode, vous servirez à la première fois un écran vide (la déclaration d'erreur Assumig à la sortie est activée sur les serveurs de production), mais la seconde aura une page sans le composant défectueux. P>
Dans l'autoloadeur, vous devez avoir un schéma de liste ou de nommage pour toujours essayer de charger des classes obligatoires (d'autres moyens de votre application pourraient être dans un état incohérent) P>
J'ai supposé qu'il (son système) n'a aucun contrôle sur ces fichiers au moment de la construction.
Une idée intéressante, alors que je pense qu'il n'est pas bon de rendre la vérification de la syntaxe dépendante de l'utilisateur visitant le site. Même si seulement la première obtiendra la page vierge.
Vous ne devriez vraiment pas essayer de vérifier les fichiers PHP non correct au moment de l'exécution: il tuera le temps de réponse de votre application! P>
Un "meilleur moyen" serait d'utiliser php -l de la ligne de commande lorsque vous avez terminé de modifier un script PHP; ou inclure-le dans votre processus de construction si vous utilisez un; Ou branchez-le comme un crochet de pré-validation SVN si vous utilisez svn et peut définir SVN Hooks . P>
À mon avis, presque toutes les recherches seraient meilleures que de vérifier vous-même à l'heure d'exécution! P>
Considérant des erreurs comme celles que vous souhaitez éviter ne se produira probablement pas souvent, c'est probablement préférable de les laisser se produire.
La seule chose est la suivante: activer les journaux et les surveiller, la possibilité de détecter rapidement quand Tere est un problème: -) p>
Bien sûr, cela ne vous empêche pas de traiter avec le cas de fichiers manquants; Mais c'est une question différente ... p>
Merci pour votre réponse. Réponse "Non, pas avec une performance raisonnable" est une option valide. SVN Crochet de pré-validation est une bonne idée et je pense résoudre notre problème dans la plupart des cas.
Vous êtes la bienvenue :-) Ok à propos de SVN SVN Crochet de pré-validation: Lorsque vous êtes admin du serveur SVN, les crochets sont vraiment excellents à utiliser!
Une autre façon, vous pouvez faire un fichier PHP dans votre répertoire racine appelé
checksyntax.php maintenant, ouvrez votre fichier BASHRC pour créer un raccourci pour exécuter ce fichier.
Ajouter ci-dessous ligne pour exécuter checksyntax.php p> et maintenant goto votre répertoire source do svn st. p> IT indique que vous lisez la liste des fichiers, maintenant facilement exécuté La commande. p> Ceci vérifiera tous vos fichiers passant comme des arguments. P> Profitez :) P> P>
Vous pouvez également effectuer des tests unitaires, où vous chargez le PHP que vous exécutez de manière dynamique et affirmez que EXED («nom de fichier PHP -L $») est valide. Si vous avez fait cela que vous pourriez le vérifier une fois dans vos tests, la générer avec des variables appropriées et avoir un niveau de confiance raisonnable que votre PHP était bon. P>
Vous envisagez vraiment de vérifier la syntaxe de chaque fichier que vous souhaitez inclure chaque fois qu'un script est exécuté?
Pas exactement. J'ai une sorte de classe spéciale qui pourrait être potentiellement corrompue, pas toutes.