Скрипты PHP выводят T_STRING (вот и все)

Я использую здесь код - Как мне найти неиспользуемые функции в проекте PHP (воспроизведены ниже) в точности так, как они есть - просто путь изменен на мое местоположение, и он ведет себя следующим образом:

root@server [/var/www]# php see_unused_code.php
T_STRING

Используемый код:

<?php
    $functions = array();
    $path = "/path/to/my/php/project";
    define_dir($path, $functions);
    reference_dir($path, $functions);
    echo
        "<table>" .
                "<tr>" .
                        "<th>Name</th>" .
                        "<th>Defined</th>" .
                        "<th>Referenced</th>" .
                "</tr>";
    foreach ($functions as $name => $value) {
        echo
                "<tr>" . 
                        "<td>" . htmlentities($name) . "</td>" .
                        "<td>" . (isset($value[0]) ? count($value[0]) : "-") . "</td>" .
                        "<td>" . (isset($value[1]) ? count($value[1]) : "-") . "</td>" .
                "</tr>";
    }
    echo "</table>";
    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:

PHP 5.3.3 (cli) (built: Aug  7 2010 14:49:50)

person siliconpi    schedule 17.11.2010    source источник


Ответы (1)


Вы должны посмотреть исходный код, прочитать его, понять. Не просто скупи-пасти-беги. Посмотрите на определение функции define_file(): if ($token[0] != T_STRING) die("T_STRING");

Вы можете отладить его, указав путь к файлу, в котором возникает это условие.

if ($token[0] != T_STRING) die("T_STRING: " . $path . " : " . $token[0]);

Тогда вы поймете, в чем настоящая проблема.

person Ruel    schedule 17.11.2010
comment
Ой, извините! T_STRING - это тип персонажа, и это поставило меня в тупик! - person siliconpi; 17.11.2010