wichtel: register_globals=off per PHP-Befehl möglich?

Hallo alle,

auf meinem Testserver muss ich register_globals vorerst auf "on" lassen, sonst laufen einige alte Sachen nicht mehr. Neue Scripte möchte ich aber so programmieren, dass sie mit register_globals=off funktionieren.

Deshalb suche ich nach einer Möglichkeit, diesen Parameter am Anfang meines PHP-Skriptes zu setzen, damit ich dann auch Fehlermeldungen erhalte, wenn ich doch mal in den alten Stil zurückfalle. Gibt es da eine Möglichkeit?

wichtel

  1. Hell-O!

    Gibt es da eine Möglichkeit?

    Nicht script- aber servergesteuert, wenn zulässig:
    http://www.php.net/manual/de/ini.core.php#ini.register-globals

    Siechfred

    --
    Ich bin strenggenommen auch nur interessierter Laie. (molily)
    Zitat des Tages || Falle Aufteilungsbescheid || RT 221 Erfurt-Altstadt i.V.
    1. Das reicht mir völlig! Besten Dank! :-)

      wichtel

    2. Hallo Siechfred,

      Nicht script- aber servergesteuert, wenn zulässig:
      http://www.php.net/manual/de/ini.core.php#ini.register-globals

      Ah ja, dann korrigiere ich meine Aussage, dass man dies mit ini_set() erledigen kann. :-)

      Grüße

      Marc Reichelt || http://www.marcreichelt.de/

      --
      Linux is like a wigwam - no windows, no gates and an Apache inside!
      Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
  2. Hallo wichtel,

    auf meinem Testserver muss ich register_globals vorerst auf "on" lassen, sonst laufen einige alte Sachen nicht mehr. Neue Scripte möchte ich aber so programmieren, dass sie mit register_globals=off funktionieren.

    Deshalb suche ich nach einer Möglichkeit, diesen Parameter am Anfang meines PHP-Skriptes zu setzen, damit ich dann auch Fehlermeldungen erhalte, wenn ich doch mal in den alten Stil zurückfalle. Gibt es da eine Möglichkeit?

    Ja - hierzu gibt es beispielsweise die Methode ini_set().

    Wenn dir die Steuerungsmöglichkeit via .htaccess-Datei ermöglicht wird, gibt es aber eine IMHO bessere Option. Dann schreibst du einfach eine Datei ".htaccess" mit folgendem Inhalt:
    php_flag register_globals 0

    Diese muss in dem gewünschten Ordner liegen (die Unterverzeichnisse brauchen sie AFAIK nicht).

    Anmerkung: Beachte vor allem die Kommentare (z. B. diesen) zu dieser Funktion - ein Apache2 erwartet diesen Befehl in einem <Directory>- oder z. B. <VirtualHost>-Element.

    Da IMHO sowohl Apache als auch Apache2 mit einer <Directory>-Direktive umgehen können, sollte man das auch bei beiden so machen, um die Kompatibilität zu gewährleisten.

    Grüße

    Marc Reichelt || http://www.marcreichelt.de/

    --
    Linux is like a wigwam - no windows, no gates and an Apache inside!
    Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
    1. Hallo Marc,

      Ja - hierzu gibt es beispielsweise die Methode ini_set().

      Naja, das ändert dann den Wert des Flags zwar, allerdings wird das Flag ja nur *bevor* auch nur der erste Scriptcode ausgeführt wurde, einmal ausgewertet, falls es an ist, werden die globalen Variablen registriert, dann wird das Flag nie mehr betrachtet. Wenn Du das also mit ini_set änderst, dann ändert sich zwar ein Bit im Speicher, nicht jedoch das Verhalten des Scripts, weil zu dem Zeitpunkt "der Zug schon längst abgefahren ist".

      Viele Grüße,
      Christian

      --
      "I have always wished for my computer to be as easy to use as my telephone; my wish has come true because I can no longer figure out how to use my telephone." - Bjarne Stroustrup
      1. Hallo Christian,

        Naja, das ändert dann den Wert des Flags zwar, allerdings wird das Flag ja nur *bevor* auch nur der erste Scriptcode ausgeführt wurde, einmal ausgewertet, falls es an ist, werden die globalen Variablen registriert, dann wird das Flag nie mehr betrachtet. Wenn Du das also mit ini_set änderst, dann ändert sich zwar ein Bit im Speicher, nicht jedoch das Verhalten des Scripts, weil zu dem Zeitpunkt "der Zug schon längst abgefahren ist".

        Scho klar - ich habe im Eifer des Tippens den Wald vor lauter Bäumen nicht gesehen.
        Man reiche mir den Zaunpahl. *zonk*

        Grüße

        Marc *SCNR* Reichelt || http://www.marcreichelt.de/

        --
        Linux is like a wigwam - no windows, no gates and an Apache inside!
        Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
    2. echo $begrüßung;

      Wenn dir die Steuerungsmöglichkeit via .htaccess-Datei ermöglicht wird, gibt es aber eine IMHO bessere Option. Dann schreibst du einfach eine Datei ".htaccess" mit folgendem Inhalt:
      php_flag register_globals 0

      Diese muss in dem gewünschten Ordner liegen (die Unterverzeichnisse brauchen sie AFAIK nicht).

      Eine Verzeichnis-Konfigurationsdatei (.htaccess) gilt immer auch für die Unterverzeichnisse.

      Anmerkung: Beachte vor allem die Kommentare (z. B. diesen) zu dieser Funktion - ein Apache2 erwartet diesen Befehl in einem <Directory>- oder z. B. <VirtualHost>-Element.

      Da IMHO sowohl Apache als auch Apache2 mit einer <Directory>-Direktive umgehen können, sollte man das auch bei beiden so machen, um die Kompatibilität zu gewährleisten.

      Wer weiß, was bei dem Kommentar-Schreiber die Ursache ist, ich kann keine Probleme mit der Notation von php_flag in einer Verzeichnis-Konfigurationsdatei (.htaccess) nachvollziehen. Er bezieht sich dabei auf das Apache-2-Handbuch, in dem aber das Wort php_flag laut Google-Site-Search nicht vorkommt. Auch ist die Aussage "internal server error" ziemlich wenig aussagekräftig ohne einen Blick auf die tatsächliche Meldung im Error-Log.

      Alle PHP-Konfigurationseinstellungen sind übrigens im Anhang des PHP-Handbuchs aufgelistet. Dabei steht auch immer eine Angabe (Changeable), wo dieser Wert geändert werden kann.

      echo "$verabschiedung $name";