J'ai reçu un grand site PHP que je suis sur le point de m'occuper de. Il contient des centaines de fichiers PHP distincts, mais je soupçonne que moins d'une moitié est vraiment utilisé. La plupart d'entre eux peuvent probablement être supprimés. P>
Mais la dernière chose que je veux vraiment faire est de passer par le code de chaque fichier et de vérifier si elle est liée, incluse, requise ... etc. aux autres ou si cela peut être supprimé en toute sécurité. P>
Savez-vous s'il y a un outil capable de le faire? P>
6 Réponses :
Jetez un coup d'œil à phpXref strong> , cela pourrait faire ce dont vous avez besoin. p>
Références CLASSE CLASSES PHP, fonctions, Variables, constantes et nécessitent / incluent l'utilisation. P> blockQuote>
Cela ne gérera pas les invocations via EVAL B>. Il ne traitera pas non plus de groupes de fichiers qui se réfèrent les uns les autres, mais pour lesquels il n'y a aucune référence de l'extérieur.
Il existe de multiples façons d'y parvenir, mais tous impliqueront un travail manuel. P>
Vous pouvez probablement mieux installer et utiliser un débogueur (comme xdebug) qui peut vous montrer le chemin de déplacement PHP lorsque vous cliquez sur eux. P>
Une autre solution consiste à écrire un script qui correspond à «Inclure», 'include_once', "exiger", "exiger_once". Costumez-vous peut-être «eval» et «fopen», «fichier_get_contents», etc.. Assurez-vous de tester / sauvegarder. P>
Et je viens de réaliser - tout href = fichier.php est également un match possible! L'approche Script / Grep devrait donc en tenir compte.
Regardez sur PHPDCD P>
phpdCD est un détecteur de code mort (DCD) pour le code PHP. Il analyse un projet PHP pour toutes les fonctions et méthodes déclarées et rapporte ceux qui sont "Code mort" qui ne sont pas appelés au moins une fois. P> blockQuote>
Mais ne vous attendez pas à aucune merveille. P>
Le problème de l'analyse du code avec un outil automatisé est que vous pouvez trouver des lots de fichiers qui se portent sur l'autre, mais le lot de fichiers ne sont jamais utilisés. Inversement, il peut y avoir un fichier accessible directement, mais n'utilise pas d'autres fichiers, ni celui-ci inclus par d'autres fichiers. P>
Généralement ce que je fais, en désespoir de désespoir, ajoutez de vous connecter à chaque fichier. Écrivez simple Vous pouvez également analyser le fichier journal sur une base régulière et supprimer la journalisation des fichiers que vous connaissez sont utilisées, réduisant ainsi les frais généraux au fur et à mesure. En fin de compte, vous pouvez rechercher des fichiers qui ont toujours votre code de journalisation pour voir lesquels n'ont pas été utilisés. P> __ fichier __ code> à un fichier journal lorsque le fichier est accédé. Cela ajoute des frais généraux à travers le tableau. Mais après une certaine durée, vous avez alors votre liste de fichiers sont effectivement accessibles et utilisés. p>
La couverture de test ajoute fondamentalement tout ce journal pour vous. Automatiquement. Voir ma réponse.
Vous pouvez utiliser __Construction de méthode et le loger s'il est utilisé. Vous ne pouvez pas définir la méthode __Construction après avoir créé une instance. Alors ajoutez-les manuellement; Vous ne pouvez suivre que les classes appelées. C'est ce que je ferais. P> p>
C'est la même réponse que "ajouter la journalisation à chaque fichier".
Nice, mais cela ne fonctionnera pas pour les classes abstraites et les classes de parents qui sont étendues par des classes d'enfants car la classe enfant remplacera la méthode __construction de la classe mère et il n'y aura qu'un __constructeur exécuté pour chaque instance.
Si vous utilisez un outil de couverture de test, il sera définitivement utilisé,
Pour toutes les fonctionnalités du logiciel que vous avez exercées. (Évidemment, plus vous faites de votre exercice
le logiciel, plus il est exécuté par la partie non morte.). Cela inclut tout fichier accessible via un lien HTML externe; Bien sûr, vous devez exercice em> ce lien, car il fait partie de la fonctionnalité de votre application. P>
Ensuite, vous pouvez inspecter ceux qu'il est dit ne sont pas utilisés décider de ce que le cas est vraiment. P>
Notre Outil de couverture de test PHP SD acceptera une liste de Tous em> les fichiers que vous souhaitez consulter et vous permettent de collecter facilement de telles données de couverture de test. Il fournit un rapport de synthèse montrant quels fichiers ont une couverture du tout; Ceux qui ont une couverture de 0% sont ceux qui sont probablement morts. P>
Cela couvre-t-il les scripts PHP qui sont inclus? Qu'en est-il de ceux qui sont appelés à travers une action Ajax? Je suppose que pour trouver un code mort parmi un script particulier, l'utilisation d'un outil tel que le @pekka ou @gordon proposé serait plus approprié alors.
@Eldros: peu importe la manière dont le script est invoqué (include, via Ajax). L'instrumentation placée dans un fichier dans la liste de projets remarquera si le script est invoqué et remarquera également l'absence i> d'invocation du script.
@Eldros: des outils dites "d'analyse statique" pour déterminer la réponse en inspectant uniquement le code source ne sont probablement pas exacts. On peut assembler un nom de méthode au moment de l'exécution et utiliser EVAL pour l'appeler; Très peu de techniques d'analyse statique (sans parler de celles des outils spécifiques énumérées par d'autres réponses) peuvent déterminer ceci; Ils peuvent donc vous dire que quelque chose n'est pas utilisé même s'il exécute souvent; Ils peuvent vous dire que quelque chose est utilisé même s'il n'exécute jamais. En revanche, l'outil de couverture de test vous indiquera toujours correctement si quelque chose est utilisé i> comme en témoigne l'exécution.
Cet outil de couverture de test fonctionne sur les scripts: il ne fera que savoir combien de fois un script est appelé, mais pas particulièrement quelle partie du script a été appelée, suis-je raison?
@Eldros: il vous indique avec précision quelles parties des scripts sont exécutées, au niveau des blocs de code. Un rapport de synthèse fournit des jolies qui indiqueront si un script global a été exécuté également. Il ne "compter" pas les exécutions; Cela en ferait un profileur (il y a du comptage et des outils de profil de timing disponibles chez nous pour PHP, aussi). Voir le site Web; Il y a une capture d'écran montrant la couverture sur un ensemble de scripts.
Bonne question, gardez à l'esprit que vous ne pouvez pas attraper tous les fichiers. Parce que vous pouvez inclure des fichiers de manière dynamique et que les fichiers sont inclus, cela peut dépendre de l'état des variables.
Essayez celui-ci également: php.net/incluce
Je ne vois pas une raison pour laquelle cette question a été mise en attente comme étant hors sujet, tandis que ce Stackoverflow.com/Questtions/1811421/... question n'était pas. De plus, je trouve la plupart des réponses ci-dessous utiles et j'ai marqué celui qui a fonctionné pour moi le meilleur comme une réponse.
Cette question ne devrait pas être hors sujet! Très bonne question
Je suis confronté au même problème, j'ai un ancien dossier système avec 3 Go de fichiers où je prétends commencer un repo git afin que je puisse travailler sur ce désordre ... mais d'abord, je souhaite qu'il y ait un moyen de découvrir des fichiers qui sont non utilisé.