Function list of php file

前端 未结 12 1305
南方客
南方客 2020-11-28 14:40

How to get list of functions that are declared in a php file

12条回答
  •  日久生厌
    2020-11-28 15:18

    To get list of defined and used functions in code, with small useful file manager, you can use code below. Enjoy!

    if ((!function_exists('check_password'))||(!check_password()) ) exit('Access denied.'); //...security!
    
    echo "";
    if (!$f)    echo nl2br(htmlspecialchars('
        Useful parameters:
        $ext - allowed extensions, for example: ?ext=.php,css
        $extI - case-insensitivity, for example: ?extI=1&ext=.php,css
    '));
    
    if (($f)&&(is_readable($_SERVER['DOCUMENT_ROOT'].$f))&&(is_file($_SERVER['DOCUMENT_ROOT'].$f))) {
    
        echo "

    File $f

    \n"; if(function_exists('get_used_functions_in_code')) { echo '

    Used:

    '; $is=get_used_functions_in_code(file_get_contents($_SERVER['DOCUMENT_ROOT'].$f)); sort($is); $def=get_defined_functions(); $def['internal']=array_merge($def['internal'], array('__halt_compiler', 'abstract', 'and', 'array', 'as', 'break', 'callable', 'case', 'catch', 'class', 'clone', 'const', 'continue', 'declare', 'default', 'die', 'do', 'echo', 'else', 'elseif', 'empty', 'enddeclare', 'endfor', 'endforeach', 'endif', 'endswitch', 'endwhile', 'eval', 'exit', 'extends', 'final', 'finally', 'for', 'foreach', 'function', 'global', 'goto', 'if', 'implements', 'include', 'include_once', 'instanceof', 'insteadof', 'interface', 'isset', 'list', 'namespace', 'new', 'or', 'print', 'private', 'protected', 'public', 'require', 'require_once', 'return', 'static', 'switch', 'throw', 'trait', 'try', 'unset', 'use', 'var', 'while')); foreach ($def['user'] as &$e) $e=strtolower($e); unset($e); foreach ($is as &$e) if (!in_array(strtolower($e), $def['internal'], TRUE)) $e=''.$e.''; unset($e); //user-defined functions will be red echo implode('
    '.PHP_EOL,$is); } else echo "Error: missing function 'get_used_functions_in_code' !"; if(function_exists('get_defined_functions_in_code')) { echo '

    Defined:

    '; $is=get_defined_functions_in_code(file_get_contents($_SERVER['DOCUMENT_ROOT'].$f)); sort($is); echo implode('
    ',$is); } else echo "Error: missing function 'get_defined_functions_in_code' !"; } /* File manager */ else { if (!function_exists('select_icon')) { function select_icon($name) {$name = pathinfo($name); return '['.$name["extension"].']';} } if($ext) $extensions=explode(',',strrev($ext)); if(!$f) $f=dirname($_SERVER['PHP_SELF']); echo "

    Dir ".htmlspecialchars($f)."


    \n"; $name=scandir($_SERVER['DOCUMENT_ROOT'].$f); foreach($name as $name) { if (!($fileOK=(!isset($extensions)))) { foreach($extensions as $is) if (!$fileOK) $fileOK=((strpos(strrev($name),$is)===0)||($extI &&(stripos(strrev($name),$is)===0))); } $is=is_dir($fullName=$_SERVER['DOCUMENT_ROOT']."$f/$name"); if ($is || $fileOK) echo ''; if ($is) echo ''; elseif ($fileOK) echo ''; if ($is || $fileOK) echo ''.PHP_EOL; } echo "\n
    '.select_icon($is ? 'x.folder' : $name).'  '.($is ? '[' : '').''.htmlspecialchars($name).''.($is ? ']' : '').'   '.number_format(filesize($fullName),0,"."," ").'  '.date ("Y.m.d (D) H:i",filemtime($fullName)).'
    \n"; } echo "

    ".date ("Y.m.d (D) H:i").""; return; /********************************************************************/ function get_used_functions_in_code($source) { $tokens = token_get_all($source); $functions = array(); $thisStringIsFunc = 0; foreach($tokens as $token) { if(($token[0]!=T_WHITESPACE)&&((!is_string($token))||($token[0]!='('))) unset($func); if((is_array($token))&&(in_array($token[0],array(T_EVAL,T_EXIT,T_INCLUDE,T_INCLUDE_ONCE,T_LIST,T_REQUIRE,T_REQUIRE_ONCE,T_RETURN,T_UNSET)))) {$token[0]=T_STRING;$thisStringIsFunc=1;} switch($token[0]) { case T_FUNCTION: $thisStringIsFunc=-1; break; case T_STRING: if($thisStringIsFunc>0) { if (!in_array(strtoupper($token[1]),$functionsUp)) {$functions[]=$token[1];$functionsUp[]=strtoupper($token[1]);} $thisStringIsFunc = 0; } elseif ($thisStringIsFunc+1>0) { $func = $token[1]; } else $thisStringIsFunc = 0; break; case '(':if($func) if(!in_array(strtoupper($func),$functionsUp)) {$functions[]=$func;$functionsUp[]=strtoupper($func);} } } return $functions; } /********************************************/ function get_defined_functions_in_code($source) { $tokens = token_get_all($source); ... then Andrew code (get_defined_functions_in_file) (https://stackoverflow.com/a/2197870/9996503) }

提交回复
热议问题