C.A: include()

Hallo,

wir wollen ja auf PHP5 umstellen und da muss man ja wissen was so geändert werden muss. Ich bin da bei auch soweit alles zusammen zu tragen.

Da ist mir das im Netz aufgefallen.

"Bei mehrmaligem Einbinden von externen Dateien mit PHP-Funktions-Definitionen mittels include() entsteht nun ein FATAL ERROR. PHP4 hat dies noch ignoriert."

Ich kenne nur so.

<?php
include("datei.php");
?>

Das soll ja nach der Aussage ja nicht mehr gehen.

Ich habe noch weiter gesucht und gelesen.
"Include funktioniert unter php5 genauso wie unter php4."
So und jetzt weiß ich nicht was ich glauben soll.

Könnte man statt include(), include_once() nehmen?

LG

  1. "Bei mehrmaligem Einbinden von externen Dateien mit PHP-Funktions-Definitionen mittels include() entsteht nun ein FATAL ERROR. PHP4 hat dies noch ignoriert."

    Ich kenne nur so.

    <?php
    include("datei.php");
    ?>

    Das soll ja nach der Aussage ja nicht mehr gehen.

    Das entspricht nicht der Aussage - "beim mehrmaligen Einbinden [...] mit PHP-Funktionsdefinitionen". D.h. etwa sowas:

    Datei test1.inc.php:

    <?php

    function testfunktion()
    {
        echo 'Ich bin eine Testfunktion';
    }

    ?>

    Datei test.php:

    <?php

    include('test1.inc.php');
    include('test1.inc.php');

    ?>

    Spuckt verständlicherweise einen Fatal Error aus, da hier versucht wird, zweimal eine Funktion (bzw. eine Funktion mit identischer Bezeichnung) zu deklarieren.

    Ich wüsste allerdings nicht, dass das in PHP 4 nicht so sein sollte - von daher würde ich mich eher der Aussage, dass sich nicht geändert hat, anschließen. Oder die obige Aussage soll irgendwas anderes bedeuten...

    1. Das entspricht nicht der Aussage - "beim mehrmaligen Einbinden [...] mit PHP-Funktionsdefinitionen". D.h. etwa sowas:

      Datei test1.inc.php:

      Diese Weise kannte ich noch nicht.

      Datei test.php:

      <?php

      include('test1.inc.php');
      include('test1.inc.php');

      ?>

      So habe ich das auch noch nie gesehen.

      Danke, ich habe es verstanden.

      Also ist die Schreibweise die ich kenne noch aktuell, wenn ich dich richtig verstanden habe.

      Vielen Dank noch mal.

      1. echo $begrüßung;

        Datei test1.inc.php:
        Diese Weise kannte ich noch nicht.

        Meinst du die Schreibweise mit dem inc dazwischen? Das ist einfach nur ein Name. Du kannst deine Dateien völlig beliebig nennen. Ob du nun mit .inc.php ausdrücken willst, dass es sich um PHP-Dateien handelt, deren Zweck es ist, inkludiert statt direkt ausgeführt zu werden, oder ob du das mit .php.inc oder .phpinc oder .pinc oder sonstwie machst, ist egal.

        Also ist die Schreibweise die ich kenne noch aktuell, wenn ich dich richtig verstanden habe.

        Die Schreibweise hat mit dem Problem der doppelten Funktionsdeklaration nichts zu tun. Wenn du eine Datei hast, die nur deklarierenden Code beinhaltet, der nur ein einziges Mal pro Request geladen werden soll, dann verwende include_once oder require_once.

        Wenn du eine andere Schreibweise kennenlernen möchtest: Lass die Klammern um den Dateinamen weg. include & Co. sind Sprachkonstrukte, keine Funktionen. Das Klammern bewirkt nur dass der Dateinamensstring zu einem Ausdruck gemacht wird, der erst noch ausgewertet werden muss, bevor include an den Dateinanen kommt.

        echo "$verabschiedung $name";

        1. oder ob du das mit .php.inc oder .phpinc oder .pinc oder sonstwie machst, ist egal.

          Naja, nicht ganz... die Dateiendung sollte schon .php lauten, da der Apache die Dateien - je nach Konfiguration - evtl. bei direktem Zugriff sonst als text/plain und nicht interpretiert ausgibt. Und wenn da Variablen mit MySQL-Zugangsdaten oder ähnlichem drinstehen, ist das nicht von Vorteil...

          Gruß,

          Christian

          1. echo $begrüßung;

            oder ob du das mit .php.inc oder .phpinc oder .pinc oder sonstwie machst, ist egal.
            Naja, nicht ganz... die Dateiendung sollte schon .php lauten, da der Apache die Dateien - je nach Konfiguration - evtl. bei direktem Zugriff sonst als text/plain und nicht interpretiert ausgibt. Und wenn da Variablen mit MySQL-Zugangsdaten oder ähnlichem drinstehen, ist das nicht von Vorteil...

            Dateien, die nicht ausgeliefert werden sollen, sind außerhalb des Documentroot besser aufgehoben. Dann kann auch durch eine Fehlkonfiguration, die beispielsweise ein Parsen von Dateien mit bestimmten Endungen oder eine Zugriffseinschränkung außer Kraft setzt, kein Schaden entstehen.

            Wenn dein Sicherheitskonzept an Dateiendungen festgemacht ist, solltest du es überdenken. Schau doch mal bei deinem Provider nach, ob du nicht das Documentroot auf ein Unterverzeichnis umkonfigurieren kannst. Das ist deutlich sicherer als auf eine Dateiendung zu vertrauen.

            echo "$verabschiedung $name";