2014-04-07 16 views
12

ich eine Variable auf meiner Seite haben $ basePath genannt, die eingestellt wird, wie:PHP sind absolute Pfad

$basePath = '/Systems/dgw/'; 

ich es verwende alle meine css, js und Bilder-Tags als so (für eine bessere Sichtbarkeit verkürzt) :

Ich habe kein Problem mit diesen umfasst und sie funktionieren gut in wo auch immer Datei und in welchem ​​Ordner ich bin.

Ich habe eine bestimmte eingeschlossene Seite, die die folgende Zeile hat:

<img src="<?php echo $basePath; ?>images/new_logo.png" alt="logo"/> 

Und das Bild zeigt nur in Ordnung. Die Zeile, nach der es heißt:

<?php include($basePath.'include/assets/common/topMessages.php');?> 

Aber das Include passiert nicht. Wenn ich es so versuche:

<?php include('../../include/assets/common/topMessages.php');?> 

Es funktioniert.

Jeder hat eine Idee, was könnte falsch sein?

+0

'echo' nicht _include_ nichts ... – CBroe

+0

Sorry, kopiert die falsche Zeile. Fest. – digicom

+5

Grundsätzlich gibt es einen Unterschied zwischen Ihrem Webroot (dh. Www.example.com/'ist der Stamm Ihrer Website) und der Wurzel eines (Unix-) Dateisystems. Der Webroot wird einem Pfad im Dateisystem zugeordnet. Oft ist 'www.example.com /' auf etwas wie '/ var/www/example.com/http_docs /' abgebildet. Ihr Webserver übersetzt automatisch alle Anfragen für '/ a/b/c' nach'/var/www/example.com/http_docs/a/b/c'. Wenn Sie jedoch eine Datei über PHP einbinden, wird der Webserver nicht aufgefordert, den Pfad zu übersetzen, und er sucht in Ihrem Dateisystem nach '/ a/b/c', was offensichtlich nicht existiert. – Tularis

Antwort

34

Sie können php-Dateien relativ zu Ihrer Webroot nicht auf diese Weise einschließen, denn wenn Sie den Schrägstrich als erstes Zeichen verwenden, wird die Referenz viel tiefer gehen als nur Ihre Dokumentwurzel. Anstatt also Ihre basepath verwenden, können Sie etwas tun:

<?php 
    $path = $_SERVER['DOCUMENT_ROOT']; 
    $path .= "/yourpath/yourfile.php"; 
    include_once($path); 
?> 
+0

Das hat funktioniert. Vielen Dank ! – digicom

0

Wenn der Server nicht die "document_root" nicht füllen, müssen Sie diese



require(str_repeat('../',(substr_count(getenv('SCRIPT_URL'),'/')-1))."/path/to/file.php"); 

Ich benutze diese Codezeile. Es geht zurück zum "Top" der Seitenstruktur, dann geht es zur gewünschten Datei.
Zum Beispiel lassen Sie uns sagen, dass ich diese Datei Baum haben:
domain.com/aaa/index.php
domain.com/bbb/ccc/ddd/index.php
domain.com/_resources/functions.php

kann ich die functions.php Datei aus sind, wo immer ich bin, nur durch Kopie einfügen

require(str_repeat('../',(substr_count(getenv('SCRIPT_URL'),'/')-1))."/_resources/functions.php"); 



Wenn Sie diesen Code oft verwenden müssen, können Sie eine Funktion erstellen, die die „str_repeat zurückgibt ('../',(substr_count(getenv('SCRIPT_URL'),'/')-1)). Fügen Sie diese Funktion dann einfach in die erste Datei ein, die Sie einschließen. Ich habe eine "initialize.php" Datei, die ich ganz oben auf jeder PHP-Seite einfüge und die diese Funktion enthält.Das nächste Mal, ich habe, um Dateien, ich in der Tat verwenden nur die Funktion (mit dem Namen „path_back“):

require(path_back()."/_resources/another_php_file.php"); 
0

Sie können eine include_path = ".:/home/myuser/mysite.com/" zu Ihrem php.ini hinzufügen oder Sie können, bevor die so etwas wie dies in Ihrem Skript hinzufügen include oder require:

set_include_path(get_include_path() . ":/home/myuser/mysite.com/"); 

Die erste für alle Skripts in Ihre Website ausgeführt wird funktionieren.

Die zweite Option wird nur für das Skript arbeiten, die die setincludepath auf dem Code hat, für den Rest der Anwendung es nicht, wenn Sie ein Objekt, das Sie in jedem Skript, das die setincludepath hinzufügen anrufen funktioniert.