2016-06-27 13 views
1

Wie man relative Pfadbildung tut? wie __dir__php wie zu relativer Pfadangabe

hier zu verwenden ist meine Dateistruktur vor

public_html 
    ├── config 
    | |__config.php 
    ├── core 
    | |__init.php 
    ├── helper 
    | |__helper.php 
    ├── libraries 
    | |__page1.php 
    ├── templates 
    │ ├── page1template.php 
    │ 
    │__index.php 
    │__page1.php 

Nachdem zu viele Seiten haben. Ich möchte sie in den Ordner "rep" und den Ordner "admin" bringen. so sieht meine neue Dateistruktur so aus

Das Problem ist, meine Anforderungen und enthalten sind immer noch absoluter Pfad. sehen eine Probe unter

meine Init-Datei

//Start Session 
session_start(); 

//Include Configuration 
require_once('config/config.php'); 

//Helper Function Files 
require_once('helpers/system_helper.php'); 
require_once('helpers/format_helper.php'); 

//Autoload Classes 
function __autoload($class_name){ 
    require_once('libraries/'.$class_name .'.php'); 
} 

mein page1.php

<?php require('core/init.php'); ?> 
    //Get Template & Assign Vars 
    $template = new Template('templates/rep/page1.php'); 

wenn ich ein "../" vor jedem Pfad hinzufügen. dann wird die Seite korrekt geladen. siehe unten

require_once('../config/config.php'); 
require_once('../helpers/system_helper.php'); 
require_once('../helpers/format_helper.php'); 
require_once('../libraries/'.$class_name .'.php'); 
require('../core/init.php'); 
$template = new Template('../templates/rep/page1.php'); 

aber dann wird meine index.php brechen, weil Index im Stammordner ist, so dass der neue Weg, um es falsch ist relativ. Ich habe zwei Fragen mit dazugehörigem Problem gefunden. Ich vermute, es ist mit der Verwendung von __dir__ zu ersetzen ../aber ich weiß nicht, wo ich es setzen soll.

PHP include relative path

Are PHP include paths relative to the file or the calling code?

Antwort

1

Für mich persönlich versuche ich beinhaltet relativ die einschließlich in die Datei zu machen tun, wenn ich die Struktur sicher bin, soll eine bestimmte Art und Weise sein. Zum Beispiel könnten Sie eine Datei in core/loader.php direkt neben core/init.php erstellen ... Wenn Sie dann annehmen, dass die relative Struktur zwischen dem Loader und den anderen Dateien immer gleich bleiben würde, core/loader.php koennten so etwas wie

<?php 

// Get the path of whatever folder is holding the core/config/etc folders 
$main_dir=RealPath(DirName(__FILE__).'/../'); 

require("{$main_dir}/config/config.php"); 
require("{$main_dir}/helpers/system_helper.php"); 
// etc 

?> 

der Punkt hier ist, dass man jetzt überall, dass die Reihe von Ordnern verschieben können Sie wollen (Empfehlung: außerhalb public_html), und sie sollten nach wie vor, so lange laden, wie Sie den richtigen Weg require'ed zum Lader.

+0

danke. Ich habe Stunden damit verbracht, deinen Beitrag zu lesen, und diesen wieder und wieder. Am Ende habe ich dirname (__ DIR __). '/ path/to.file' verwendet und es hat funktioniert. http://stackoverflow.com/questions/36577020/failed-to-open-stream-no-such-file-or-directory/36577021#36577021 – codenoob