zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Serveradministration und serverseitige Scripte
Seite neu laden Dateien auslagern - Include und PHP

Antwort
 
LinkBack Themen-Optionen Ansicht
  #1 (permalink)  
Alt 22.07.2007, 03:50
Benutzerbild von ArcVieh
//
XHTMLforum-Kenner
Thread-Ersteller
 
Registriert seit: 19.12.2006
Ort: Gütersloh
Beiträge: 1.850
ArcVieh sorgt für eine eindrucksvolle AtmosphäreArcVieh sorgt für eine eindrucksvolle Atmosphäre
Standard Dateien auslagern - Include und PHP

<weniger interessant>
Wenn das Thema hier unerwünscht ist, möge es der Administrator dieses Forums doch bitte löschen. Ein vergleichbares Thema habe ich nicht gefunden, immer nur Bruchstücke.

Diese Fragen werden in den Bereichen CSS und XHTML sehr oft gestellt, ich hoffe das dieses Thread als Ressource hilfreich ist.

Ich will hier "kurz" erklären, was PHP ist, was man dazu braucht und wie man "Daten in ein Div laden" kann, bzw. wie man seine Navigation auslagern kann, ohne das man für jede neue Seite den Quellcode dort reinkopieren muss. Denn wenn man dann eine Kleinigkeit verändern will und man womöglich schon 20 Seiten hat, kann das durchaus stressig werden.
</weniger interessant>

Einleitung- Was ist PHP?
PHP ist eine OpenSource Scriptsprache, die Serverseitig läuft. Momentan ist PHP5 die aktuellste Version. PHP ist sehr leicht zu erlernen und besonders flexibel. PHP ist nur schwach typisiert. Bietet ab PHP5 vor allem viel in der Objektorientierung und man findet in PHP auch vieles aus C++ wieder. PHP bietet auch einfache Schnittstellen zu MySQL und anderen Datenbankservern (DMS) an.
PHP kennt nicht nur eine Syntax, sondern viele verschiedene. Das ist für Leute die bereits mit visualBasic gearbeitet haben, besonders komfortabel, denn diese Syntax kennt PHP auch annähernd.

Serverseitige Scriptsprache?
Das heißt, das PHP auf dem Server läuft, auf dem eure Webseite liegt. Der Webserver erkennt die Dateiendung *.php und schickt die Datei automatisch zum PHP Parser (Auch Interpreter genannt). Der PHP Parser verarbeitet den Code und schickt ihn anschließend in HTML Form wieder zurück an den Webserver, der wiederum die HTML Daten an den Clienten (Den Browser) schickt.
Folglich: Der Browser wird niemals PHP Code sehen!
PHP ist weit verbreitet und ist fast in jedem Hostingpaket enthalten.
Die Free Space Anbieter Ohost und Funpic bieten ebenfalls PHP an.

PHP Lokal?
PHP muss mit einem Webserver auf euren Lokalen System installiert sein, damit Ihr eure PHP Dateien auch lokal testen könnt. Die PHP Dateien müssen sich dabei im DocumentRoot des Webservers befinden (Meistens htdocs oder httpdocs).
man kann sich einen Apachen unter Welcome! - The Apache HTTP Server Project herunterladen und PHP unter PHP: Hypertext Preprocessor. Doch für den normalen Coder viel zu auf ständig. Also haben sich einige hingesetzt und ein komfortabeles Server Paket zusammengestellt, kostenlos! Dieses Paket ninnt sich "XAMPP" und erfreut sich bei den meisten größter Beliebtheit.

Habe ich PHP?
Das lässt sich mit folgenden Schritten ganz einfach feststellen:
  1. Legt eine *.php Datei an
  2. Schreibt in die Datei unten gezeigten Code
  3. Speichert die Datei ab
  4. Uploadet sie auf euren Webspace
  5. Abschließend ruft die Datei im Browser auf (meineurl.de/phpinfo.php)
PHP-Code:
<?php
   phpinfo
();
?>
Wenn Ihr die Datei aufgerufen habt, müsste euch ein PHP Logo und eine tabellarische Auflistung einiger Daten angezeigt werden, die die PHP Module und den Webserver betreffen.
Sollte euch die Datei allerdings zum downloaden angeboten werden (oder sonstiges), so unterstützt eurer Webspace kein PHP! Sollte euer Webspace auch kein ASP.NET unterstützen und Ihr bezahlt dafür auch noch Geld, ist es IMHO hinausgeschmissenes Geld.

