WernerK: $PHP_SELF ersetzen

Hallo,

ich muss gerade einen uralten PHP Code durchforsten und für PHP 7 tauglich machen 😀 Im gesamten Code kommt öfters noch das alte "$PHP_SELF" vor.

Man muss dies ja durch "$_SERVER['PHP_SELF']" ersetzen. In vielen Funktionen wurde damals aber noch "global $PHP_SELF" verwendet.

muss man das jetzt auch durch "global $_SERVER['PHP_SELF'];" ersetzen? Dies wirft bei mir auch einen Syntax Error und ich vermute es ist garnicht nötig?

function Query1($uid) {
      global $con;
      **global $PHP_SELF;**
      global $session;
      
      $s="<div><h3 style=\"color:" . SITE_COL . ";\">Define Query</h3>\n";
      //ALT $s.="<form name=\"formqry\" action=\"$PHP_SELF\" method=post><table>\n";
      $s.="<form name=\"formqry\" action=\"".$_SERVER['PHP_SELF']."\" method=post><table>\n";

Gruss Werner

  1. Tach!

    muss man das jetzt auch durch "global $_SERVER['PHP_SELF'];" ersetzen?

    $_SERVER ist eine der superglobalen Variablen, die steht ohne weiteres Zutun überall zur Verfügung.

    dedlfix.

  2. Hallo WernerK,

    $_SERVER ist ein Superglobal, den brauchst Du nicht per global bekannt zu machen.

    Du KANNST ganz zu Beginn deines Scripts eine Zuweisung machen:

    $PHP_SELF = $_SERVER['PHP_SELF'];

    und dann tief in irgendwelchen Funktionen mit global $PHP_SELF darauf zugreifen.

    Auf Anhieb sehe ich keinen Syntaxerror im Code (außer den Sternchen, aber die sind ja von Dir hineinzitiert).

    Der einzige Fallstrick kommt, wenn Du nicht mit global $PHP_SELF arbeiten willst, sondern überall auf das Superglobal zugreifen willst. Dann stößt Du Du sicherlich auf $PHP_SELF in Strings, da musst Du auf die komplexe Syntax umsteigen - also die geschweiften Klammern.

    // Ersetze
    echo "I am in $PHP_SELF and quite ancient";
    
    // durch
    echo "I am in {$_SERVER['PHP_SELF']} and a bit modernized";
    

    Ansonsten: Wie genau lautet die Meldung?

    Rolf

    --
    sumpsi - posui - clusi
    1. Hallo,

      es kommt ein Syntax Error wenn man es so versucht:

      global $_SERVER['PHP_SELF'];

      Parse error: syntax error, unexpected '[', expecting ',' or ';'

      aber das ist ja dann eh nicht mehr notwendig.

      Gruss

      Werner

      1. Tach!

        es kommt ein Syntax Error wenn man es so versucht:

        global $_SERVER['PHP_SELF'];

        Parse error: syntax error, unexpected '[', expecting ',' or ';'

        Ja, mit global kennzeichnet man Variablen. Nur einen Teil aus einem Array angeben zu wollen, geht nicht.

        dedlfix.

        1. Hallo,

          ich möchte keinen neuen Thread aufmachen, daher hier eine weitere Frage:

          Kann man so ereg mit preg_match ersetzen?

          if($val && (ereg("^Text|^Memo|^Date|^Bool|^Nume",substr($key,0,4)))) {
          
          durch
          
          if($val && (preg_match('/^Text|^Memo|^Date|^Bool|^Nume/',substr($key,0,4)))) {
          

          Gruss

          Werner

          1. Tach!

            Kann man so ereg mit preg_match ersetzen?

            Die beiden Systeme haben eine unterschiedliche Syntax. Das muss auch übersetzt werden. Lediglich den Funktionamen auszutauschen wird nicht zielführend sein.

            dedlfix.

            1. Hallo dedlfix,

              hmm, wie meinst du das?

              Laut dieser Seite müsste das doch stimmen oder?

              https://tosbourn.com/replace-ereg-with-preg_match/

              Gruss

              Werner

              1. Tach!

                hmm, wie meinst du das?

                Ich meine, dass die Posix-Regex-Syntax, die von den ereg-Funktionen verwendet wurde eine andere ist als die PCRE-Syntax, die von den preg-Funktionen verwendet wird. Vielleicht gibt es ein paar Überschneidungen, aber es gibt auch deutliche Unterschiede.

                dedlfix.

          2. Hi,

            if($val && (ereg("^Text|^Memo|^Date|^Bool|^Nume",substr($key,0,4)))) {
            

            das prüft, ob substr($key, 0, 4) genau einer der Strings "Text", "Memo", "Date", "Bool" oder "Nume" ist.

            Mir stellt sich da die Frage, ob dazu überhaupt ein Regex, egal welcher Syntax sinnvoll ist, oder ob man besser auf ein in_array oder ähnliches zurückgreift.

            cu,
            Andreas a/k/a MudGuard

  3. Hello,

    Man muss dies ja durch "$_SERVER['PHP_SELF']" ersetzen.

    Man muss nicht (im Sinne von "darf nicht"!). Man muss den Kontext beachten und passende Maßnahmen ergreifen, damit durch stumpfe Verwendung von PHP_SELF kein Cross-Site-Scripting ermöglicht wird.

    Liebe Grüße
    Tom S.

    --
    Es gibt nichts Gutes, außer man tut es!
    Das Leben selbst ist der Sinn.