Как определить, какие файлы PHP фактически используются, а какие нет?

Я получил большой веб-сайт PHP, о котором я сейчас собираюсь позаботиться. Он содержит сотни отдельных файлов PHP, но я подозреваю, что только менее половины используется. Большинство из них, вероятно, могут быть удалены.

Но последнее, что я действительно хочу сделать, это пройти через код каждого файла и проверить, требуется ли связанное, включенное, и т. Д. другим лицам или может быть безопасно удален.

Знаете ли вы, есть ли какой-нибудь инструмент, способный это сделать?

Взгляните на phpxref , он может сделать то, что вам нужно.

Перекрестные ссылки PHP-классы, функции, переменные, константы и требования / включения.

Проблема с анализом кода с помощью автоматизированного инструмента заключается в том, что вы можете найти партии файлов, которые связаны друг с другом, но пакет файлов никогда не используется. И наоборот, может быть файл, к которому обращаются напрямую, но не использует другие файлы и не входит в другие файлы.

Обычно то, что я делаю, в отчаянии, добавляет запись в каждый файл. Простая запись __FILE__ в файл журнала при доступе к файлу. Это увеличивает накладные расходы по всем направлениям. Но через определенный промежуток времени вы получаете доступ к вашему списку файлов и их использование.

Вы также можете анализировать файл журнала на регулярной основе и удалять ведение журнала из файлов, которые, как вы знаете, используются, уменьшая накладные расходы, когда вы идете. В конце вы можете искать файлы, у которых по-прежнему есть код регистрации, чтобы узнать, какие из них не были использованы.

Посмотрите на phpdcd

phpdcd – это детектор мертвых кодов (DCD) для PHP-кода. Он сканирует проект PHP для всех объявленных функций и методов и сообщает, что это «мертвый код», который не вызывается хотя бы один раз.

Но не ожидайте от него никаких чудес.

Если вы используете инструмент для тестирования, он скажет, какие из них определенно используются для любых функций программного обеспечения, которое вы выполняли. (Очевидно, чем больше вы выполняете программное обеспечение, тем больше его выполняет исполняемая не мертвая часть.). Сюда входит любой файл, доступный через внешнюю ссылку html; конечно, вы должны использовать эту ссылку, поскольку она является частью вашей функциональности приложения.

Тогда вы можете проверить те, которые, по его словам, не используются, действительно решают, в чем дело.

Наш инструмент проверки PHP PHP Test Coverage примет список всех файлов, которые вы хотите проверить, и позволит вам легко собирать данные о пробных покрытиях. Он содержит сводный отчет о том, какие файлы имеют какой-либо охват; те, у кого 0% охвата, являются теми, которые, вероятно, мертвы.

Существует несколько способов достижения этой цели, но все они потребуют ручной работы.

Вы, вероятно, можете лучше всего установить и использовать отладчик (например, Xdebug), который может показать вам путь, по которому движется PHP, когда вы нажимаете на них.

Другой способ – написать скрипт, который соответствует «include», «include_once», «require», «require_once». Возможно, проверьте также «eval» и «fopen», «file_get_contents» и т. Д. Убедитесь, что вы проверили / выполнили резервное копирование.

Вы можете использовать метод __construct и регистрировать его, если он используется. Вы не можете установить метод __construct после создания экземпляра. Поэтому добавьте их вручную;

 class Someclass{ private $clsName; public function __construct(){ $this->clsName = get_class($this); YourStaticLogger::yourlogFunction("whatever you want to log" . $this->clsName); } //other things } 

Вы можете отслеживать только вызываемые классы. Вот что я сделал бы.