Zwei Möglichkeiten Daten auszulagern
In PHP Daten "auszulagern" ist sehr einfach. PHP bietet dafür 4 Funktionen an:
  1. include('example.inc.php'); Datei wird eingebunden, wenn nicht verfügbar wird ein Fehler ausgeben
  2. require('example.inc.php'); Siehe include mit einzigem Unterschied: Das Script bricht komplett mit einem Fehler ab, wenn die Datei nicht eingebunden werden konnte
  3. include_once('example.inc.php'); Siehe include, Datei kann aber maximal nur einmal eingebunden werden!
  4. require_once('example.inc.php'); Siehe include_once() mit den Bedingungen von require

Solltet Ihr nicht eine config Datei mit wichtigen Variablen für den späteren Verlauf des Scriptes einfügen, so solltest Ihr schlicht und ergreifend include nehmen.
Den Funktionen ist es egal, welche Extension/Dateiendung die Datei hat.
Ein einfaches Beispiel:
PHP-Code:
<?php
   
include('header.html');
?>
Solltet Ihr Dateien includen die ebenfalls PHP enthalten, wäre es sinnvoll die Dateiendung *.inc.php zu nehmen. Wobei inc nur für euch da ist, damit ihr wisst "Aha, die Datei wird includet". *.inc.php ist ein wichtiger Sicherheitsaspekt, denn sollte die Datei direkt im Browser aufgerufen werden, gibt der Server den PHP-Inhalt der Datei nicht frei.

1. Möglichkeit der Auslagerung
Viele handhaben es so, dass Sie Navigation, Header und Footer auslagern und jeweils in Ihre Dateien includen.
Das sähe vermutlich so aus:
PHP-Code:
<?php
   
include('header.html');
   include(
'navigation.html');
?>
<h2>Home Seite</h2>
<p>Text zur Home Seite</p>
<?php
   
include('footer.html');
?>
Man muss sich das hier wie Patchwork vorstellen. PHP wird euch nichts zu eurem HTML Code hinzudichten. In der header.html müssen Doctype, <html>- Beginn, <head>, <title/>, <meta/>, </head>, <body> enthalten sein!
in der Navigation.html dann eure Navigation.
In der footer.html muss dann zwingend auch </body></html> enthalten sein!

Die Datei in der PHP Code ist, muss natürlich als *.php abgespeichert werden. Normalerweise liefert PHP seine Daten immer mit dem MIME-Type (Content Type) text/html aus.
Anmerkung: Diese erste Methode finde ich nicht so gut.

2. Möglichkeit
Diese zweite Möglichkeit ist eher monolithisch und stützt sich auf GET Parameter, wo eigentlich immer der Content eingefügt wird, also das Gegenteil von der ersten Möglichkeit.

GET?
GET sieht wie folgt aus und hat bestimmt schon jeder einmal gesehen (Query String):
Code:
index.php?value=soundso&value2=das+und+das
Das ? dient hierbei als "Trenner" und leitet sozusagen den "Query String" ein. Das & Zeichen hingegen trennt mehrere Variablen voneinander.
Mit dem = Zeichen werden den Variablen Werte zugewiesen. Möchte man Leerzeichen verwenden, so muss man ein + verwenden. Sonderzeichen sollte man sich sparen. Am besten ist es wenn man sich an den ASCII Zeichensatz hält, oder man die Zeichen maskiert.
Vorsicht, per GET können nicht beliebig viele Werte übergeben werden!
Mit PHP kann man wie folgt auf die "Variablen zugreifen:
PHP-Code:
<?php
   $_GET
['value']; 
   
$_GET['value2']; 
?>
$_GET ist ein Superglobales Array und beinhaltet automatisch alle Daten die per GET übergeben wurden.
$_GET['value'] beinhaltet den Wert soundso und $_GET['value2'] den Wert das und das.

Nach dieser kleinen Klärung, von GET, stelle ich hier nun einfach mal einen Beispiel Code rein:
PHP-Code:
<?php
/** 
 * Prüfe ob $_GET['page'] "existiert" bzw gesetzt ist
 * Wenn nicht, gebe Startseite aus
 **/
