2010-11-17 8 views
1

J'utilise le code ici - How can I find unused functions in a PHP project (reproduit ci-dessous) exactement comme il est - juste le chemin modifié à mon emplacement et il se comporte comme suit:scripts PHP sortie « de T_STRING » (qu'il est)

[email protected] [/var/www]# php see_unused_code.php 
T_STRING 

le code utilisé est:

<?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]); 
       } 
     } 
    } 
?> 

version PHP est:

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

Répondre

6

Vous devriez regarder le code source, lisez ça, comprends-le. Pas seulement coopy-paste-run. Regardez la définition de la fonction define_file(): if ($token[0] != T_STRING) die("T_STRING");

Vous pouvez le déboguer en affichant le chemin du fichier où cette condition se produit.

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

Ensuite, vous saurez quel est le vrai problème.

+0

Oups - désolé! T_STRING est un type de personnage et ça m'a lancé une courbe! – siliconpi