it-swarm.com.de

PHP absoluten Pfad einschließen

Ich habe auf meiner Site eine Variable namens $ basePath, die wie folgt gesetzt ist:

$basePath = '/Systems/dgw/';

Ich verwende es für alle meine CSS-, Js- und Image-Tags (so gekürzt für bessere Sichtbarkeit):

<link href="<?php echo $basePath; ?>include/assets/css/bootstrap.min.css">

Ich habe kein Problem mit diesen Include-Dateien und sie funktionieren gut, egal wo und in welchem ​​Ordner ich bin.

Ich habe eine bestimmte eingebundene Seite mit der folgenden Zeile:

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

Und das Bild zeigt sich gut. Die Zeile danach lautet:

<?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 klappt.

Hat jemand eine Idee, was falsch sein könnte?

16
digicom

Sie können PHP-Dateien nicht relativ zu Ihrer Webroot-Datei auf diese Weise einschließen. Wenn Sie den Schrägstrich als erstes Zeichen verwenden, wird der Verweis viel tiefer als nur Ihr Dokumentstammverzeichnis. Anstatt Ihren Basispfad zu verwenden, können Sie also Folgendes tun:

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

Wenn Ihr Server den "document_root" nicht auffüllt, benötigen Sie dies möglicherweise



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

Ich verwende diese Codezeile. Es geht zurück zum "Anfang" der Site-Struktur und geht dann zur gewünschten Datei.
Nehmen wir zum Beispiel an, ich habe diesen Dateibaum:
domain.com/aaa/index.php
domain.com/bbb/ccc/ddd/index.php
domain.com/_resources/functions.php

Ich kann die Datei functions.php von jedem beliebigen Ort aus einschließen, indem Sie nur das Kopieren einfügen

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



Wenn Sie diesen Code mehrmals verwenden müssen, können Sie eine Funktion erstellen, die den Teil "str_repeat ('../', (substr_count (getenv ('SCRIPT_URL'), '/') - 1))" zurückgibt. Dann fügen Sie diese Funktion einfach in die erste Datei ein, die Sie enthalten. Ich habe eine "initialize.php" -Datei, die ich ganz oben auf jeder PHP-Seite einfüge und diese Funktion enthält. Das nächste Mal, wenn ich Dateien einschließen muss, benutze ich einfach die Funktion (mit dem Namen "path_back"):

require(path_back()."/_resources/another_php_file.php");
2
user4783311

Sie können einen include_path = ".:/home/myuser/mysite.com/" zu Ihrem php.ini hinzufügen, oder Sie können etwas vor der include oder require in Ihr Skript einfügen:

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

Der erste funktioniert für alle Skripts, die auf Ihrer Website ausgeführt werden.

Die zweite Option funktioniert nur für das Skript, das die Variable setincludepath im Code hat. Für den Rest der Anwendung wird es nicht funktionieren, es sei denn, Sie haben ein Objekt, das Sie in jedem Skript aufrufen, das die Variable setincludepath hinzufügt.

0
raphvon