if(isset($_GET['page'])) { 
   switch(
$_GET['page']) {
      case 
'home':
         
$inhalt 'homeseite';
         
$title 'Home';
      break;
      case 
'me':
         
$inhalt 'about';
         
$title 'About me - Über mich';
      break;
      case 
'Impressum':
         
$inhalt 'impressum_seite';
         
$title 'Impressum - rechtliche Absicherung';
      break;
      
/**
       * Sollte keiner der GET Werte stimmen, wird veranlasst
       * das eine error Seite ausgeben wird (z.B. NOT FOUND)
       **/
      
default:
         
$inhalt 'error';
         
$title 'Fehler, Seite nicht gefunden';
      break;
   }
} else {
   
$inhalt 'index';
   
$title 'Startseite';
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
      <title><? echo $title ?></title>
   </head>
   <body>
       <div id="wrapper">
           <h1><img src="logo.jpg" alt="Logo von example Page" /></h1>
           <!-- Weiterer Quellcode -->
           <div id="content"> <!-- Inhalt - Überschriften und Texte -->
           <?php
                
/**
                 * Wenn $inhalt z.B. 'about', dann wird about.inc.php "eingefügt" 
                 * und ausgegeben 
                 **/
                
include($inhalt.'.inc.php');
           
?>
           </div>
       </div>
   </body>
</html>
switch-case - PHP Manual

Es wird die Variable $_GET['page'] auf ihre Werte überprüft. Sollte kein Wert zustimmen, trifft default: zu (Eine Fehlerseite wird eingebunden, wenn der $_GET['page'] Wert nicht "festgelegt" wurde, bzw nicht stimmt).
  • index.php?page=home includet homeseite.inc.php
  • index.php?page=me includet home.inc.php
  • index.php?page=impressum includet impressum_seite.inc.php
Es wäre sauberer, wenn man den ersten PHP-Block mit dem switch-case in eine config.inc.php auslagern würde (muss am Anfang der Page eingebunden werden, am besten mit require).

Referenzmaterial
PHP: Kontroll-Strukturen - Manual
http://xhtmlforum.de/46488-navi-incl...t-ihr-das.html
apache friends - apache, mysql, php und perl installation leicht gemacht
Webdesign Forum - Tutorial Cinema4d Photoshop Community Hilfe PHP HTML CSS Fotografie

Anmerkung: Ich erhebe keinen Anspruch darauf, die perfekte Lösung gewählt zu haben! Es gibt viele Lösung, der hier gezeigte Code ist lediglich beispielhaft und soll Anreize für eigene Ideen geben. Hier soll lediglich das Grundverständnis vermittelt werden!

Geändert von ArcVieh (15.02.2008 um 10:30 Uhr) Grund: Einmal komplett überarbeitet; Verständlichkeit gesteigert, Fehler korrigiert.
Mit Zitat antworten
Sponsored Links
  #2 (permalink)  
Alt 22.07.2007, 13:02
Benutzerbild von loci
Benutzer
neuer user
 
Registriert seit: 17.02.2005
Ort: Saarland
Beiträge: 62
loci befindet sich auf einem aufstrebenden Ast
Standard

Man sollte evtl noch erwähnen, dass eine manuelle Prüfung auf bereits eingebundene Scripts wesentlich schneller ist, als die _once Varianten, da diese die Datei bei jedem Aufruf öffnen.

Also
PHP-Code:
if (!isset($loaded_scripts[$filename]))
{
    
$loaded_scripts[$filename] = true;
    require(
$filename);

ist schneller als
PHP-Code:
require_once($filename); 
Ausnahme: Einbinden über absoluten Pfad ab PHP 5.2 oder PHP 6.
Mit Zitat antworten
Sponsored Links
  #3 (permalink)  
Alt 22.07.2007, 14:22
Benutzerbild von netspy
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 13.08.2004
Ort: Leipzig
Beiträge: 1.956
netspy sorgt für eine eindrucksvolle Atmosphärenetspy sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von loci Beitrag anzeigen
Man sollte evtl noch erwähnen, dass eine manuelle Prüfung auf bereits eingebundene Scripts wesentlich schneller ist, als die _once Varianten,
Hast du das selbst gemessen oder woher hast du diese Info?

Zitat:
Zitat von loci Beitrag anzeigen
da diese die Datei bei jedem Aufruf öffnen.
Wie meinst du das? Wer öffnet die Datei bei jedem Aufruf?

Mario
__________________
AppDev Blog · AppDev Forum
Mit Zitat antworten
  #4 (permalink)  
Alt 22.07.2007, 17:16
Benutzerbild von loci
Benutzer
neuer user
 
Registriert seit: 17.02.2005
Ort: Saarland
Beiträge: 62
loci befindet sich auf einem aufstrebenden Ast
Standard

PHP-Code:
<?php
require_once "./a.php";
require_once 
"./a.php";
?>
Code:
lstat64("/tmp", {st_mode=S_IFDIR|S_ISVTX|0777, st_size=7368, ...}) = 0
lstat64("/tmp/a.php", {st_mode=S_IFREG|0644, st_size=6, ...}) = 0
open("/tmp/a.php", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=6, ...}) = 0
fstat64(3, {st_mode=S_IFREG|0644, st_size=6, ...}) = 0
lstat64("/tmp", {st_mode=S_IFDIR|S_ISVTX|0777, st_size=7368, ...}) = 0
lstat64("/tmp/a.php", {st_mode=S_IFREG|0644, st_size=6, ...}) = 0
open("/tmp/a.php", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=6, ...}) = 0
fstat64(3, {st_mode=S_IFREG|0644, st_size=6, ...}) = 0
edit: copy-paste-fehler

