List of php file functions

How to get a list of functions declared in php file

+9
source share
11 answers

You can get a list of the current function using get_defined_functions():

$arr = get_defined_functions();
var_dump($arr['user']);

Internal functions are in the index internal, while a user-defined function is specified in the index user.

Please note that this will list all functions that were declared before this call. This means that if you are include()files with functions, they will also be listed. It is not possible to separate functions for each file, except that you are not include()a single file before the call get_defined_functions().


, , , .

function get_defined_functions_in_file($file) {
    $source = file_get_contents($file);
    $tokens = token_get_all($source);

    $functions = array();
    $nextStringIsFunc = false;
    $inClass = false;
    $bracesCount = 0;

    foreach($tokens as $token) {
        switch($token[0]) {
            case T_CLASS:
                $inClass = true;
                break;
            case T_FUNCTION:
                if(!$inClass) $nextStringIsFunc = true;
                break;

            case T_STRING:
                if($nextStringIsFunc) {
                    $nextStringIsFunc = false;
                    $functions[] = $token[1];
                }
                break;

            // Anonymous functions
            case '(':
            case ';':
                $nextStringIsFunc = false;
                break;

            // Exclude Classes
            case '{':
                if($inClass) $bracesCount++;
                break;

            case '}':
                if($inClass) {
                    $bracesCount--;
                    if($bracesCount === 0) $inClass = false;
                }
                break;
        }
    }

    return $functions;
}

.

+18

get_defined_functions() , . , :

  $functions = get_defined_functions();
  $last_index = array_pop(array_keys($functions['user']));
  // Include your file here.
  $functions = get_defined_functions();
  $new_functions = array_slice($functions['user'], $last_index);
+12

get_defined_functions(), script.

: http://www.php.net/manual/en/function.get-defined-functions.php

, , http://www.php.net/token_get_all :

$arr = token_get_all(file_get_contents('anotherfile.php'));

, . http://www.php.net/manual/en/tokens.php

+9

, , :

preg_match_all('/function (\w+)/', file_get_contents(__FILE__), $m);
var_dump($m[1]);
+2

- , , :

: Functions.php ( - , Mather, )

<?php

    // gewoon een ander php script. door het gebruiken van meerdere includes kun je gemakkelijk samen aan één app werken

    function johannes($fnaam, $mode, $array){

        switch ($mode) {
            case 0:
                echo "
                        <center>
                        <br><br><br><br><br>
                            he johannes!<br><br>

                            klik hier voor random text:<br>
                            <input type='submit' value='superknop' id='btn' action='randomding' level='0' loadloc='randomshit' />
                            <p id='randomshit'></p>
                        </center>
                     ";
                break;
            case 1:
                echo "bouw formulier";
                break;
            case 2:
                echo "verwerk formulier";
                break;
             default:
                echo "[Error: geen mode gedefinieerd voor functie '$fnaam'!]";
        }
    }

    function randomding($fnaam, $mode, $array){

        $randomar = array('He pipo wat mot je!','bhebhehehehe bheeeee. rara wie ben ik?','poep meloen!','He johannes, wat doeeeeee je? <input type="text" name="doen" class="deze" placeholder="Wat doe je?" /> <input type="button" value="vertellen!" id="btn" action="watdoetjho" level="0" loadloc="hierzo" kinderen="deze"> <p id="hierzo"></p>','knopje de popje opje mopje','abcdefghijklmnopqrstuvwxyz, doe ook nog mee','Appien is een **p!!!!!! hahhahah<br><br><br><br> hahaha','Ik weet eiegelijk niks meer te verzinnen','echt ik weet nu niks meer','nou oke dan[[][(!*($@#&*$*^éäåðßð','he kijk een microboat: <br> <img src="https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcS_n8FH6xzf24kEc31liZF6ULHCn2IINFurlFZ_G0f0_F4sLTi74w" alt="microboat" />');

        $tellen = count($randomar);
        $tellen--;

        $rand = rand(0, $tellen);

        echo $randomar[$rand];
    }

    function watdoetjho($fnaam, $mode, $array){

        $dit = $array['doen'];
        echo "Johannes is: $dit";

    }

?>

3 :

  1. watdoetjho

:

get_defined_functions, . , PHP , .

token_get_all, , .

, , . , php, .

:

  • 334 ( )
  • 307 ( )

, 334 , :

334 - | - - | - 5

