2016-07-15 3 views
1

Ich versuche, eine Website zu machen und so viel Code wie möglich wiederzuverwenden. Ich benutze die PHP Include-Anweisung, aber es scheint nicht für mich zu funktionieren. Im Moment versuche ich nur, es mit dem Header zu arbeiten, aber ich werde das gleiche mit dem Nav-Menü und einer Fußzeile machen. Ich bin nur neu genug zu HTML und habe erst jetzt begonnen, den Include-Teil von PHP zu lernen, damit jede Hilfe geschätzt wird. Die Header-Datei befindet sich in einem "includes" -Ordner, der im Hauptordner der Website enthalten ist. Vielen Dank.PHP - Hauptdatei wird Header nicht enthalten

<body> 

<?php include"Includes/Header.php";?> 

<div class="container-fluid"> 
    <div id="menu"> 

      <ul id="menu"> 
       <li><a href="#Home">Home</a></li> 
       <li><a href="#OurProducts">Our Products</a></li> 
       <li><a href="#OurBrands">Our Brands</a></li> 
       <li><a href="#ContactUs">Contact Us</a></li> 
      </ul> 

    </div> 
</div> 

<div id="img1"> 
    <img src="lasange.jpg" alt="lasange"> 
</div> 

</body> 

Header-Code

<!DOCTYPE html> 
    <html> 
    <head> 
    <link rel="stylesheet" href="http://cdnjs.cloudflare.com/ajax/libs/font- awesome/4.4.0/css/font-awesome.min.css"> 
    <link rel="stylesheet" type="text/css" href="NewHomepageStyleSheet.css"> 
    </head> 
    <body> 
    <div id="toplocation"> 
     <i class="fa fa-fax"></i> 
     (01)-8393790&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<i class="fa fa-map- marker">&nbsp Unit 10,11,12, Baldoyle Industrial Estate, Dublin 13, Ireland</a>  </i> 
    </div> 
    </body> 
    </html> 
+1

Ist Ihre HTML-Seite gespeichert als .php oder einfach nur als .html.Your Seite html enthält als .php für PHP gespeichert werden müssen, sind zu laufen. – wanjiku

+0

Was passiert? Irgendwelche Fehler? Was ist die Ausgabe? Denken Sie auch daran, dass (abhängig von Ihrem Betriebssystem) Dateipfade die Groß-/Kleinschreibung beachten können, während Sie es im Ordner "includes" behalten und "Include" in Ihrem Code haben. –

+0

http://php.net/manual/en/function.include.php Aussage –

Antwort

0

die Sie interessieren aber unter Code sicherzustellen, dass muss in PHP-Datei geschrieben werden:

<body> 

<?php include("Includes/Header.php"); ?> // or 
<?php require("Includes/Header.php"); ?> 

<div class="container-fluid"> 
    <div id="menu"> 

      <ul id="menu"> 
       <li><a href="#Home">Home</a></li> 
       <li><a href="#OurProducts">Our Products</a></li> 
       <li><a href="#OurBrands">Our Brands</a></li> 
       <li><a href="#ContactUs">Contact Us</a></li> 
      </ul> 

    </div> 
</div> 

<div id="img1"> 
    <img src="lasange.jpg" alt="lasange"> 
</div> 

</body> 
+0

'Include's brauchen nicht die Klammern. Sie verlangsamen es nur. – Martin

+1

nein ist es nicht so, es funktioniert auch einige Zeit in bestimmten OS, überprüfen Sie hier http://www.tutorialspoint.com/php/php_file_inclusion.htm –

+0

Doesnt Mate arbeiten, haben immer noch das gleiche Problem – Dylan

-1

oben Lösung ist richtig nur kleine Änderung:

<?php include_once("Includes/Header.php"); ?> // or 
<?php require_once("Includes/Header.php"); ?> 
+0

Warum repariert das irgendetwas? – Martin

+0

Wenn wir ** include_once() ** oder ** require_once() ** verwenden, wird dies nur einmal berücksichtigt, während ** include() ** und ** require() ** sind, wenn Sie diese beiden aufgerufen haben 10 mal dann wird es 10 mal auf der Seite sein. –

+0