Geändert von loci (23.07.2007 um 08:40 Uhr)
Mit Zitat antworten
  #5 (permalink)  
Alt 22.07.2007, 17:52
Benutzerbild von Gumbo
XHTMLforum-Kenner
 
Registriert seit: 22.08.2004
Ort: Trier
Beiträge: 2.741
Gumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekannt
Standard

Weißt du überhaupt was dieser Auszug genau bedeutet? Zudem würde das von dir beschriebene Skript bereits nach dem ersten „require_once“ abbrechen, da „!"./a.php"“ ein „false“ ergibt.
__________________
Markus Wulftange
Mit Zitat antworten
  #6 (permalink)  
Alt 23.07.2007, 08:48
Benutzerbild von loci
Benutzer
neuer user
 
Registriert seit: 17.02.2005
Ort: Saarland
Beiträge: 62
loci befindet sich auf einem aufstrebenden Ast
Standard

Schön, dass du den Beitrag von Ilia auch gefunden hast.
Deine Antwort ist allerdings weniger hilfreich...

Der Auszug macht (2 mal):
- Lese Dateiinformation in Speicher
- Öffne Dateistream (readonly)
- Lese Dateiinformationen aus geöffnetem Stream in Speicher

Spielt aber egtl. überhaupt keine Rolle was es macht. Das sind die internen Abläufe von php, wenn man oben genanntes Script ausführt und es soll auch nur zeigen, dass eine Datei bei require_once jedes Mal geöffnet wird.

Irgendwelche _sinnvollen_ Anmerkungen dazu?
Mit Zitat antworten
  #7 (permalink)  
Alt 23.07.2007, 09:17
Benutzerbild von Gumbo
XHTMLforum-Kenner
 
Registriert seit: 22.08.2004
Ort: Trier
Beiträge: 2.741
Gumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekannt
Standard

Bei solchen Ratschlägen solltest du den Kosten/Nutzen-Faktor nicht außer Acht lassen. Sicher hat die Variante mit eigener Kontrolle einen gewissen Geschwindigkeitsvorteil (nach meinen Versuchen bei absoluten Pfaden 55% und bei relativen Pfaden 70%). Doch das entspricht gerade mal einer Zeitdifferenz von etwa 35 beziehungsweise 60 Mikrosekunden, was in meinen Augen den Aufwand nicht rechtfertigt.
__________________
Markus Wulftange
Mit Zitat antworten
  #8 (permalink)  
Alt 23.07.2007, 09:52
Benutzerbild von inta
free as in freedom
XHTMLforum-Kenner
 
Registriert seit: 04.12.2006
Ort: Berlin
Beiträge: 5.014
inta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz sein
Standard

Ich finde die Diskussion an dieser Stelle unangebracht. Die Anleitung soll für Anfänger sein und die können mit den Informationen nichts anfangen und werden dadurch eher verunsichert. Performanceoptimierung ist kein Thema für Einsteiger, das könnte man als neues Thema anlegen (ich hab auch durchaus Interesse daran).

