function findFunction($function, $inputDirectory=""){
//version 0.1
$docRoot = getenv("DOCUMENT_ROOT");
$folderArray = null;
$dirArray = null;
// open directory
$directory = opendir($docRoot.$inputDirectory);
// get each entry
while($entryName = readdir($directory)) {
if(is_dir($entryName) && $entryName != "." && $entryName != ".."){
$folderArray[] = str_replace($inputDirectory, "", $entryName);
}
$ext = explode(".", $entryName);
if(!empty($ext[1])){
$dirArray[] = $docRoot.$inputDirectory."/".$entryName;
}
}
// close directory
closedir($directory);
$found = false;
if(is_array($dirArray)){
foreach($dirArray as $current){
$myFile = file_get_contents($current);
$myFile = str_replace("<?php", "", $myFile);
$myFile = str_replace("?>", "", $myFile);
if(preg_match("/function ".$function."/", $myFile)){
$found = true;
$foundLocation = $current;
break;
}
}
}
if($found){
echo $foundLocation;
exit;
} else if(is_array($folderArray)){
foreach($folderArray as $folder){
if(!isset($return)){
$return = findFunction($function, $inputDirectory."/".$folder);
} else if($return == false){
$return = findFunction($function, $inputDirectory."/".$folder);
}
}
} else {
return false;
}
}
findFunction("testFunction", "rootDirectory");
Hoffe, dass es jemand hilft. Wenn die eigentliche Funktion außerhalb von httpdocs liegt, kann sie nicht gefunden werden, da der Server so eingerichtet wird, dass er nicht erlaubt wird. Testen Sie es nur einen Ordner tief, aber die rekursive Methodik sollte in der Theorie funktionieren.
Dies ist wie Version 0.1, aber ich habe nicht vor, die Entwicklung weiter so, wenn jemand es aktualisiert, fühlen Sie sich frei, es erneut zu veröffentlichen.
Das tut definitiv, was Sie wollen. Aber Vorsicht 'debug_backtrace()' ist ein teurer Anruf. Machen Sie sich nicht daran gewöhnt, Call-Ketten zu bestimmen. Wenn Sie diese Funktionen "schützen" möchten, überprüfen Sie OOP und geschützte Methoden. – ircmaxell
vielen Dank an euch alle! –