K-F: Server-Variablen bei PHP als CGI

Hallo, von meinem Provider habe ich nach Rückfrage erfahren, dass bei PHP als CGI im Gegensatz zu anderer PHP-Installation Server-Variablen den Prefix "REDIRECT_" erhalten, z.B REDIRECT_DOCUMENT_ROOT. Hat jemand PHP als CGI im Einsatz und kann bestätigen, dass dies daran liegt? Was mich nämlich wundert, ist, dass dies nicht durchgängig ist. Manche Variablen, wie SERVER_ADMIN haben diesen Prefix nicht. Kennt jemand die dahinterstehende Logik?

  1. Tach!

    von meinem Provider habe ich nach Rückfrage erfahren, dass bei PHP als CGI im Gegensatz zu anderer PHP-Installation Server-Variablen den Prefix "REDIRECT_" erhalten, z.B REDIRECT_DOCUMENT_ROOT. Hat jemand PHP als CGI im Einsatz und kann bestätigen, dass dies daran liegt?

    Nicht generell, da muss schon noch ein Redirect oder Rewrite vorgelegen haben.

    Was mich nämlich wundert, ist, dass dies nicht durchgängig ist. Manche Variablen, wie SERVER_ADMIN haben diesen Prefix nicht. Kennt jemand die dahinterstehende Logik?

    Es gibt Angaben, die ändern sich auch mit einem Redirect/Rewrite nicht, die können also ohne Prefix bleiben.

    dedlfix.

    1. Hi,

      und dies gilt nur bei PHP als CGI?

      1. Tach!

        und dies gilt nur bei PHP als CGI?

        Weiß ich nicht. Mich persönlich interessiert nicht, wie PHP eingebunden ist, sondern was letztlich im Script zur Verfügung steht. Also das was in $_SERVER ankommt. Da such ich mir dann das passende raus. Aber Achtung, das kann sich je nach Request auch ändern. Wenn man beispielsweise einen Dateinamen braucht, muss man das Feld nehmen, da auch beim Vorhandensein eines Querystrings ohne diesen bleibt.

        dedlfix.

  2. Hallo,

    Manche Variablen, wie SERVER_ADMIN haben diesen Prefix nicht. Kennt jemand die dahinterstehende Logik?

    Kommt darauf an wie die Variable gesetzt wird. Hier mal ein Beispiel

    SetEnvIf REQUEST_URI "/env.html" FOO=bar
    SetEnv ASDF ghjk
    

    Im Fall (1) erfolgte ein redirect im Fall (2) nicht. Hier siehst Du den Unterschied.

    MfG

    1. Allen vielen Dank, wenn auch traurig für mich, da ich am Testsystem am lokalen Rechner nun andere Namen abfragen muss als in der Internet-Version.

      1. Allen vielen Dank, wenn auch traurig für mich, da ich am Testsystem am lokalen Rechner nun andere Namen abfragen muss als in der Internet-Version.

        Ja das ist schlecht, es macht das Deployment nicht gerade einfach. Es ist generell schlecht, sich von einer serverseitigen Konfiguration abhängig zu machen. Ansonsten, was den Standard CGI/1.1 betrifft, wirst Du wohl kaum auf diese Variablen direkt zugreifen, denn dieser Standard wurde ja entwickelt um HTTP transparent zu machen.

        Aber offensichtlich gehen Deine Bedünisse auch über CGI/1.1 hinaus, denn alles was CGI/1.1 in die Serverumgebung setzt, ist ja vom Prefix gar nicht betroffen.

        MfG

      2. Allen vielen Dank, wenn auch traurig für mich, da ich am Testsystem am lokalen Rechner nun andere Namen abfragen muss als in der Internet-Version.

        Wieso? Mit einem einfachen:

        require $_SERVER['DOCUMENT_ROOT'].'/lib/repair_var_SERVER.php'

        <?php
        
        /**
        * Copy all key-value-pairs in $_SERVER with keys, beginning with 'REDIRECT_', to there origins (witheout 'REDIRECT_')
        * To use this:
        * require $_SERVER['DOCUMENT_ROOT'].'/lib/repair_var_SERVER.php';
        **/
        
        foreach ( array_keys( $_SERVER ) as $key ) {
        	if ( 0 === strpos( $key, 'REDIRECT_' ) ) {
        		$newKey = substr ( $key, 9 );
        		$_SERVER[$newKey] = $_SERVER[$key];
        	}
        }
        

        ... ist das, was Du für ein "Problem" hältst, im Bruchteil einer Millisekunde an einer zentralen Stelle behoben. Die drei "=" sind kein Schreibfehler, der typstrenge Vergleich (===) ist notwendig.

        1. Hi fastix,

          er wird uns nicht verraten was er da zusammenbraut. Aber das kann uns ja egal sein.

          MfG

          1. er wird uns nicht verraten was er da zusammenbraut. Aber das kann uns ja egal sein.

            Ja, das kann es. Wir hatten erst neulich eine ganz ähnliche Sache.

            In der wurde von setEnv mit ziemlich guter Begründung abgeraten…

            1. er wird uns nicht verraten was er da zusammenbraut. Aber das kann uns ja egal sein.

              Ja, das kann es. Wir hatten erst neulich eine ganz ähnliche Sache.

              In der wurde von setEnv mit ziemlich guter Begründung abgeraten…

              Stimmt, die war von mir. Hier nochmal, da entwicklen wir Frameworks um uns von der Serverkonfiguration unabhängig zu machen, aber es interessiert keine Sau. Wahrscheinlich scheitert das Verständnis schon am Transparenzbegriff.

              MfG

  3. Hallo,

    von meinem Provider habe ich nach Rückfrage erfahren, dass bei PHP als CGI im Gegensatz zu anderer PHP-Installation Server-Variablen den Prefix "REDIRECT_" erhalten,

    Eine solche Aussage ist Unsinn.

    REDIRECT_DOCUMENT_ROOT.

    Und das hat mit CGI/1.1 gar nichts zu tun.

    Hat jemand PHP als CGI im Einsatz und kann bestätigen, dass dies daran liegt?

    CGI/1.1 ist ein Standard, der ist unabhängig von PHP. Und auch unabhängig von Redirect.

    MfG