Aber OPs Problem ist, dass das Include wird nicht einmal angezeigt, so löst dies nicht das Problem – Martin

0

Da für Ihre Seite die Kopfzeile erforderlich ist, ändern Sie include in require. Dadurch wird PHP gezwungen, einen Fehler zu erzeugen, wenn die Datei nicht gefunden wird (statt einfach zu ignorieren und fortzufahren). Der Text des Fehlers ist der Schlüssel

Meine Wette ist, dass Ihr Pfad nicht korrekt ist. Wenn Sie einen relativen Pfad verwenden, muss dieser relativ zur Datei mit der include-Anweisung sein, nicht relativ zum Hauptwebsites-Ordner. Mein Rat ist, stattdessen absolute Pfade zu verwenden.

Schließlich, während Sie in der Entwicklung sind, schlage ich vor, dass Sie entweder Anzeigefehler aktivieren, so dass Sie Fehlerdetails im Browser sehen können oder herausfinden, wo PHP Fehler protokolliert, so dass Sie dort überprüfen können, wenn etwas schief geht.

Putting all das zusammen, empfehle ich Ihnen Ihre include Linie ersetzen mit:

<?php 
    error_reporting(E_ALL);  
    ini_set('display_errors', '1'); 
    require "$_SERVER[DOCUMENT_ROOT]/Includes/Header.php";  
?> 
+0

Ihre Syntax für Document-Root könnte besser sein, aber das ist die richtige Idee. – Martin

+0

Was stimmt nicht mit meiner Syntax? – BeetleJuice

+0

'require $ _SERVER ['DOCUMENT_ROOT']."/Includes/Header.php "' Versuchen Sie es zu vermeiden Arrays in Strings zu integrieren und verketten Sie sie stattdessen. Es ist kein großes Problem, aber es ist eine sauberere, aufgeräumtere und beste Praxis. Außerdem gibt PHP weniger Arbeit. – Martin

0