, . , , 3- (5) 307.

- :

307 - | - - | - 5

PHP :

<?php
    error_reporting(E_ALL ^ E_NOTICE); // Or we get these undefined index errors otherwise use other method to search array

    // Get the file and get all PHP language tokens out of it
    $arr = token_get_all(file_get_contents('Functions.php'));

    //var_dump($arr); // Take a look if you want

    //The array where we will store our functions
    $functions = array();

    // loop trough
    foreach($arr as $key => $value){

            //filter all user declared functions
        if($value[0] == 334){
                   //Take a look for debug sake
            //echo $value[0] .' -|- '. $value[1] . ' -|- ' . $value[2] . '<br>';

                    //store third value to get relation
                    $chekid = $value[2];
        }

            //now list functions user declared (note: The last check is to ensure we only get the first peace of information about the function which is the function name, else we also list other function header information like preset values)
        if($value[2] == $chekid && $value[0] == 307 && $value[2] != $old){

                    // just to see what happens
                    echo $value[0] .' -|- '. $value[1] . ' -|- ' . $value[2] . '<br>';
                    $functions[] = $value[1];
                    $old = $chekid; 
        }
    }
?>

:

307 -|- johannes -|- 5
307 -|- randomding -|- 31
307 -|- watdoetjho -|- 43
0

, .

https://gist.github.com/tonylegrone/8742453

. , , :

$functions = get_functions_in_file(__FILE__);

0

array_diff

$funcs = get_defined_functions()["user"];

require_once 'myFileWithNewFunctions.php'; // define function testFunc() {} here

var_dump( array_values( array_diff(get_defined_functions()["user"], $funcs) ) )
// output: array[ 0 => "test_func"]

"" ,

foreach($funcsDiff AS $newFunc) {
   $func = new \ReflectionFunction($newFunc);
   echo $func->getName(); // testFunc
}
0

, , . !

if ((!function_exists('check_password'))||(!check_password()) ) exit('Access denied.'); //...security!

echo "<html><body>";
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 "<h3>File <strong>$f</strong></h3>\n";

    if(function_exists('get_used_functions_in_code')) {
        echo '<h3>Used:</h3>';
        $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='<span style="color: red">'.$e.'</span>'; unset($e); //user-defined functions will be red
        echo implode('<br />'.PHP_EOL,$is);
    }
    else echo "Error: missing function 'get_used_functions_in_code' !";
    if(function_exists('get_defined_functions_in_code')) {
        echo '<br /><h3>Defined:</h3>';
        $is=get_defined_functions_in_code(file_get_contents($_SERVER['DOCUMENT_ROOT'].$f));
        sort($is);
        echo implode('<br />',$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 "<h3>Dir ".htmlspecialchars($f)."</h3><br />\n<table>";
    $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 '<tr><td>'.select_icon($is ? 'x.folder' : $name).'&nbsp;</td><td>&nbsp;'.($is ? '[' : '').'<a href="?f='.rawurlencode("$f/$name").($extI ? "&extI=$extI" : '').($ext ? "&ext=$ext" : '').'">'.htmlspecialchars($name).'</a>'.($is ? ']' : '').'</td>';
        if ($is) echo '<td>&nbsp;</td><td>&nbsp;</td>';
        elseif ($fileOK) echo '<td style="text-align: right">&nbsp;'.number_format(filesize($fullName),0,"."," ").'&nbsp;</td><td>&nbsp;'.date ("Y.m.d (D) H:i",filemtime($fullName)).'</td>';
        if ($is || $fileOK) echo '</tr>'.PHP_EOL;
    }
    echo "\n</table>\n";
}

echo "<br /><br />".date ("Y.m.d (D) H:i")."</body></html>";
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)
}
0

(, ) . , preg_match_all.

, .

https://gist.github.com/komputronika/f92397b4f60870131ef52930faf09983

$a = functions_in_file( "mylib.php" );
0

( , @joachim) - get_defined_functions, 'user' ( )

,

<?php
//Just to be sure it empty (as it should be)
$functions = get_defined_functions();
print_r($functions['user']); 

//Load the needed file 
require_once '/path/to/your/file.php';

//display the functions loaded 
$functions2 = get_defined_functions();
print_r($functions2['user']);
0
source

include in the file and try:

$functions = get_defined_functions();
print_r($functions['user']);
-1
source

All Articles