it-swarm.com.de

So legen Sie den Stammordner für fest PHP Include-Dateien

Ich habe Tage damit verbracht, das Internet zu recherchieren und kann die Antwort nicht finden, die ich verstehen und umsetzen kann. 

Ich habe die Website, in der ich include_once-Dateien verwenden möchte, und kann die Website sowohl in localhost als auch auf dem Server richtig anzeigen. 

Ich habe $_SERVER['DOCUMENT_ROOT'] schon einmal verwendet, aber es funktioniert nicht auf dem localhost, daher ist es schwierig für mich zu aktualisieren und die Änderungen an der Website vorzunehmen. 

Was ich tun möchte ist, eine Art config.php-Datei zu erstellen, in der ich sagen kann, dass der Stammordner entweder htdocs oder public_html heißt und von dort aus nach Dateien suchen.

Oder gibt es eine andere Möglichkeit, Arbeitspfade einzubeziehen?

Ich habe Antworten mit z. dirname(__FILE__), __DIR__ usw., aber sie haben nie erklärt, wie es funktionieren würde, wo es in den Code geschrieben werden sollte in den Lücken. Ich bin kein PHP - Experte. Ich versuche nur, mein Leben dadurch etwas einfacher zu machen.

15
Vetaxili

dirname(__FILE__) und __DIR__ beide sind identisch und __DIR__ wird mit PHP geliefert. 5.3

Diese werden verwendet, um den "Pfad der Datei, in der sie aufgerufen haben" anzugeben.

 URL: http: //localhost/test/a.php

DIR: --NIX 
 /var/www/test/a.php
 --SIEG
 D:\lamp\www\test\a.php 

 // a.php ist in 
 & Lt? Php 
 Echo __DIR __; 

Gibt dir das auf Linux: /var/www/test

Wenn Sie also in Ihrem gesamten Projekt einen Konfigurationsparameter benötigen, definieren Sie ihn einfach in Ihrer config.php und verwenden Sie ihn dort, wo sowohl der Dateiname als auch der Dateiname enthalten sein soll.

./
 config.php 
 index.php 
 header.php 
 footer.php 
 /lib
 foo.php 
 /tmp
 bar.php 

./config.phpdefine('ROOT', __DIR__ .'/');

./index.php include_once(ROOT .'header.php'); ... include_once(ROOT .'footer.php');

das heißt, es in tmp dir verwenden

./tmp/bar.php include_once(ROOT .'lib/foo.php');

UPDATE

// config.php
<?php
define("ROOT", __DIR__ ."/");

Also verwenden wir dies für index.php, um banner.php aufzunehmen, und banner.php wartet in ./banners/banner.php;

// index.php and the very first line!
<?php
include_once("config.php");
?>
// some html stuff
// ...
<?php include_once(ROOT ."banners/banner.php"); ?>
// some more html stuff
// ...

Sie sollten also config.php zuerst dort einfügen, wo Sie es benötigen. 

Ich denke, das ist so grundlegend wie nötig ...

UPDATE

Ihr Problem ist also kein PHP include System, sondern eine Frage, sowieso ... :)

Wenn sich Ihr Bildpfad ändert (also nicht fixiert), können Sie dies tun.

// config.php
define("ROOT", __DIR__ ."/");
define("HTTP", ($_SERVER["SERVER_NAME"] == "localhost")
   ? "http://localhost/your_work_folder/"
   : "http://your_site_name.com/"
);

// banner.php
<img src="<?php print HTTP; ?>images/banner.gif">
31
K-Gun

Normalerweise habe ich das, was Sie erwähnt haben, eine config.php in einem Include-Verzeichnis, eingerichtet und habe die folgende Zeile darin: define('BASE_PATH', str_replace('/include', '', dirname(__FILE__))); ("/ include sollte das Verzeichnis sein, in dem sich Ihre config.php-Datei befindet, sofern Sie es im Stammverzeichnis haben , Sie können einfach nur define('BASE_PATH', dirname(__FILE__)); verwenden. Wenn ich danach weitere Dateien einfügen möchte, verwende ich include_once(BASE_PATH . '/directory/file.php');.

anmerkung: Dieses Konzept ist für mich keineswegs originell.

3
jpevarnek

Um das aktuelle Arbeitsverzeichnis abzurufen/anzuzeigen, verfügt php über eine integrierte Funktion

 echo getcwd() . "\n";

Dadurch wird das aktuelle Verzeichnis Ihrer PHP-Datei angezeigt, die gerade ausgeführt wird.

1
Pir Fahim Shah

Es gibt eine Funktion namens getcwd() , die den aktuellen Arbeitsordner zurückgibt. Wenn Sie dies am Anfang Ihres Skripts aufrufen, können Sie es speichern, normalerweise in einer Konstanten mit define().

define('PROJECT_ROOT', getcwd());
1
Whisperity

Sie können auch den Include-Pfad ändern, z.

$dir = dirname(__FILE__);
set_include_path($dir . '/../library' . PATH_SEPARATOR . $dir . '/../engine' . PATH_SEPARATOR . get_include_path()); 
0
JohnK