Was wäre in PHP der sauberste Weg, um das übergeordnete Verzeichnis des aktuell ausgeführten Skripts relativ zum WWW-Stammverzeichnis abzurufen? Angenommen, ich habe:
$_SERVER['SCRIPT_NAME'] == '/relative/path/to/script/index.php'
Oder nur:
$something_else == '/relative/path/to/script/'
Und ich muss /relative/path/to/
mit Schrägstrichen richtig einfügen. Was würdest du vorschlagen? Ein Einzeiler ist bevorzugt.
BEARBEITEN
Ich muss einen Pfad relativ zum WWW-Stamm erhalten, dirname(__FILE__)
gibt mir einen absoluten Pfad im Dateisystem, damit das nicht funktioniert. $_SERVER['SCRIPT_NAME']
Auf der anderen Seite "beginnt" an der WWW-Wurzel.
define(ROOT_PATH, dirname(__FILE__));
früh in Ihrem Stack zu arbeiten (hoffentlich verwenden Sie einen gemeinsamen Dispatcher oder Bootstrap, damit dies keine Kopfschmerzen verursacht) und diesen in Verbindung mit anderen Funktionen zu verwenden, um einen relativen Pfad zu erstellen.$_SERVER['SCRIPT_NAME']
, um das Verzeichnis zu erhalten, aber ich mag diese Idee. Hervorragende Antwort.dirname(__FILE__, 2)
kann anstelle von verwendet werdendirname(dirname(__FILE__))
.dirname
ChangelogAb PHP 5.3.0 können Sie
__DIR__
für diesen Zweck verwenden.Siehe PHP Magic-Konstanten .
C:\www>php --version PHP 5.5.6 (cli) (built: Nov 12 2013 11:33:44) Copyright (c) 1997-2013 The PHP Group Zend Engine v2.5.0, Copyright (c) 1998-2013 Zend Technologies C:\www>php -r "echo __DIR__;" C:\www
quelle
Wenn ich Ihre Frage richtig verstanden habe, wird angenommen, dass Ihr laufendes Skript lautet
Dies würde Ihnen das übergeordnete Verzeichnis Ihres laufenden Skripts relativ zum Dokument www geben:
$parent_dir = dirname(dirname($_SERVER['SCRIPT_NAME'])) . '/'; //$parent_dir will be '/relative/path/to/'
Wenn Sie das übergeordnete Verzeichnis Ihres laufenden Skripts relativ zum Serverstamm haben möchten:
$parent_dir = dirname(dirname($_SERVER['SCRIPT_FILENAME'])) . '/'; //$parent_dir will be '/root/some/path/relative/path/to/'
quelle
$url = BASE_URL . '/my/path/';
für mich besser aussieht als$url = BASE_URL . 'my/path/';
. Gibt es einen Standardweg oder was ist am häufigsten?So rufen Sie das übergeordnete Verzeichnis des aktuellen Skripts ab
$parent_dir = dirname(__DIR__);
quelle
Fugly, aber das wird es tun:
substr($_SERVER['SCRIPT_NAME'], 0, strpos($_SERVER['SCRIPT_NAME'],basename($_SERVER['SCRIPT_NAME'])))
quelle
Ich hoffe, dies wird dir helfen.
echo getcwd().'<br>'; // getcwd() will return current working directory echo dirname(getcwd(),1).'<br>'; echo dirname(getcwd(),2).'<br>'; echo dirname(getcwd(),3).'<br>';
Ausgabe :
quelle
$dir = dirname($file) . DIRECTORY_SEPARATOR;
quelle
DIRECTORY_SEPARATOR define
unnötig? PHP scheint mit beiden Arten von Schrägstrichen `/ \` auch auf Windows-Computern gut zu funktionieren.Folgendes verwende ich, da ich nicht> 5.2 verwende
function getCurrentOrParentDirectory($type='current') { if ($type == 'current') { $path = dirname(__FILE__); } else { $path = dirname(dirname(__FILE__)); } $position = strrpos($path, '/') + 1; return substr($path, $position); }
Doppelter Verzeichnisname mit Datei, wie von @mike b für das übergeordnete Verzeichnis vorgeschlagen, und das aktuelle Verzeichnis wird gefunden, indem diese Syntax nur einmal verwendet wird.
Beachten Sie, dass diese Funktion nur den NAMEN zurückgibt. Danach müssen Schrägstriche hinzugefügt werden.
quelle
Versuche dies. Funktioniert sowohl auf Windows- als auch auf Linux-Servern.
str_replace ('\\', '/', dirname (dirname (__ FILE__)))
quelle
Dies ist eine Funktion, die ich benutze. Hat es einmal erstellt, damit ich immer diese Funktionalität habe:
function getDir(){ $directory = dirname(__FILE__); $directory = explode("/",$directory); $findTarget = 0; $targetPath = ""; foreach($directory as $dir){ if($findTarget == 1){ $targetPath = "".$targetPath."/".$dir.""; } if($dir == "public_html"){ $findTarget = 1; } } return "http://www.".$_SERVER['SERVER_NAME']."".$targetPath.""; }
quelle
Dies ist auch eine mögliche Lösung
$relative = '/relative/path/to/script/'; $absolute = __DIR__. '/../' .$relative;
quelle
Ich hoffe das wird helfen
function get_directory(){ $s = empty($_SERVER["HTTPS"]) ? '' : ($_SERVER["HTTPS"] == "on") ? "s" : ""; $protocol = substr(strtolower($_SERVER["SERVER_PROTOCOL"]), 0, strpos(strtolower($_SERVER["SERVER_PROTOCOL"]), "/")) . $s; $port = ($_SERVER["SERVER_PORT"] == "80") ? "" : (":".$_SERVER["SERVER_PORT"]); return $protocol . "://" . $_SERVER['SERVER_NAME'] . dirname($_SERVER['PHP_SELF']); } define("ROOT_PATH", get_directory()."/" ); echo ROOT_PATH;
quelle
Habe es selbst, es ist ein bisschen klobig, aber es funktioniert:
substr(dirname($_SERVER['SCRIPT_NAME']), 0, strrpos(dirname($_SERVER['SCRIPT_NAME']), '/') + 1)
Wenn ja
/path/to/folder/index.php
, führt dies zu/path/to/
.quelle
dirname
müssen, um zum übergeordneten Verzeichnis zu gelangen, siehe meine Antwort.