Seite 1 von 1

Scriptname verarbeiten

Verfasst: 23.03.2013 00:30
von DetlefT
Hallo,

ich suche schon den ganzen Abend nach einer sicherlich ziemlichen einfachen Lösung, finde aber immer nur Teilstückchen, die ich nicht zu einem kompletten Ganzen zusammensetzen kann.

Aufgabe: Ein aufgerufenes php-Script soll mir den Namen des Scriptes verraten, wichtig dabei ist eigentlich nur der Dateiname und die Argumente.
Beispiel: Scriptname "http://example.com/ordner/datei.php?arg1=a&arg2=b&arg=c"
Ich brauche unbedingt den Teil "?arg1=a&arg2=b&arg=c" (mit oder ohne Fragezeichen), weniger wichtig ist der Teil "ordner/datei.php".

Gefunden habe ich $_SERVER['argv'], die Ausgabe ist aber NULL, $_SERVER[''PHP_SELF''] bringt mir schon mal "/ordner/datei.php".

Zu lösen ist die Aufgabe (ohne .htaccess), über php eine Weiterleitung zu realisieren von einem Ordner in einen anderen Ordner (respektive Subdomain)
http://example.com/phpBB3/datei.php?arg1=a&arg2=b&arg=c
nach
http://forum.example.com/datei.php?arg1=a&arg2=b&arg=c

Ansatz:

Code: Alles auswählen

<?
...nötige Stringverarbeitungen ...
header("Status: 301 Moved Permanently"); 
header("Location: http://forum.example.com/");
exit();
?>
??? :-?

Re: Scriptname verarbeiten

Verfasst: 23.03.2013 00:41
von cYbercOsmOnauT
http://test.cybercosmonaut.de/servervar ... =blablabla

Such Dir die $_SERVER aus die Du benötigst. (Tipp: SCRIPT_NAME und QUERY_STRING)

argv und argc sind Werte die bei Shellaufrufen verwendet werden. Das sie bei einem Webaufruf leer sind, erklärt sich von selbst.

SERVER_NAME würde ich zum Prüfen des Host verwenden um zu schauen, ob man schon auf dem neuen Host ist oder nicht.

Re: Scriptname verarbeiten

Verfasst: 23.03.2013 00:42
von gn#36
Den Dateinamen bekommst du am sichersten mit __FILE__.

Ansonsten kannst du dir die Superglobale $_SERVER ja einfach mal mit print_r($_SERVER); ausgeben lassen. Dann kannst du dir aussuchen was dir am besten passt für dein Skript, da gibt's nämlich mehrere Möglichkeiten ($_SERVER['REQUEST_URI'] und $_SERVER['QUERY_STRING'] beispielsweise, evtl. noch mehr die ich gerade nicht im Kopf habe).

EDIT: Da war der Tekin wohl schneller...

Re: Scriptname verarbeiten

Verfasst: 23.03.2013 14:24
von DetlefT
Hallo Ihr Zwei,

danke, dass Ihr mich auf's Pferd gesetzt habt - ja jetzt ja, eine Insel!

Ausprobiert und nach ersten Erkenntnissen klappt es genau wie erhofft. Many thanks! :grin:

Re: Scriptname verarbeiten

Verfasst: 23.03.2013 20:38
von BNa

Code: Alles auswählen

"?arg1=a&arg2=b&arg=c"
Warum nicht request_var()?

Re: Scriptname verarbeiten

Verfasst: 23.03.2013 21:39
von cYbercOsmOnauT
BNa hat geschrieben:Warum nicht request_var()?

Code: Alles auswählen

function request_var($var_name, $default, $multibyte = false, $cookie = false) 
Woher weißt Du welche Argumente im Query String stehen? ;) Mit Deinem Weg müsste man QUERY_STRING erst aufsplitten und die Variablennamen der Argumente ausfiltern. Dann diese einzeln mit request_var abrufen, daraus dann wieder eine neue URL bilden und zu dieser per 301 umleiten. Da der QUERY_STRING sich aber nicht ändert, kann man den auch einfach so nehmen wie er ist, oder? ;)

Re: Scriptname verarbeiten

Verfasst: 23.03.2013 21:52
von DetlefT
Hi,

ich habe es so gelöst:

Code: Alles auswählen

<?
$datu = $_SERVER['REQUEST_URI'];
$kurz = substr($datu,1,6);
if ($kurz == 'phpBB3') {
     $datu = substr($datu,7);
}
$datu = 'http://forum.example.com'.$datu;
header("Status: 301 Moved Permanently"); 
header("Location: ".$datu);
exit();
?>
die zusätzlichen Codezeilen mit mit substr() habe ich eingebaut, weil sowohl SCRIPT_NAME wie auch PHP_SELF den Filenamen mit dem Ordner bringen, also beide Variablen bringen phpBB3/filename.php.

Re: Scriptname verarbeiten

Verfasst: 23.03.2013 22:03
von cYbercOsmOnauT
Du kannst diese 3 Zeilen

Code: Alles auswählen

$datu = 'http://forum.example.com'.$datu;
header("Status: 301 Moved Permanently"); 
header("Location: ".$datu); 
auch zusammenfassen zu einer Zeile

Code: Alles auswählen

header("Location: http://forum.example.com".$datu, 301); 
PHP header Beschreibung

Re: Scriptname verarbeiten

Verfasst: 24.03.2013 00:45
von BNa
cYbercOsmOnauT hat geschrieben:Woher weißt Du welche Argumente im Query String stehen?
Achja, aber das kommt davon, wenn man nur mit nem halben Ohr hinhört :grin:

Re: Scriptname verarbeiten

Verfasst: 24.03.2013 01:41
von DetlefT
cYbercOsmOnauT hat geschrieben:

Code: Alles auswählen

header("Location: http://forum.example.com".$datu, 301);
Danke für den Tip. :)