require durch mehrere Ebenen

Morgen,
ich habe eine Verschachtelung mehrerer require Aufrufe.

Die Struktur sieht folgendermaßen aus:
[ul]
[li]anwendung (Verzeichnis)[/li][LIST]
[li]index.php (Überprüft den Login und bindet die per $_GET[„seite“] angeforderte Seite per require ein.)[/li][li][B]seite /B[/li][LIST]
[li]index.php (Überprüft ob der Eingeloggte Benutzer Zugriff auf die Seite hat und bindet den über $_GET[„aktion“] angeforderten Content per require ein.)[/li][li]aktion.content.php[/li][/ul]
[/LIST]
[/LIST]
Jetzt möchte ich in der anwendung/index.php alle erforderlichen Dateien per require einbinden. (mysql.connect.php, funktionen.php, header.php, footer.php)
Die MySQL Verbindung ist innerhalb des gesamten Konstrukt verfügbar und auch die Funktionen von der eingebundenen funktionen.php sind überall verfügbar.

Warum kann ich den Header und Footer nicht auch so einbinden?
Wenn ich den Header und Footer direkt in der aktion.content.php einbinde funktioniert alles…

Um sicherzustellen das der Pfad zu allen eingebundenen Dateien auf jeder ebene Korrekt ist verwende ich:

require($_SERVER["DOCUMENT_ROOT"] . "/includes/php/footer.php");

EDIT: Das ist kein Weltuntergang die zwei Zeilen Code kann ich in den Content Dateien auch einbinden ich möchte nur Wissen weshalb das so ist :slight_smile:

Was passiert denn wenn Du versuchst header und footer auch in der Datei einzubinden?

Der Header und Footer wird eingebunden jedoch die aktion.content.php nicht mehr es wird also die Seite ohne Inhalt angezeigt.
error_reporting(E_ALL) bringt keine Meldung…

Ohne den Quellcode kann man dazu leider nicht viel sagen.

Ok kein Problem hier der Code:

anwendung/index.php (Header und Footer auskommentiert)

<? require($_SERVER["DOCUMENT_ROOT"] . "/includes/php/mysql.connect.php"); require($_SERVER["DOCUMENT_ROOT"] . "/includes/php/funktionen.php"); // HEADER require($_SERVER["DOCUMENT_ROOT"] . "/includes/php/header.php"); safe_session_start(); if (login_check($mysqli) == true) { if (file_exists($_GET["seite"])) { require($_GET["seite"] . "/index.php"); } else { header("Location: ?seite=uebersicht"); } } else { header("Location: /login/"); } // FOOTER require($_SERVER["DOCUMENT_ROOT"] . "/includes/php/footer.php"); ?>

anwendung/seite/index.php

<? if (true /*&& pass_check() == true*/) { // DEAKTIV switch ($_GET["aktion"]) { case "eintragen": // # # # ANFANG EINTRAGEN # # # \\ if (!empty($_POST)) { // MYSQL INSERT } else { // # # # FORMULAR ANZEIGEN # # # \\ require("eintragen.content.php"); } break; // # # # ENDE EINTRAGEN # # # \\ default: header("Location: ?seite=SEITE&aktion=AKTION"); break; } } else { header("Location: /login/"); } ?>

anwendung/seite/aktion.content.php

<? require($_SERVER["DOCUMENT_ROOT"] . "/includes/php/header.php"); ?>
    <div class="container theme-showcase" role="main">
        <div class="panel panel-default">
            <div class="panel-heading">
                <h4>Aktion</h4>
            </div>
            <div class="panel-body">
                <span>Formular</span>
            </div>
        </div>
    </div>
<? require($_SERVER["DOCUMENT_ROOT"] . "/includes/php/footer.php"); ?>

Ich habe gerade keine Lust mich da rein zu denken. Aber als kleiner Tipp:
DIR und FILE ( http://php.net/manual/de/language.constants.predefined.php )

Danke für deine Antwort ich verstehe den nutzen von FILE und DIR aber ich verstehe nicht wie mir das helfen sollte…
Mein require Aufruf wird mit komplettem relativen Pfad aus jedem erdenklichen Unterverzeichnis richtig aufgelöst, das habe ich auch mittels echo ausgeben lassen.

Zur Info:
Der in meinem letztem POST angegebene Code ist voll Funktionsfähig es geht nur darum den HEADER und FOOTER nicht mehr in der anwendung/seite/aktion.content.php sondern in der anwendung/index.php einzubinden.

Hab den Fehler gefunden…
Ich habe vor der Änderung der URL via header(Location: ?seite=uebersicht) einen Quellcode an den Browser gesendet das blockiert die Ausführung von header() :eek:

Ich versuche mal eine Lösung zu finden.

Es erscheint mir am Sinnvollsten die Einbindung des Header und Footer an der selben stelle wie die aktion.content.php zu machen sodass es folgendermaßen aussieht:

require($_SERVER["DOCUMENT_ROOT"] . "/includes/php/header.php"); require(__DIR__ . "/eintragen.content.php"); require($_SERVER["DOCUMENT_ROOT"] . "/includes/php/footer.php");

@scbawik: Ich habe die eintragen.content.php jetzt mittels require(DIR . „/eintragen.content.php“); eingebunden funktioniert aber auch ohne DIR denke das es trotzdem keinen vorteil bietet oder?

Vielen Dank für eure mühe, ich wusste ja eigentlich das man einen Header nicht nachträglich senden kann hab das aber irgendwie nicht realisiert.