Dies ist eine Sammlung von Punkten aus den Kommentaren, von denen alle sind ziemlich gut:

  • Ihre Syntax könnte mit einem Leerzeichen umgehen: include "file.php";.

  • Ihre Includes sollten wie Groß-und Kleinschreibung behandelt werden, auf LAMP Case-Empfindlichkeit ist ein Standard. Es ist eine gute Angewohnheit, hineinzugehen.

  • Include s müssen auf einer PHP-Seite ausgeführt werden, wenn Ihre Seite HTML ist, wird nichts enthalten. PHP kann jede Seite beinhalten, es muss nicht immer eine PHP Seite aufgerufen werden.

  • Aktivieren Sie die PHP-Fehlerprotokollierung, um zu überprüfen, welcher Grund für das Include nicht angezeigt wird. Siehe PHP Error Displaying.

  • Stellen Sie sicher, dass Ihre Include-Datei etwas zur Ausgabe an den Browser enthält!

  • Include s und require s und ihre _once Kollegen in ihrer Art und Weise alle praktisch identisch sind sie arbeiten (es gibt eine schockierende Zahl von Leuten in dieser Frage mit Antworten zu ändern nur include-require Denken wird es funktioniert, oder ändern zu include_once wird es plötzlich funktioniert.

    der Unterschied require ist, dass, wenn der Aufruf fehlschlägt, dann PHP das Skript mit einem Fehler beendet. Daher wird der Inhalt enthalten ist erforderlich (High-Hut!).

Verzeichnisse

Schließen aus Ihrem aktuellen PHP-Verzeichnis beginnen in der Regel, wenn Sie also eine Datei auf /home/account/public_html/horses/index.php haben und Sie eine Datei aus dem Stamm html /home/account/public_html/include.php dies einschließlich nicht relativ aus dem aktuellen Verzeichnis zu erreichen welches ist /horses/.

dieses ganze Problem umgehen, über Sie am beste Praxis einschließlich Dateien mit einem absoluten Dateipfad, wie der Verwendung von $_SERVER['DOCUMENT_ROOT'] wenn einschließlich den Dateien verwendet werden sollen, die im öffentlichen Bereich der Website Ihres Kontos sind. Wenn Dateien aus anderen Teilen Ihres Kontos einschließlich dann noch einem absoluten Pfad gibt aber manuell (mit einem DEFINE oder dergleichen helfen kann) wie: /home/account/extras/include.php

einige Beispiele für jedes Szenario:

Relative Pfad:

include "folder/file.php"; 

Oben: Der Ordner muss sich im selben Verzeichnis wie die Datei befinden, in der das Include ausgeführt wird.

include "../parentfolder/folder/file.php"; 

Oben: Dies wird nicht funktionieren. Includes können relative Verzeichnisse über dem aktuellen Arbeitsverzeichnis nicht ändern.

include $_SERVER['DOCUMENT_ROOT']."/folder/file.php"; 
// reference address: /home/account/public_html/folder/file.php 

Oben: Diese umfassen wird von jeder Seite auf einer beliebigen Stelle Ihrer Website angezeigt werden, solange die enthalten wird, um die HTML-Dokument-Root-withing (typischerweise public_html). Ich empfehle, $_SERVER['DOCUMENT_ROOT'] zu verwenden, wie der Standardweg oder das Referenzieren einschließt.

define("RootHost","/home/account/secret"); 
include RootHost."/folder/file.php"; 
// reference address: /home/account/secret/folder/file.php 

Der obige Code würde in der Regel für die Aufnahme von Inhalten verwendet werden, die nicht erreichbar von der Website Browser ist wie in Ihren public_html HTML-Dokument Stammordnern ist nicht.

0

Dies sollte ein Kommentar sein, aber es ist ein bisschen lang bekommen ....

In Bezug auf die Struktur dieses chaotisch ist (dies ist nicht Ihr Problem, aber Ihr Ansatz). Der HTML-Kopfteil sollte nicht innerhalb der body-Tags angezeigt werden, und häufig werden Sie feststellen, dass Sie die HTTP-Header ändern möchten - was PHP-Code vor beliebigen HTML-Ausgabe erfordert.

Obwohl es einen Fall gibt, eigenständige Fragmente in einzelne Include-Dateien zu schreiben, sollten diese wohlgeformt sein (d. H. Offene und geschlossene Tags innerhalb derselben Datei).Ein besserer Ansatz besteht darin, Funktionen zu verwenden, um Strukturelemente des Inhalts auszugeben und diese von Ihrem Seitenskript aus aufzurufen. Zusätzlich zur Gewährleistung, dass Ihr HTML gut strukturiert ist, schützt es Sie auch vor Sicherheitslücken, die durch die teilweise Ausgabe von Inhalten entstehen eine Include-Datei, wenn ihre URL direkt in einen Browser eingegeben wird.

betrachten:

<?php 
define('BASE_PATH', dirname(__FILE__)); // defining as root for your app simplifies includes 
include(BASEPATH . '/pageTemplate.php'); 
include(BASEPATH . '/menu.php'); 
?> 
<html> 
    <head> 
    <title>My demo page</title> 
    <?php template_required_css_and_js(); ?> 
    </head> 
    <body> 
    <?php template_body_start(); ?> 
... 
    <?php menu(); ?> 
... 
    <?php template_body_end(); ?> 
    </body> 
</html> 

(BTW: ‚‘. Check ist in der php.ini include_path und die Berechtigungen für die Datei erlauben Ihrem Webserver, es zu lesen Sie das Fehlerprotokoll zu lesen, ist immer eine gute Idee, wenn du hast ein Problem).

0

PHP root wird nicht wie Ihre Standardwurzel gelesen. Versuchen Sie den Code mit diesem ersetzen:

include($_SERVER['DOCUMENT_ROOT']."Header.php"); 
+0

Sie sollten die Klammern entfernen und Sie müssen * einen Schrägstrich vor der Datei hinzufügen:' include $ _SERVER ['DOCUMENT_ROOT' ]. "/ Header.php"; ' – Martin

+0

Dieser Code funktioniert wie beschrieben. Der Server [document_root] gibt "/ foldername /" zurück, was den String /foldername/header.php –

+0

macht Nun, bei meinem Setup für '$ _SERVER' hat der Dokumentstamm keinen abschließenden Schrägstrich, vielleicht ändert sich das auf verschiedenen Servern, aber Ich möchte Sie bitten, dafür zu sorgen, dass der Code funktioniert. – Martin

Verwandte Themen