CirTap: PHP_SELF

Moin Gemeinde,

mi sento sconvolto...

Ich habe bei verschiedenen Providern PHP am rennen und auch lokal unter Windoof. Die Variable PHP_SELF ist ja ganz praktisch, nun würde ich sie auch gerne verwenden, erhalte aber unterschiedliche Werte dafür:

Lokal:
PHP_SELF = /pfadzuphp/PHP.EXE/script.php3

Provider 1:
PHP_SELF = /pfadzuphp/PHP.EXE/script.php3

Provider 2:
PHP_SELF = /script.php3

Das dumme ist, daß bei den Varianten, die PHP.EXE enthalten einige Aktionen nicht ganz so funktionieren wie gewünscht, vermutlich weil dadurch auch das "Arbeitsverzeichnis" des der PHP-Datei in die Pampa umgeleitet wird. Relative Pfadangabe, z.B. bei include() suchen dann in der falschen Ecke.
Im Manual hab ich nichts gefunden, das PHP_SELF "erklärt". Es wird nur gerne in einigen Beispielen verwendet.

Frage 1: Was ist nun "richtig(er)" ?
Rein intuitiv würde ich das von "Provider 2" für korrekt halten.

Frage 2:
Was müssen ich und "Provider 1" wo einstellen, damit auch hier nur der Name/Pfad des aktuellen PHP-Scriptes geliefert wird?

tia.

CirTap

  1. hi cirtap,

    variante 2 ist, wie du schon angenommen hast, die korrekte. ich könnte mir vorstellen, daß es am os oder an der version (apache mod oder als cgi kompiliert) liegt (php.exe - da schliße ich doch auf einen nt-server)

    was man dagegen tun kann, wüßte ich jetzt auch nicht, außer selber globale variablen für alle skripte anlegen...

    cu pete

    1. Hi Pete,
      danke erstmal.

      variante 2 ist, wie du schon angenommen hast, die korrekte.

      schön :-)

      ich könnte mir vorstellen, daß es am os oder an der version (apache mod oder als cgi kompiliert) liegt

      ist in "allen"  Fällen die "CGI-version" (bei mir lokal sowieso)
      Bei den Providern vermutlich auch, weil ich keine der Funktionen die in der "Modul-Version" verfügbar sind, verwenden kann - ist jetzt aber ne reine Vermutung...

      (php.exe - da schliße ich doch auf einen nt-server)

      nur lokal, die anderen OS sind linux.
      Bei Privider 1 wird aber der Pfad zu PHP *vorangestellt" (z.B. /usr/local/bin/php oder so ähnlich )

      was man dagegen tun kann, wüßte ich jetzt auch nicht, außer selber globale variablen für alle skripte anlegen...

      wird schwierig, wenn ich "fertige" scripte einsetze... möchte ungern erst mal immer alle sourcen durchwühlen; das hatte ich schon <g>

      danke aber erstmal.
      CirTap

  2. Hi,

    Ich habe bei verschiedenen Providern PHP am rennen und auch lokal unter Windoof. Die Variable PHP_SELF ist ja ganz praktisch, nun würde ich sie auch gerne verwenden, erhalte aber unterschiedliche Werte dafür:

    das liegt an der Kompilieroption cgi-force-redirect. Die ist bei den Windows binaries standartmaessig abgeschaltet. Es besteht laut den PHP-Etwicklern ein Sicherheritsloch, wenn dieses Feature angeschaltet wird, aber wie gesagt nur unter Windows.

    Ein kleines Script kann dir helfen immer $PHP_SELF einsetzen zu koennen.

    if(isset($WINDIR)) $PHP_SELF=$PATH_INFO;

    Das prueft ob die Umgebungsvariable $WINDIR gegeben ist, das kommt normalerweise nur unter Windows vor <g/>. Wenn dem so ist, wird die Variable $PHP_SELF mit der unter Windows verfuegbaren Umgebungsvariable $PATH_INFO ueberschrieben, die dann auch script.php liefert.

    Frage 1: Was ist nun "richtig(er)" ?
    Rein intuitiv würde ich das von "Provider 2" für korrekt halten.

    Es stimmt beides, nur ist es eben Plattformabhaengig.

    Frage 2:
    Was müssen ich und "Provider 1" wo einstellen, damit auch hier nur der Name/Pfad des aktuellen PHP-Scriptes geliefert wird?

    s.o.

    Jan

    1. Hi Jan,

      sei bedankt...
      das erklärt einiges.
      Werd's so machen :-)
      CirTap