Question

Je charge dynamiquement des fichiers de classe PHP avec autoload. Et ces fichiers pourraient être manquants ou corrompus pour une raison quelconque.

Le chargement automatique signalera avec succès les fichiers manquants afin que la logique de l'application puisse le gérer. Mais si ces fichiers sont corrompus, l'ensemble du traitement est interrompu avec un écran vide pour l'utilisateur et "Erreur d'analyse PHP: erreur de syntaxe". dans le journal des erreurs.

Est-il possible de vérifier la syntaxe d'un fichier PHP à partir de code PHP?

J'ai regardé ici: http: // us. php.net/manual/en/function.php-check-syntax.php - il est obsolète.

Et

exec("php -l $file");

semble être une mauvaise façon ( http://bugs.php.net/bug .php? id = 46339 )

Pensées?

Était-ce utile?

La solution

Vous ne devriez vraiment pas essayer de rechercher des fichiers PHP non corrects au moment de l'exécution: cela tuerait le temps de réponse de votre application!

Une "meilleure façon" serait d'utiliser php -l en ligne de commande lorsque vous aurez fini de modifier un script PHP; ou l'inclure dans votre processus de construction si vous en utilisez un; ou branchez-le en tant que point d'ancrage de pré-validation SVN si vous utilisez SVN et pouvez définir Crochets SVN .

À mon avis, presque n'importe quelle solution donnée serait préférable à une vérification au moment de l'exécution!


Considérant que les erreurs comme celles que vous voulez éviter ne se produiront probablement pas souvent, il est probablement préférable de… les laisser se produire. La seule chose à faire est d'activer les journaux et de les surveiller, pour pouvoir détecter rapidement les problèmes: -)


Bien entendu, cela ne vous empêche pas de traiter le cas des fichiers manquants; mais c'est une autre affaire ...

Autres conseils

Vous pouvez également créer un fichier php dans votre répertoire racine, appelé     checkSyntax.php

<?php
for($i=1; $i < count($argv); $i++){
        $temp = "php -l " . $argv[$i];
        $output = exec($temp);
        echo "\n$output";
}
?>

maintenant, ouvrez votre fichier bashrc pour créer un raccourci pour exécuter ce fichier. ajoutez la ligne ci-dessous pour exécuter checkSyntax.php

alias checkSyntaxErrors='php /root/checkSyntax.php'

et maintenant allez dans votre répertoire source svn st.

il vous montre la liste des fichiers, exécutez maintenant facilement la commande.

checkSyntaxErrors file1.php file2.php .......

Ceci vérifiera tous vos fichiers en passant comme arguments.

appréciez:)

En bref: je ne vois pas comment y parvenir, mais j'ai une idée qui pourrait suffire.

Il existe des programmes de surveillance des journaux ou vous pouvez filtrer les journaux via des outils standard pour les fichiers avec des erreurs d’analyse. Si un fichier apparaît, vous placez le nom du fichier malveillant dans une liste noire et votre chargeur automatique vérifie avant de le charger dans cette liste.

Avec cette méthode, vous présenterez pour la première fois un écran vide (les erreurs supposées sont signalées à la sortie activées sur les serveurs de production), mais le second comporte une page sans le composant défectueux.

Dans l'autochargeur, vous devez disposer d'une liste ou d'un schéma de dénomination permettant de toujours essayer de charger les classes obligatoires (votre application peut également être dans un état incohérent)

Vous pouvez également faire des tests unitaires, en chargeant PHP que vous exécutez de manière dynamique et en affirmant que exec ("php -l $ FileName") est valide. Si vous le faites, vous pourrez le vérifier une fois dans vos tests, le générer avec les variables appropriées et avoir un niveau de confiance raisonnable, votre PHP est bon.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top