mirror of
https://github.com/php/doc-de.git
synced 2026-03-24 23:32:10 +01:00
342 lines
11 KiB
XML
342 lines
11 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!-- EN-Revision: a124543dd3f6b1e5567b07420d23899e582514dc Maintainer: raphaelm Status: ready -->
|
|
<!-- Reviewed: yes -->
|
|
<!-- Rev-Revision: dbf319f8b2d859edf2b1342014c4dbdf6333b81c Reviewer: samesch -->
|
|
|
|
<sect1 xml:id="function.include" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
<title>include</title>
|
|
<?phpdoc print-version-for="include"?>
|
|
<simpara>
|
|
Der Ausdruck <literal>include</literal> bindet die angegebene Datei ein und
|
|
wertet sie aus.
|
|
</simpara>
|
|
<simpara>
|
|
Die folgende Dokumentation trifft auch auf <function>require</function> zu.
|
|
</simpara>
|
|
<simpara>
|
|
Dateien werden unter dem angegebenen Pfad gesucht oder, wenn keiner
|
|
gegeben ist, im <link linkend="ini.include-path">include_path</link>. Wenn
|
|
die Datei auch im <link linkend="ini.include-path">include_path</link> nicht
|
|
gefunden werden kann, sucht <literal>include</literal> noch im Verzeichnis
|
|
der aufrufenden Datei und im aktuellen Arbeitsverzeichnis. Wenn keine Datei
|
|
gefunden wurde, erzeugt <literal>include</literal> einen Fehler der Stufe
|
|
<constant>E_WARNING</constant>; im Gegensatz dazu erzeugt
|
|
<function>require</function> in diesem Fall einen Fehler der Stufe
|
|
<constant>E_ERROR</constant>.
|
|
</simpara>
|
|
<simpara>
|
|
Beachten Sie, dass sowohl <literal>include</literal> als auch
|
|
<literal>require</literal> zusätzliche <constant>E_WARNING</constant>s
|
|
auslösen, wenn nicht auf die Datei zugegriffen werden kann, bevor sie das
|
|
endgültige <constant>E_WARNING</constant> bzw. <constant>E_ERROR</constant>
|
|
auslösen.
|
|
</simpara>
|
|
<simpara>
|
|
Wenn ein Pfad angegeben ist — ob absolut (beginnend mit einem
|
|
Laufwerksbuchstaben oder <literal>\</literal> auf Windows oder
|
|
<literal>/</literal> auf Unix/Linux) oder relativ (beginnend mit
|
|
<literal>.</literal> oder <literal>..</literal>), wird der
|
|
<link linkend="ini.include-path">include_path</link> ignoriert. Wenn der
|
|
Dateiname beispielsweise mit <literal>../</literal> beginnt, sucht der
|
|
Parser im übergeordneten Verzeichnis des aktuellen Arbeitsverzeichnisses
|
|
nach der Datei.
|
|
</simpara>
|
|
<simpara>
|
|
Mehr Informationen über den Umgang PHPs mit dem Einbinden von Dateien
|
|
im Zusammenhang mit dem Include-Pfad, siehe die Dokumentation zu
|
|
<link linkend="ini.include-path">include_path</link>.
|
|
</simpara>
|
|
<simpara>
|
|
Wenn eine Datei eingebunden wird, wird für den enthaltenen Code der
|
|
<link linkend="language.variables.scope">Geltungsbereich für Variablen</link>
|
|
übernommen, der in der Zeile mit dem include-Befehl gilt. Alle Variablen,
|
|
die in dieser Zeile in der aufrufenden Datei verfügbar sind, stehen ab
|
|
diesem Zeitpunkt auch in der aufgerufenen Datei zur Verfügung. Hingegen
|
|
haben alle Funktionen und Klassen, die in der eingebundenen Datei definiert
|
|
sind, den globalen Geltungsbereich.
|
|
</simpara>
|
|
<para>
|
|
<example>
|
|
<title>Grundlegendes <literal>include</literal>-Beispiel</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
vars.php
|
|
<?php
|
|
|
|
$farbe = 'grün';
|
|
$frucht = 'Apfel';
|
|
|
|
?>
|
|
|
|
test.php
|
|
<?php
|
|
|
|
echo "Der $frucht ist $farbe."; // Der ist .
|
|
|
|
include 'vars.php';
|
|
|
|
echo "Der $frucht ist $farbe"; // Der Apfel ist grün
|
|
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<simpara>
|
|
Wenn include innerhalb einer Funktion aufgerufen wird, verhält sich der
|
|
gesamte Code aus der aufgerufenen Datei wie wenn er in der Funktion stünde.
|
|
Folglich hat er denselben Variablen-Gültigkeitsbereich wie diese Funktion.
|
|
Eine Ausnahme von dieser Regel sind
|
|
<link linkend="language.constants.magic">magische Konstanten</link>,
|
|
die geparst werden, bevor die Einbindung durchgeführt wird.
|
|
</simpara>
|
|
<para>
|
|
<example>
|
|
<title>Include in Funktionen</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
|
|
function foo()
|
|
{
|
|
global $farbe;
|
|
|
|
include 'vars.php';
|
|
|
|
echo "Der $frucht ist $farbe.";
|
|
}
|
|
|
|
/* vars.php ist im Gültigkeitsbereich von foo(), *
|
|
* sodass $frucht außerhalb von diesem Bereich *
|
|
* nicht verfügbar ist. $farbe ist auch außerhalb *
|
|
* verfügbar, weil es als global deklariert ist. */
|
|
|
|
foo(); // Der Apfel ist grün.
|
|
echo "Der $frucht ist $farbe."; // Der ist grün.
|
|
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<simpara>
|
|
Wenn eine Datei eingebunden wird, wechselt der Parser am Anfang der
|
|
eingebundenen Datei in den HTML-Modus und am Ende wieder in den PHP-Modus.
|
|
Aus diesem Grund muss jeder PHP-Code in der eingebundenen Datei mit
|
|
<link linkend="language.basic-syntax.phpmode">gültigen PHP-Start- und -Endtags</link>
|
|
umschlossen sein.
|
|
</simpara>
|
|
<simpara>
|
|
Wenn "<link linkend="ini.allow-url-include">include-URL-Wrapper</link>"
|
|
aktiviert sind (was sie in der Standard-Konfiguration sind), kann die
|
|
einzubindende Datei mit einer URL (über HTTP oder ein anderes unterstütztes
|
|
Protokoll - siehe <xref linkend="wrappers"/> für eine Liste unterstützter
|
|
Protokolle) anstatt eines lokalen Pfades eingebunden werden. Wenn der
|
|
Zielserver die Zieldatei als PHP-Code interpretiert, können Variablen
|
|
an die einzubindende Datei mithilfe von HTTP-GET-Query-Strings übergeben
|
|
werden, obwohl dies nicht dasselbe ist, wie wenn man die Datei einbindet
|
|
und sie den Variablenbereich übernimmt; das Skript läuft weiterhin auf dem
|
|
entfernten Server und das Ergebnis wird in das lokale Skript eingebunden.
|
|
</simpara>
|
|
<para>
|
|
<example>
|
|
<title><literal>include</literal> über HTTP</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
|
|
/* Dieses Beispiel setzt voraus, dass www.example.com konfiguriert ist, *
|
|
* .php-Dateien als PHP-Skripte zu interpretieren und .txt-Dateien *
|
|
* nicht. Des Weiteren meint 'Funktioniert' hier, dass die Variablen *
|
|
* $foo und $bar innerhalb der eingebundenen Datei verfügbar sind. */
|
|
|
|
// Funktioniert nicht; file.txt wird von www.example.com nicht als PHP interpretiert
|
|
include 'http://www.example.com/file.txt?foo=1&bar=2';
|
|
|
|
// Funktioniert nicht; hier wird nach einer Datei mit dem Namen
|
|
// 'file.php?foo=1&bar=2' im lokalen Dateisystem gesucht.
|
|
include 'file.php?foo=1&bar=2';
|
|
|
|
// Funktioniert
|
|
include 'http://www.example.com/file.php?foo=1&bar=2';
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<warning>
|
|
<title>Sicherheits-Warnung</title>
|
|
<para>
|
|
Die entfernte Datei mag vom entfernten Server (je nach Konfiguration)
|
|
geparst werden oder nicht, aber sie muss weiterhin ein gültiges PHP-Skript
|
|
ausgeben, weil die Ausgabe auf dem lokalen Server als PHP ausgeführt wird.
|
|
Wenn die Datei vom entfernten Server dort verarbeitet und lokal nur
|
|
ausgegeben werden soll, ist <function>readfile</function> die bessere Wahl.
|
|
Andernfalls muss sehr gut darauf Acht gegeben werden, sicherzustellen, dass
|
|
das entfernte Skript gültigen und erwünschten Code ausgibt!
|
|
</para>
|
|
</warning>
|
|
<para>
|
|
Siehe auch <link linkend="features.remote-files">Entfernte Dateien</link>,
|
|
<function>fopen</function> und <function>file</function> für verwandte
|
|
Informationen.
|
|
</para>
|
|
<simpara>
|
|
Umgang mit Rückgabewerten: <literal>include</literal> gibt im Fehlerfall
|
|
<literal>FALSE</literal> zurück und und generiert eine Warnung.
|
|
Erfolgreiches Einbinden, außer überschrieben durch die eingebundene Datei,
|
|
gibt <literal>1</literal> zurück. Es ist möglich, in der eingebundenen Datei
|
|
<function>return</function> aufzurufen um den Ablauf dieser Datei
|
|
abzubrechen und zu dem einbindenden Skript zurückzukehren. Der
|
|
zurückgegebene Wert kann als Rückgabewert des include-Aufrufs abgefragt
|
|
werden, wie bei einer normalen Funktion. Dies ist beim Einbinden
|
|
entfernter Dateien nur möglich, wenn die entfernte Datei mit
|
|
<link linkend="language.basic-syntax.phpmode">gültigen PHP Start- und Endtags</link>
|
|
umschlossen ist (wie bei jeder lokalen Datei). Die benötigten Variablen
|
|
können innerhalb dieser Tags deklariert werden und sie werden an dem Punkt,
|
|
an dem die Datei eingebunden wird, verfügbar.
|
|
</simpara>
|
|
<para>
|
|
Weil <literal>include</literal> eine spezielles Sprachkonstrukt ist,
|
|
sind die Klammern um das Argument optional. Beim Vergleichen des
|
|
Rückgabewerts muss allerdings aufgepasst werden (siehe Beispiel).
|
|
<example>
|
|
<title>Vergleichen des Rückgabewerts von include</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
// funktioniert nicht, wird als include(('vars.php') == TRUE) behandelt
|
|
// also als include('1')
|
|
if (include('vars.php') == TRUE) {
|
|
echo 'OK';
|
|
}
|
|
|
|
// funktioniert
|
|
if ((include 'vars.php') == TRUE) {
|
|
echo 'OK';
|
|
}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
<example>
|
|
<title><literal>include</literal> und <function>return</function></title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
return.php
|
|
<?php
|
|
|
|
$var = 'PHP';
|
|
|
|
return $var;
|
|
|
|
?>
|
|
|
|
noreturn.php
|
|
<?php
|
|
|
|
$var = 'PHP';
|
|
|
|
?>
|
|
|
|
testreturns.php
|
|
<?php
|
|
|
|
$foo = include 'return.php';
|
|
|
|
echo $foo; // gibt 'PHP' aus
|
|
|
|
$bar = include 'noreturn.php';
|
|
|
|
echo $bar; // gibt 1 aus
|
|
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<simpara>
|
|
<literal>$bar</literal> hat den Wert <literal>1</literal>, weil das Einbinden
|
|
erfolgreich war. Man beachte den Unterschied zwischen den obigen Beispielen:
|
|
Die erste Datei nutzt <function>return</function>, was die andere nicht tut.
|
|
Wenn das Einbinden fehlschlägt, wird &false; zurückgegeben und ein Fehler der
|
|
Kategorie <constant>E_WARNING</constant> erzeugt.
|
|
</simpara>
|
|
<para>
|
|
Wenn in der eingebundenen Datei Funktionen definiert werden, können sie in
|
|
der einbindenden Datei genutzt werden, unabhängig davon, ob sie vor oder
|
|
nach <function>return</function> definiert werden. Wenn eine Datei zweimal
|
|
eingebunden wird, erzeugt PHP einen fatalen Fehler, weil Funktionen bereits
|
|
definiert wurden. Es wird empfohlen, <function>include_once</function> zu
|
|
nutzen, anstatt zu überprüfen, ob die Datei bereits eingebunden wurde, und
|
|
abhängig davon innerhalb der eingebundenen Datei zu handeln.
|
|
</para>
|
|
<simpara>
|
|
Ein anderer Weg, die Ausgabe eines eingebundenen Skriptes in eine Variable
|
|
zu schreiben, ist, <literal>include</literal> mit den
|
|
<link linkend="ref.outcontrol">Funktionen zur Steuerung des Ausgabepuffers</link>
|
|
zu verwenden. Beispiel:
|
|
</simpara>
|
|
<para>
|
|
<example>
|
|
<title>Nutzung des Ausgabepuffers um eine Datei in einen String aufzunehmen</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
$string = get_include_contents('somefile.php');
|
|
|
|
function get_include_contents($filename) {
|
|
if (is_file($filename)) {
|
|
ob_start();
|
|
include $filename;
|
|
return ob_get_clean();
|
|
}
|
|
return false;
|
|
}
|
|
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
Um automatisch Dateien in Skripte einzubinden, siehe auch die
|
|
Konfigurationsdirektiven
|
|
<link linkend="ini.auto-prepend-file">auto_prepend_file</link> und
|
|
<link linkend="ini.auto-append-file">auto_append_file</link> in der
|
|
&php.ini;.
|
|
</para>
|
|
|
|
¬e.language-construct;
|
|
|
|
<simpara>
|
|
Siehe auch <function>require</function>, <function>require_once</function>,
|
|
<function>include_once</function>, <function>get_included_files</function>,
|
|
<function>readfile</function>, <function>virtual</function>, und
|
|
<link linkend="ini.include-path">include_path</link>.
|
|
</simpara>
|
|
</sect1>
|
|
|
|
<!-- Keep this comment at the end of the file
|
|
Local variables:
|
|
mode: sgml
|
|
sgml-omittag:t
|
|
sgml-shorttag:t
|
|
sgml-minimize-attributes:nil
|
|
sgml-always-quote-attributes:t
|
|
sgml-indent-step:1
|
|
sgml-indent-data:t
|
|
indent-tabs-mode:nil
|
|
sgml-parent-document:nil
|
|
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
|
sgml-exposed-tags:nil
|
|
sgml-local-catalogs:nil
|
|
sgml-local-ecat-files:nil
|
|
End:
|
|
vim600: syn=xml fen fdm=syntax fdl=2 si
|
|
vim: et tw=78 syn=sgml
|
|
vi: ts=1 sw=1
|
|
-->
|