$PHP_SELF ersetzen
WernerK
- php
0 dedlfix0 Rolf B0 TS- php
- xss
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
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.
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
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
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.
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
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.
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
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.
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
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.