Как найти неиспользуемые функции в проекте PHP

Спасибо Грегу и Дейву за php-readfile обратную связь. Это было phtml не совсем то, что я искал, но php-cli я решил потратить немного php-errors времени на его изучение и php придумал это быстрое и грязное php-cgi решение:

" .
            "" .
                "Name" .
                "Defined" .
                "Referenced" .
            "";
    foreach ($functions as $name => $value) {
        echo
            "" . 
                "" . htmlentities($name) . "" .
                "" . (isset($value[0]) ? count($value[0]) : "-") . "" .
                "" . (isset($value[1]) ? count($value[1]) : "-") . "" .
            "";
    }
    echo "";
    function define_dir($path, &$functions) {
        if ($dir = opendir($path)) {
            while (($file = readdir($dir)) !== false) {
                if (substr($file, 0, 1) == ".") continue;
                if (is_dir($path . "/" . $file)) {
                    define_dir($path . "/" . $file, $functions);
                } else {
                    if (substr($file, - 4, 4) != ".php") continue;
                    define_file($path . "/" . $file, $functions);
                }
            }
        }       
    }
    function define_file($path, &$functions) {
        $tokens = token_get_all(file_get_contents($path));
        for ($i = 0; $i < count($tokens); $i++) {
            $token = $tokens[$i];
            if (is_array($token)) {
                if ($token[0] != T_FUNCTION) continue;
                $i++;
                $token = $tokens[$i];
                if ($token[0] != T_WHITESPACE) die("T_WHITESPACE");
                $i++;
                $token = $tokens[$i];
                if ($token[0] != T_STRING) die("T_STRING");
                $functions[$token[1]][0][] = array($path, $token[2]);
            }
        }
    }
    function reference_dir($path, &$functions) {
        if ($dir = opendir($path)) {
            while (($file = readdir($dir)) !== false) {
                if (substr($file, 0, 1) == ".") continue;
                if (is_dir($path . "/" . $file)) {
                    reference_dir($path . "/" . $file, $functions);
                } else {
                    if (substr($file, - 4, 4) != ".php") continue;
                    reference_file($path . "/" . $file, $functions);
                }
            }
        }       
    }
    function reference_file($path, &$functions) {
        $tokens = token_get_all(file_get_contents($path));
        for ($i = 0; $i < count($tokens); $i++) {
            $token = $tokens[$i];
            if (is_array($token)) {
                if ($token[0] != T_STRING) continue;
                if ($tokens[$i + 1] != "(") continue;
                $functions[$token[1]][1][] = array($path, $token[2]);
            }
        }
    }
?>

Вероятно, я потрачу php-errors на это еще немного времени, чтобы php-include быстро найти файлы и номера php-mail строк определений функций php-mail и ссылок; эта информация php-errors собирается, просто не отображается.

php

2022-10-24T15:09:03+00:00