2010-11-19 21 views
0

Ich möchte in der Lage sein, meinen Code zu bewegen und in der Lage sein, den Pfad zu entdecken, um den Wert bestimmter Variablen zu beeinflussen. Dies wird auf der Seite platziert, auf der die Variablen initialisiert werden.Dynamisch Wege finden, gibt es einen besseren Weg?

Hier ist, was ich kam mit:

$path_array = explode('/', $_SERVER['SCRIPT_FILENAME']); 

$out = ""; 
// -3 represents the number of folders and files to go back to reach the wanted path 

for($i=0; $i < count($path_array) - 3; $i++){ 
    $out .= $path_array[$i].'/'; 
} 

Dann, als ein Beispiel kann ich folgendes tun:

$dyn_path_1 = $out . 'folder1/'; 
$dyn_path_2 = $out . 'folder2/something_else/'; 
$dyn_path_3 = $out . 'folder3/'; 

Sind in Funktionen dort gebaut, die ich mache, dass würde fehlen könnte das obsolet?

ps: dies würde uns ermöglichen, mehrere Arbeitskopien von Code zu haben, ohne uns um diese Variablen kümmern zu müssen, wenn wir den Code auschecken.

Edit # 1:

Pfad der Variablendatei: root/ordnerA/ordnerB/var.php

Innerhalb var.php muss ich wieder nach unten zu root gehen, die je 2-3 Schritte auf der Methode. Ich frage mich, ob es möglich wäre, so etwas wie dies zu tun:

echo some_function("../../file_I_know.php"); 

Welche zurückkehren könnte: C:/root/

Antwort

0

Werfen Sie einen Blick auf die "magische Konstanten" Definitionen für PHP, die meisten Leute verwenden dirname (FILE), um das Verzeichnis des anfänglich ausführenden Skript zu erhalten, binden Sie das auf eine Konstante und verwenden Sie diese als Basis für alle anderen Verzeichnisverweise Dadurch wird Ihre Skriptposition unabhängig gemacht.

Dies ist, was ich in der Regel verwenden:

if (!defined('SITE_BASE_PATH')) { 
    $baseDir = dirname(__FILE__); // Get directory of THIS file 
    $baseDir = str_replace("\\", "/", $baseDir); // Replace backslashes with forward incase we're in Windows 
    $baseDir = realpath($baseDir); // Convert relative path to real path (no '..' etc) 
    $baseDir .= "/"; // Add trailing slash - so that we can append filenames directly 
    define('SITE_BASE_PATH', $baseDir); // define the constant 
} 

oder in Kurzform:

define(SITE_BASE_PATH, realpath(str_replace("\\", "/", dirname(__FILE__))) . '/'); 

Siehe folgende Hilfe für weitere Informationen: http://php.net/manual/en/language.constants.predefined.php

+0

Wie wäre es damit: dirname (realpath ("../../ known_file.txt")); – TekiusFanatikus

+0

@TekiusFanatikus Ja, das würde funktionieren, aber das hängt davon ab, dass Dateien ihre relative Position und ihren Namen behalten, während die obige Definition keine Abhängigkeiten hat. – Orbling

+0

Einverstanden und notiert. Dies ist die Lösung, die ich am Ende benutze: dirname (str_replace ("\\", "/", realpath ("../../ bekannte_datei.txt"))) ... @All: danke für all die Hilfe! – TekiusFanatikus

0

hey, man könnte __FILE__ versuchen wollen, was der absolute Pfad der Datei ist Sie sind auf. Und dirname(__FILE__) könnte genau das sein, was Sie brauchen.

+0

Es ist '__FILE__'. Deine Antwort wurde korrigiert. – Gumbo

0

Ich denke, dies ist ein sehr boolletsicher (in index.php):

für öffentliche dir verwenden diese: realpath (dirname (__FILE__))

für Anwendungsbasis dir: realpath (dirname (__FILE__). "/../")

Hoffnung, das hilft.

Verwandte Themen