2016-09-03 9 views
0

Dies ist nur ein Beispiel zu erklären.Wie bekomme ich einen Pfad vom Anrufer

[./includes/functions.inc.php] 
function getPHPResult($path) { 
    ob_start(); 
    include $path; 
    $result = ob_get_clean(); 

    return $result; 
} 

[./pages/a.php] 
echo getPHPResult('b.php'); 

[./pages/b.php] 
some php code. 

Dieser Code funktioniert nicht.
Da 'b.php' in a.php ist nicht gültig Pfad in 'getPHPResult'.

Wenn ich include 'b.php' in a.php verwende, wird b.php im selben Verzeichnis mit a.php geladen.
Aber wenn ich getPHPResult ('b.php') in a.php verwende, wird b.php im selben Verzeichnis mit functions.inc.php geladen.
Aber ich will in demselben Verzeichnis laden b.php mit a.php

So sollte ich getPHPResult('b.php')-getPHPResult('../includes/b.php') ändern.
Aber es wird nicht funktionieren, wenn a.php und b.php in ein anderes Verzeichnis verschoben werden.

Dann möchte ich einen korrekten Pfad in getPHPResult Funktion finden.
Meine Lösung ist nur debug_backtrace verwenden.

function getPHPResult($path) { 
    $backtrace = debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT, 2); 
    $dir = dirname($backtrace[1]['file']); 

    ob_start(); 
    include $dir . '/' . $path; 
    return ob_get_clean(); 
} 

Aber ich denke, es ist nicht gut.
Wie kann ich einen korrekten Pfad ohne debug_backtrace finden?

+0

@Ryan Vincent Ich versuche nur eine Template-Engine zu erstellen. Der Code der Spitze ist nur ein Beispiel zu erklären. –

Antwort

0

Wenn sich die Position der Skripts wahrscheinlich ändert, sollten Sie möglicherweise versuchen, absolute Pfade anstelle von relativen Pfaden zu verwenden. In PHP gibt es einige vordefinierte "magic constants", die Ihnen dabei helfen können.

__FILE__ Der vollständige Pfad und Dateiname der Datei mit aufgelösten Symlinks. Wenn es in einem Include verwendet wird, wird der Name der enthaltenen Datei zurückgegeben.

Die Konstante __FILE__ gibt immer den vollständigen Pfad und Dateinamen des Skripts zurück. Vielleicht können Sie das als Ausgangspunkt verwenden.

+0

, aber die Aufruferdatei darf nicht mit \ _ \ _ FILE \ _ \ _ identisch sein. wenn ... index.php include a.php –

1

Ich verstehe nicht, was du meinst. Aber wenn Sie wollen bekommen Dateinamen einer derzeit PHP-Skript verwenden Ausführen dieser,

echo $_SERVER['PHP_SELF']; 
+0

Sorry für mein schlechtes Englisch. –

+0

Ich möchte einen relativen Pfad von der Anruferdatei in Funktion erhalten. Wenn ich 'include 'b.php' in a.php verwende, dann befindet sich b.php im selben Verzeichnis wie a.php. wenn aber 'getPHPResult (' b.php ') 'aufgerufen wird, muss b.php im gleichen Verzeichnis wie functions.inc.php liegen. aber ich möchte b.php im selben Verzeichnis mit a.php laden, also wie kann ich es machen? –

+0

dann verwenden Sie dies und schauen Sie sich an echo $ _SERVER ['SCRIPT_FILENAME']; ' – Sidath

0

Wenn a.php und b.php im selben Verzeichnis sein wird, können Sie sicher gehen Sie wie folgt:

[ a.php]

echo getPHPResult(__DIR__ . '/b.php'); 
+0

Vielen Dank für die Antwort. aber die Art, Pfad in Funktion zu berechnen, existiert nicht? –

Verwandte Themen