Ich finde diese Anleitung von ArcVieh sehr gut und hilfreich
Damit kann man viele Anfängerfragen gut auf einmal "erschlagen" und der Hilfesuchende bekommt eine ausführlichere Anleitung als er im Normalfall in einem Thread erwarten kann (besonders wenn eine Frage schon zum x-ten Mal auftaucht).
Mit Zitat antworten
  #9 (permalink)  
Alt 28.10.2007, 11:38
Erfahrener Benutzer
XHTMLforum-Mitglied
 
Registriert seit: 07.04.2007
Beiträge: 311
ct2oo4 befindet sich auf einem aufstrebenden Ast
Standard

Unabhängig von der obigen Diskussion sage ich einfach mal: Spitze ArcVieh!
Ich würde mir aber wünschen, dass solche für Anfänger wirklich hilfreichen Themen besonders gekennzeichnet werden, wer sonst schade drum.
Vielleicht aber auch eine Art "knowledge Base" wie für XHTML und CSS wie es andreas' angesprochen hat.


<!--
Ich kenne mich mit dieser Quelle recht gut aus, weil ich sie selbst schon des Öfteren genutzt habe. Aber schaut mal unter "3. Welche Voraussetzungen brauche ich?" und dort dann der zweite Eintrag: "Ihr m üsst euch komplett mit HTML auskennen, [...]", dies finde ich nicht wirklich sinnvoll, denn für PHP ist es zwar sinnvoll sich mir HTML aus zu kennen, aber für Kontrollstrukturen o.ä. benötigt man kein HTML.
-->

MfG
__________________

Geändert von ct2oo4 (28.10.2007 um 11:45 Uhr)
Mit Zitat antworten
Sponsored Links
  #10 (permalink)  
Alt 28.10.2007, 13:02
Benutzerbild von Timo
table-layout: none;
XHTMLforum-Kenner
 
Registriert seit: 11.11.2006
Beiträge: 5.356
Timo ist ein LichtblickTimo ist ein LichtblickTimo ist ein LichtblickTimo ist ein LichtblickTimo ist ein Lichtblick
Standard

Zitat:
Zitat von ct2oo4 Beitrag anzeigen
<!--
Ich kenne mich mit dieser Quelle recht gut aus, weil ich sie selbst schon des Öfteren genutzt habe. Aber schaut mal unter "3. Welche Voraussetzungen brauche ich?" und dort dann der zweite Eintrag: "Ihr m üsst euch komplett mit HTML auskennen, [...]", dies finde ich nicht wirklich sinnvoll, denn für PHP ist es zwar sinnvoll sich mir HTML aus zu kennen, aber für Kontrollstrukturen o.ä. benötigt man kein HTML.
-->
Im Grunde hast du recht, aber im dem Tutorial wird ja anhand einer Homepage PHP vorgestellt, und das man durch <div>-Tags oder andere HTML Tags nicht abgelenkt wird ist das Hilfreicht.

Auserdem um eine Homepage darzustellen brauch man HTML und was anderes machst du mit PHP nicht. PHP bringt nur "leben" in deine auf HTML / CSS basierenden Seite.

Soweit meine Meinung.

Gruß
Timo

P.S. schöner Artiel ArcVieh. Aber ich hab mir überlegt du fängst mit der Frage an "Was ist PHP?" dann solltest du auch ein paar Worte über die Syntax von PHP sagen. Nicht nur die is gleich wie bei VB o.ä. Sonst sehr Gut.
__________________
Um weitere Erklärungen eingeblendet zu bekommen, drücken Sie bitte die Tastenkombination Alt + F4
Mit Zitat antworten
Sponsored Links
Antwort

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Inhalte (z.B. Navigation) auslagern ohne JavaScript und mit .html Dateien Garlandt (X)HTML 5 18.07.2014 18:42
? zum einem älteren Beitrag (Dateien auslagern, Include) Stefan G. Serveradministration und serverseitige Scripte 9 30.12.2007 18:25
Include PHP Hilfe DK (X)HTML 19 15.03.2005 14:42
XHTML 1.1 valid, mit php include, aber *.html, geht das ? websitedesigner (X)HTML 9 06.12.2004 16:45
Include mit PHP und SSI Knuddelkamel Serveradministration und serverseitige Scripte 13 06.11.2004 20:53


Alle Zeitangaben in WEZ +2. Es ist jetzt 01:18 Uhr.