romy: Superglobals und Funktionen

Hey,

hoffe es sind alle gut reingerutscht!?

AFAIk sind superglobals in allen selbst- und nicht selbstdefinierten Funktionen erreichbar!? GIlt dies nur für zB.$_SERVER oder auch für $HTTP_SERVER_VARS?
die php-Version meines Webservers ist php4.0.4.

Das Problem ist nämlich, dass ich auf $HTTP_POST_VARS nur zugreifen kann, wenn ich sie innerhalb der Funktion nochmals für global erkläre, dass finde ich ist nicht Sinn der Sache, oder. Was könnte da los sein?

danke
ciao
romy

--
DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
->Alles ist gut wenn es aus Schokolade ist
  1. Hi romy

    hoffe es sind alle gut reingerutscht!?

    Danke. Du auch hoffe ich ;-)

    AFAIk sind superglobals in allen selbst- und nicht selbstdefinierten Funktionen erreichbar!? GIlt dies nur für zB.$_SERVER oder auch für $HTTP_SERVER_VARS?
    die php-Version meines Webservers ist php4.0.4.
    Das Problem ist nämlich, dass ich auf $HTTP_POST_VARS nur zugreifen kann, wenn ich sie innerhalb der Funktion nochmals für global erkläre, dass finde ich ist nicht Sinn der Sache, oder. Was könnte da los sein?

    Das ist vollkommen richtig. Die $_* sind _super_global, die guten alten $HTTP_*_VARS sind nur _global_, deswegen musst du sie in Funktionen als global redeklarieren. Bei den $_* ist das eben nicht nötig - ob das gut ist oder nicht muss sich noch zeigen.

    Fabian

    1. Hi Fabian

      hoffe es sind alle gut reingerutscht!?
      Danke. Du auch hoffe ich ;-)

      und wie *schlitter * *schlitter* ;)

      Bei den $_* ist das eben nicht nötig - ob das gut ist oder nicht muss sich »» noch zeigen.

      könnten daurch Sicherheitslücken auftreten?
      Eigentlich ist es ja ganz praktisch, oder!?

      ciao
      romy

      --
      DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
      ->Alles ist gut wenn es aus Schokolade ist
      1. Hi

        hoffe es sind alle gut reingerutscht!?
        Danke. Du auch hoffe ich ;-)
        und wie *schlitter * *schlitter* ;)

        ;)

        Bei den $_* ist das eben nicht nötig - ob das gut ist oder nicht muss sich »» noch zeigen.
        könnten daurch Sicherheitslücken auftreten?

        Jein, nur nter extrem unglücklichen Umstäden, Stichwort: Register Globals. Aber es ist wie gesagt nicht ganz einfach den tausenden PHP-Newbies da draußen (*g*) zu erklären, warum das so ist, den sie finden es toll, wenn sie sich nicht um die VARS kümmern müssen - und schwuppssind da die Löcher...

        Eigentlich ist es ja ganz praktisch, oder!?

        Jein, nur wenn du auf "Alles-in-einem-Abwasch"-Scripte setzt. Wenn du PHP eher Prozedural anlegst ist es IMO sauberer mit Übergabewerten für jede Funktio zu arbeiten. Aber das ist eine Philosophie für sich. Hauptsache sicher und performant =)

        Fabian
        [desse Tastatr gerade die Ns und Us getötet hat, wie du beim Lesen wohl merke wirst...]

        1. Hi,

          Eigentlich ist es ja ganz praktisch, oder!?
          Jein, nur wenn du auf "Alles-in-einem-Abwasch"-Scripte setzt. Wenn du PHP eher Prozedural anlegst ist es IMO sauberer mit Übergabewerten für jede Funktio zu arbeiten. Aber das ist eine Philosophie für sich. Hauptsache sicher und performant =)

          theoretisch sehe ich das genauso, mein Problem sind, die verschiedenen Programmabschnitte in meinem Quellcode. Gut ich könnte diese über if-Anweisungen ansteuern, da hätte ich dass Problem nicht. Aber ist dass nicht total unperformant? (ob es das Wort gibt? ;))
          Wenn ich aber die Abschnitte in Funktionen schreibe, müsste ich extrem viele Variablen übergeben (Sprachvariablen, sämtlich session-Variablen usw.), dass können bei einem Aufruf bei mir, bis zu 50 Stück sein, soll ich die alle im Funktionskopf mitübergeben? ODer doch lieber global deklarieren?
          Vielleicht gibt es ja echt ne bessere (sichere) Lösung, ich lass mich gern belehren! ;)

          Fabian
          [desse Tastatr gerade die Ns und Us getötet hat, wie du beim Lesen wohl merke wirst...]

          ?

          ciao
          romy

          --
          DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
          ->Alles ist gut wenn es aus Schokolade ist
          1. Hi

            Jein, nur wenn du auf "Alles-in-einem-Abwasch"-Scripte setzt. Wenn du PHP eher Prozedural anlegst ist es IMO sauberer mit Übergabewerten für jede Funktio zu arbeiten. Aber das ist eine Philosophie für sich. Hauptsache sicher und performant =)
            theoretisch sehe ich das genauso, mein Problem sind, die verschiedenen Programmabschnitte in meinem Quellcode. Gut ich könnte diese über if-Anweisungen ansteuern, da hätte ich dass Problem nicht. Aber ist dass nicht total unperformant? (ob es das Wort gibt? ;))
            Wenn ich aber die Abschnitte in Funktionen schreibe, müsste ich extrem viele Variablen übergeben (Sprachvariablen, sämtlich session-Variablen usw.), dass können bei einem Aufruf bei mir, bis zu 50 Stück sein, soll ich die alle im Funktionskopf mitübergeben? ODer doch lieber global deklarieren?
            Vielleicht gibt es ja echt ne bessere (sichere) Lösung, ich lass mich gern belehren! ;)

            Also ich schreibe alles was ich immer brauche in ein Array, das ich dann übergebe, also genau einen Parameter. Das hat auch zur Folge, dass das ganze Update-sicher ist, da ich nicht ständig bei allen Funktionen prüfen muss, ob auch die neuen Variablen alle übergeben wurden. Die alten Funktionen arbeiten so weiter und die neuen nehmen halt zusätzliche Variablen. Der IMHO große Vorteil dabei ist, dass man den Überblick behält. Aber das hängt natürlich vo de Anfordergen ab nd auch, welchen "Stil" man programmiert..

            Fabian

            1. Hi

              Also ich schreibe alles was ich immer brauche in ein Array, das ich dann übergebe, also genau einen Parameter. Das hat auch zur Folge, dass das ganze Update-sicher ist, da ich nicht ständig bei allen Funktionen prüfen muss, ob auch die neuen Variablen alle übergeben wurden. Die alten Funktionen arbeiten so weiter und die neuen nehmen halt zusätzliche Variablen. Der IMHO große Vorteil dabei ist, dass man den Überblick behält. Aber das hängt natürlich vo de Anfordergen ab nd auch, welchen "Stil" man programmiert..

              klingt gut, bin ich noch gar nicht drauf gekommen, war mir wahrscheinlich immer zu umständlich, aber bei näherer Betrachtung ist es wesentlich übersichtlicher, da hast Du Recht. Man lernt nie aus

              ciao
              romy

              --
              DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
              ->Alles ist gut wenn es aus Schokolade ist
      2. hi,

        ab welcher Version von PHP kann ich eigentlich $_* verwenden?

        ciao

        --
        DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
        ->Alles ist gut wenn es aus Schokolade ist
        1. Hi romy

          ab welcher Version von PHP kann ich eigentlich $_* verwenden?

          AFAIK ab 4.0.6, aber ich würde sie frühestens auf einem 4.1.x nehmen, da sie mir vorher etwas instabil scheinen (Ich weiß nicht, ob das begründet ist, aber mir kam es immer so vor, dass sie unter 4.0.x nicht ganz so global waren, wie sie sollten ;-)))

          Fabian

          1. Hallo Fabian,

            AFAIK ab 4.0.6, aber ich würde sie frühestens auf einem 4.1.x nehmen, da sie mir vorher etwas instabil scheinen (Ich weiß nicht, ob das begründet ist, aber mir kam es immer so vor, dass sie unter 4.0.x nicht ganz so global waren, wie sie sollten ;-)))

            Wo hast Du denn den Käse her?

            Zitat aus http://de3.php.net/ChangeLog-4.php#4.1.0: (PHP 4.1.0)

            | Introduced $_GET, $_POST, $_COOKIE, $_SERVER and $_ENV variables,
            | which deprecate the old $HTTP_*_VARS arrays. In addition to be much shorter
            | to type - these variables are also available regardless of the scope, and
            | there's no need to import them using the 'global' statement. (Andi & Zeev)

            Grüße,

            Christian

            --
            Ich wünsche allen ein frohes neues Jahr 2003!
            Ich bitte darum, dass ein Themenbereich (BARRIEREFREIHEIT) eingerichtet wird.
            Hmm, was könnte ich sonst noch in die Signatur schreiben?
            1. Hallo Chrtistian,

              Zitat aus http://de3.php.net/ChangeLog-4.php#4.1.0: (PHP 4.1.0)
              | Introduced $_GET, $_POST, $_COOKIE, $_SERVER and $_ENV variables,
              | which deprecate the old $HTTP_*_VARS arrays. In addition to be much shorter
              | to type - these variables are also available regardless of the scope, and
              | there's no need to import them using the 'global' statement. (Andi & Zeev)

              soll das jetzt heissen, auch die $HTTP_*_VARS muss ich nicht übergeben bzw. global machen in Funktionen? Aber wieso funktioniert es dann nicht, erst wenn Sie übergeben werden?

              ciao
              romy

              --
              DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
              ->Alles ist gut wenn es aus Schokolade ist
              1. Hallo romy,

                soll das jetzt heissen, auch die $HTTP_*_VARS muss ich nicht übergeben bzw. global machen in Funktionen?

                Nein, die $HTTP_*_VARS musst Du _immer_ irgendwie in die Funktion bekommen, die sind _nicht_ superglobal. Es sind die $_*, die superglobal sind und die nicht übergeben werden müssen und das ist die Neuerung. (es gab' vorher AFAIK nichts superglobales)

                Grüße,

                Christian

                --
                Ich wünsche allen ein frohes neues Jahr 2003!
                Ich bitte darum, dass ein Themenbereich (BARRIEREFREIHEIT) eingerichtet wird.
                Hmm, was könnte ich sonst noch in die Signatur schreiben?
                1. Hallo Christian,

                  äh falsch verstanden sorry, Du meintest mit dem Käse die Äusserung über die Superglobalität ab 4.0.6 richtig?
                  Hatte es irgendwie falsch bezogen...
                  nun ja

                  ciao
                  romy

                  --
                  DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
                  ->Alles ist gut wenn es aus Schokolade ist
                  1. Hallo romy,

                    äh falsch verstanden sorry, Du meintest mit dem Käse die Äusserung über die Superglobalität ab 4.0.6 richtig?

                    Genau.

                    Hatte es irgendwie falsch bezogen...

                    Ich hatte mich schon gewundert... :-)

                    Grüße,

                    Christian

                    --
                    Ich wünsche allen ein frohes neues Jahr 2003!
                    Ich bitte darum, dass ein Themenbereich (BARRIEREFREIHEIT) eingerichtet wird.
                    Hmm, was könnte ich sonst noch in die Signatur schreiben?
  2. Hey,

    hätte da gleich noch ne Frage.
    Kann es sein, dass es bei Versionen unter 4.1.0 Probleme gibt, mit Mehrfach-includes, sprich
    datei1 includiert datei2 und diese includiert datei3

    Hab da nämlich auch Fehlermeldungen obwohl es lokal (4.1.0) läuft.
    datei1 includiert datei2 funktioniert
    aber sobald die datei2 auch ein include hat, sagt er immer

    Warning: Failed opening 'test2.php' for inclusion (include_path='.:/usr/local//lib/php') in blabla/test.php on line 7

    dies bedeutet doch, dass er die Datei nicht findet oder?
    Desweiteren finde ich verwunderlich, das selbst wenn ich den absoluten Pfad nehme, er die Datei nicht findet.

    ciao
    romy

    PS: gilt übrigens für require und include

    PPS:Nur so zur Erklärung: versuche gerade meine Monatelange Arbeit auf den Webspace zu schieben, bislang ohne ersichtlichen Erfolg :(

    --
    DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
    ->Alles ist gut wenn es aus Schokolade ist
    1. Hallo romy,

      hätte da gleich noch ne Frage.

      Nur zu. :-)

      Kann es sein, dass es bei Versionen unter 4.1.0 Probleme gibt, mit Mehrfach-includes, sprich
      datei1 includiert datei2 und diese includiert datei3

      Eigentlich nicht. Es gibt da generelle "Problem" mit verschiedenen Verzeichnissen, siehe http://www.dclp-faq.de/q/q-datei-einbinden.html, aber das scheint es ja nicht zu sein, nachdem es in 4.1 funktioniert.

      dies bedeutet doch, dass er die Datei nicht findet oder?

      Möglich. Er könnte auch an den Dateirechten scheitert - die Meldung heißt nur, dass er die Datei nicht öffnen konnte - entweder aus nicht-Existenz oder aus mangelnden Dateirechten oder sonstwas. PHP-Dateien sollten _mindestens_ die Rechtemaske 644 erhalten, damit alles klappt. (Bei korrekter Gruppe reicht 640, aber das ist )

      Desweiteren finde ich verwunderlich, das selbst wenn ich den absoluten Pfad nehme, er die Datei nicht findet.

      Seltsam, seltsam. Obligatorische Frage: (tut mir leid, das muss ich in dem Fall fragen) Hochgeladen hast Du sie?

      Ach ja, welchen absoluten Pfad nimmst Du? Den vom Web-Stammbaum oder den vom Dateisystem?

      PS: gilt übrigens für require und include

      Nur in der Fehlerbehandlung. (require verursacht Fatal Error, include eine Warnung)

      Grüße,

      Christian

      --
      Ich wünsche allen ein frohes neues Jahr 2003!
      Ich bitte darum, dass ein Themenbereich (BARRIEREFREIHEIT) eingerichtet wird.
      Hmm, was könnte ich sonst noch in die Signatur schreiben?
      1. Hallo Christian,

        Möglich. Er könnte auch an den Dateirechten scheitert - die Meldung heißt nur, dass er die Datei nicht öffnen konnte - entweder aus nicht-Existenz oder aus mangelnden Dateirechten oder sonstwas. PHP-Dateien sollten _mindestens_ die Rechtemaske 644 erhalten, damit alles klappt. (Bei korrekter Gruppe reicht 640, aber das ist )

        -rw----r--
        das ist nicht wirklich 644 ;)
        dazu fehlt der Gruppe ein read richtig?
        ergo: -rw-r--r-- müsste es heissen?

        das wird dann wohl das Problem sein, wei kann ich jetzt alle Dateien auf einmal ändern oder muss ich jede einzeln ändern?

        Seltsam, seltsam. Obligatorische Frage: (tut mir leid, das muss ich in dem Fall fragen) Hochgeladen hast Du sie?

        ja, ich kann ja auf sie zugreifen und wenn ich dann den Pfad herauskopiere und diesen includiere, kommt trotzdem der Fehler. Klingt etwas utopisch, aber...

        Ach ja, welchen absoluten Pfad nimmst Du? Den vom Web-Stammbaum oder den vom Dateisystem?

        web-stammbaum

        --
        DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
        ->Alles ist gut wenn es aus Schokolade ist
        1. Hallo romy,

          das ist nicht wirklich 644 ;)
          dazu fehlt der Gruppe ein read richtig?
          ergo: -rw-r--r-- müsste es heissen?

          Ja.

          das wird dann wohl das Problem sein, wei kann ich jetzt alle Dateien auf einmal ändern oder muss ich jede einzeln ändern?

          Wenn Du Shell-Zugang hast über

          chmod 0644 $(find . -name "*.php")

          sonst müsstest Du das Handbuch Deines FTP-Programms konsultieren.

          web-stammbaum

          Das kann ja nicht funktionierien. Beim Includen spielt _immer_ das Dateisystem eine Rolle.

          Grüße,

          Christian

          --
          Ich wünsche allen ein frohes neues Jahr 2003!
          Ich bitte darum, dass ein Themenbereich (BARRIEREFREIHEIT) eingerichtet wird.
          Hmm, was könnte ich sonst noch in die Signatur schreiben?
          1. Hallo Christian,

            An den Dateirechten lag es nicht! Auch nach der Änderung immernoch das Problem.
            Vermutlich liegt es daran, dass er von einem anderen Standort ausgeht, wie beschrieben in dem link, denn DU gepostet hat.
            Aber, warum läuft es lokal und sonst nicht
            bzw. woher soll ich wissen wo er sich jetzt gerade befindet, Mit den Servervars bin ich nicht wirklich weit gekommen. Selbst wenn ich mir die zurechtschneide.

            Also
            datei1 includiert datei2 und diese enthält ein include
            //die neu zu includierende Datei liegt im Gleichen Verzeichnis
            // Datei1 liegt ein Verzeichnis höher

            steht in datei2 :
            a) include("test.php") gehts nicht
            b) include("blabla/test.php") geht
            c) include("/home/romy/usw/usw/blabla/test.php"); geht nicht

            was kann ich da tun?

            ciao
            romy

            --
            DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
            ->Alles ist gut wenn es aus Schokolade ist
            1. Hallo Romy,

              steht in datei2 :
              a) include("test.php") gehts nicht

              Siehe meinen Link.

              b) include("blabla/test.php") geht

              Gut zu wissen. :-)

              c) include("/home/romy/usw/usw/blabla/test.php"); geht nicht

              Dann stimmt der Pfad nicht. Andere Erklärung habe ich nicht.

              include (dirname (__FILE__) . '/test.php');

              müsste auch funktionieren. (Siehe meinen Link  http://www.dclp-faq.de/q/q-datei-einbinden.html)

              Grüße,

              Christian

              --
              Ich wünsche allen ein frohes neues Jahr 2003!
              Ich bitte darum, dass ein Themenbereich (BARRIEREFREIHEIT) eingerichtet wird.
              Hmm, was könnte ich sonst noch in die Signatur schreiben?
              1. Hallo Christian,

                c) include("/home/romy/usw/usw/blabla/test.php"); geht nicht
                Dann stimmt der Pfad nicht. Andere Erklärung habe ich nicht.

                ja er stimmte nicht,kleiner denkfehler

                danke erstmal, ich versuche es mit der Variante aus dem link.
                Mittlerweile wünschte ich mir, auf dem WebServer würde einfach nur eine neuere PHP-Version aufgespielt werden. Soviele Änderungen! Etwas nervig

                ciao
                romy

                --
                DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
                ->Alles ist gut wenn es aus Schokolade ist
        2. Hallo Romy, mein 1. Eintrag im neuem Jahr, wünsch euch allen noch ein gesundes und frohes Jahr 2003!
          So dann mal zu deinem Problem...+

          -rw----r--
          das ist nicht wirklich 644 ;)
          dazu fehlt der Gruppe ein read richtig?
          ergo: -rw-r--r-- müsste es heissen?

          644 heisst -rw-r--r-- also richtig ja ;-)

          das wird dann wohl das Problem sein, wei kann ich jetzt alle Dateien auf einmal ändern oder muss ich jede einzeln ändern?

          Was für ein FTP Tool benutzt du denn? Denn da gibts ziehmlich gute wie LeapFTP die das sehr gut beherrschen! Also alles markieren und dann chmod 644 usw...

          Besten Gruß

          cg