echo $_GET funktioniert nicht im php code
Nakedsoul
- php
$fcontents = join ('', file ('echo ($_GET['ad']);'));
Eine PHP neuling frage: Warum gibt mir das script diesen error aus obwohl ich meiner meinung nach den echo ($_GET['ad']); teil richtig eingefügt habe.
Ich möchte es nämlich mit ".../index.php?ad=rotatorinhaltNR1.txt" aufrufen.
kompletter code:
<?php
$fcontents = join ('', file ('echo ($_GET['ad']);'));
$s_con = split("~",$fcontents);
$banner_no = rand(0,(count($s_con)-1));
echo $s_con[$banner_no];
?>
Warum gibt mir das script diesen error aus.
Welchen Fehler?
file() erwartet als erstes Argument einen String, genauer gesagt irgendwas was in irgend einer Weise auf einen Filenamen verweist und durch den Stream-Wrapper von PHP passt (und natürlich konfigurationsabhängig ist - Stichwort allow_url_fopen usw.).
"echo ($_GET['ad']);" ist wohlkaum ein gültiger Dateiname.
Welchen Fehler?
hehe sry vergessen einzufügen:
Parse error: syntax error, unexpected ')', expecting ']' in /.../index.php on line 3
ja ich möchte anstelle des dateinamens GET funktion verwenden. wie könnte es aussehen wenn man dies zun würde?
versuchs mal mit:
$fcontents = join ('', file ($_GET['ad']));
grund:
$fcontents = join ('', file ('echo ($_GET['ad']);'));
würde aufgerissen so aussehen:
$fcontents = join (
'',
file (
'echo ($_GET[' // hier wäre der string schon zuende
ad // Fehler. Kein komma oder ähnliches
']);' // ein zweiter string. ebenfalls ohne komma davor.
)
);
file erwartet den relativen dateipfad. wenn das aber drin steht kann es nicht funktionieren. das "echo" in einem string ('echo ...') wird nur bei der funktion eval ausgeführt.
So wäre die richtige variane aufgerissen:
$fcontents = join (
'',
file (
$_GET['ad'] // die $_GET-Variablen liefern quasi immer einen String oder eine Zahl. Jenachdem, was übergeben wurde.
)
);
versuchs mal mit:
$fcontents = join ('', file ($_GET['ad']));
grund:
Du willst dem OP eins reinwürgen, stimmts?
foo.php?ad=%2Fusr%2Flocal%2Fapache%2Fpasswd%2Fpasswords
versuchs mal mit:
$fcontents = join ('', file ($_GET['ad']));
grund:
Du willst dem OP eins reinwürgen, stimmts?
foo.php?ad=%2Fusr%2Flocal%2Fapache%2Fpasswd%2Fpasswords
öööööööhm. daran hab ich bei meinem lösungsvorschlag net gedacht. könnte man aber mit ner if-abfrage umgehn. oder man erlaubt nur den dateinamen und keine pfade oder sowas?
es ist also ein sicherheitsrisiko suits lösung?
naja das ich immer eine der gründe warum ich meine HP domain bei hilfe foren nicht angebe!...
könnte man seine lösung nicht anpassen?
Hello,
es ist also ein sicherheitsrisiko suits lösung?
Du bringst die Antwortgeber durcheinander :-)
naja das ich immer eine der gründe warum ich meine HP domain bei hilfe foren nicht angebe!...
könnte man seine lösung nicht anpassen?
Man könnte es besser machen.
Was wäre denn wohl dafür notwendig?
In $_GET können beliebige Werte drinstehen, die der User uns unterjubeln will.
Du könntest z.B. nur numerische Werte akzeptieren und diese dann als Index in eine Liste mit Dateinamen/Pfaden benutzten. Erst diese Übersetzung setzt Du dann in die Funktion file() als Argument ein.
Versuch mal, den Vorschlag umzusetzen. Wenn Du Hilfe dabei benötigst, zeig uns, wie weit Du gekommen bist und welche Fehlermeldungen es gegeben hat.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Ich komm mit dem tipp nicht weiter sry. wie würde dein lösungansatz aussehen?
danke sehr.
Hallo,
$fcontents = join ('', file ('echo ($_GET['ad']);'));
^ ^
hier beginnt dein String -------+ |
und hier endet er ---------------------------+
Was danach noch kommt, ist für den PHP-Parser Müll. Das *muss* einen Parse Error schmeißen.
Eine PHP neuling frage: Warum gibt mir das script diesen error aus obwohl ich meiner meinung nach den echo ($_GET['ad']); teil richtig eingefügt habe.
Richtig? Erstens nicht syntaktisch richtig, zweitens nicht sachlich richtig. Was soll die echo-Anweisung in einem String? Und selbst wenn sie das nicht wäre - was soll sie als Funktionsargument?
Wenn du $_GET['ad'] als Argument angeben willst, dann tu das doch einfach. Aber dann sorge bitte auch dafür, dass nur erlaubte Werte möglich sind, sonst handelst du dir ein großes Problem ein - sonst könnte man mit diesem Script nämlich beliebige Dateien vom Server oder zumindest von deinem Webspace lesen.
So long,
Martin
$fcontents = join ('', file ('echo ($_GET['ad']);'));
^ ^
hier beginnt dein String -------+ |
und hier endet er ---------------------------+
Was danach noch kommt, ist für den PHP-Parser Müll. Das *muss* einen Parse Error schmeißen.
ok und wie würde die lösung aussehen?
habe das getestet und es funktioniert auch nicht:
echo ($_GET[\'ad\']);
ahja folgender error:
Warning: file(echo ($_GET['ad']);) [function.file]: failed to open stream: No such file or directory in /.../bannerrotator/index.php on line 3
Warning: join() [function.join]: Invalid arguments passed in /.../index.php on line 3
Hi,
ahja folgender error:
Warning: file(echo ($_GET['ad']);) [function.file]: failed to open stream: No such file or directory in /.../bannerrotator/index.php on line 3
Ja warum zum Geier soll denn auch beim Dateinamen ein echo davorstehen, kannst du uns das erklären?
MfG ChrisB
Hallo,
Neben dem schon erwähnten Unsinn mit echo einer Funktion einen Parameter übergeben zu wollen:
$fcontents = join ('', file ('echo ($_GET['ad']);'));
Was gefällt dir an der Funktion file_get_contents() nicht?
$s_con = split("~",$fcontents);
split() ist veraltet und auch hier garnicht nötig, da du keine regulären Ausdrücke brauchst - explode() reicht völlig.
$banner_no = rand(0,(count($s_con)-1));
array_rand() existiert.
Gruß,
Tobias