PHP-Datei mit Batch im Browser öffnen und ausführen

Als Webentwickler gehört eine Serverstruktur mit Apache, MySQL, PHP, Perl etc. zur Standard-Arbeitsumgebung. Um PHP-Scripte zu testen, müssen diese natürlich über den Interpreter laufen. Dazu ruft man den Browser auf und gibt die URL der zu testenden PHP-Datei ein. Das ist schon etwas lästig.

Gut, man könnte die Datei(en) als Lesezeichen speichern. Da kommt dann aber schnell eine ordentliche Liste zusammen und das Ganze ist relativ unflexibel.

Da wäre es doch praktischer, einfach per rechtem Mausklick die Datei über Senden an zum Browser zu schicken.
Aber wie?

Nun, einfach mit einer Verknüpfung zum Browser im SendTo-Ordner ist es nicht getan. Denn die Datei wird mit ihrem lokalen Pfad übergeben und nicht mit der URL für den HTTP-Server.

Lösung für dieses Problem ist eine kleine Batch-Datei. Diese bereitet aus dem lokalen Pfad die URL auf und schickt dann das Ganze an den Browser.

Und so geht’s:
Zuerst öffnen wir einen einfachen Text-Editor -da reicht schon der simple Windows-Editor- und geben folgende Zeilen ein:

@echo off
setlocal enabledelayedexpansion

In der ersten Zeile schalten wir alle Befehlsausgaben ab. Das ist zwar nicht zwingend notwendig, aber die abgearbeiteten Befehle brauchen ja nicht umbedingt angezeigt zu werden. Mit der zweiten Zeile ändern wir die Regeln für das Lesen von Variableninhalten. Näher möchte ich darauf auch gar nicht eingehen, nur, dass dies für unser Script notwendig ist.

Als nächstes definieren wir drei Variablen, browser_path, http_root und doc_root.

Die erste enthält als Wert den Installationspfad des Browsers, den wir nutzen möchten, z. B. FireFox. In unserem Beispiel ist dies
d:\programme\internet\ff\firefox.exe.

Die zweite Variable enthält die Host-Adresse des HTTP-Servers. Da bei mir der Server auf meinem lokalen PC läuft, ist dies 127.0.0.1. localhost würde zum gleichen Ergebnis führen.

In der dritten Variablen geben wir das lokale Root-Verzeichnis unseres HTTP-Servers an, in meinem Beispiel ist das E:\web\http (ohne letzten Backslash!).

Alle drei Variablen müsst ihr natürlcih an eure Gegebenheiten anpassen.

Jetzt haben wir also folgende Zeilen im Editor stehen:

@echo off
setlocal enabledelayedexpansion
 
set browser_path=d:\programme\internet\ff\firefox.exe
set http_root=http://127.0.0.1
set doc_root=e:\web\http

Nun definieren wir noch eine Variable datei, die den Inhalt des Übergabe-Parameters unserer Batch-Datei enthält, also den lokalen Pfad der übergebenen PHP-Datei. Da dies der erste Parameter ist, wird als Wert-Zuweisung %1 angegeben.
Das sieht dann so aus:

@echo off
setlocal enabledelayedexpansion
 
set browser_path=d:\programme\internet\ff\firefox.exe
set http_root=http://127.0.0.1
set doc_root=e:\web\http
 
set datei=%1

Jetzt muss der lokale Datei-Pfad zur URL aufbereitet werden. Dabei hilft uns die Überlegung, dass wir “nur” den Teil des Pfades abschneiden müssen, der dem Root-Verzeichnis entspricht.
Beispiel:
Übergeben wir die Datei index.php, die im lokalen Pfad e:\web\http\projekt-1\ liegt, an unsere Batch-Datei, erhalten wir den Parameter-Wert
e:\web\http\projekt-1\index.php.

Für die spätere URL brauchen wir aber erstmal nur den Teil \projekt-1\index.php. Der Rest kann weg. Dazu nutzen wir eine SET-Anweisung, mit der wir Zeichenketten beschneiden können und die seit Windows XP verfügbar ist.
Sie lautet vereinfacht: set var1=%var:~StartPos%.

Diese Angabe bedeutet, dass wir den Inhalt der Variablen var ab der Position StartPos bis zum Ende der Zeichenkette an die Variable var1 übergeben.

Beispiel:
Nehmen wir an, die Variable var hat den Inhalt Hallo Welt. Dann hätte die Variable var1 mit dem Aufruf set var1=%var:~5% den Wert Welt.

In unserem Beispiel kennen wir aber die Startposition leider nicht, bzw. müssten diese ggf. aus dem Eintrag von doc_root selbst auszählen. Da wir aber flexibel bleiben wollen, übernimmt das für uns eine kleine Routine. Diese ermittelt die Länge der an sie übergebenen Zeichenkette und sieht wie folgt aus:

:StrLength 
set WorkString=%*
set Length=0
:StrLengthLoop
if not "!WorkString:~%StrLength%,1!"=="" (
  set /a StrLength += 1
  goto StrLengthLoop
)

Mit dem Routinen-Aufruf call :StrLength %doc_root% ermitteln wir nun die Zeichenlänge des Variablen-Inhalts von doc_root. Denn so erhalten wir die benötigte Startposition für unsere “Zeichenketten-Beschneidung”.
Unsere Batch sieht jetzt so aus:

@echo off
setlocal enabledelayedexpansion
 
set browser_path=d:\programme\internet\ff\firefox.exe
set http_root=http://127.0.0.1
set doc_root=e:\web\http
 
set datei=%1
 
call :StrLength %doc_root%
 
goto :eof
:StrLength 
set WorkString=%*
set Length=0
:StrLengthLoop
if not "!WorkString:~%StrLength%,1!"=="" (
  set /a StrLength += 1
  goto StrLengthLoop
)
goto :eof

Die Angabe goto :eof sorgt dafür, dass die eben beschriebene Routine nur durch den Aufruf call ausgeführt wird. Fehlte diese Angabe, würde sie zusätzlich am Ende des Ausführungsscriptes nochmals ausgeführt werden.

Mit den nächsten beiden Anweisung beschneiden wir nun endlich die Pfad-Angabe auf den Teil, den wir brauchen und ersetzen die Backslashes durch Slashes:

call set "datei=%%datei:~%StrLength%%%"
set datei=%datei:\=/%

Zum Schluss setzen wir in der Variablen browser_url alle URL-Teile zusammen und übergeben diese mit einem Aufruf an den Browser.

set browser_url=%http_root%%datei%
start %browser_path% %browser_url%

Und hier der gesamte Batch-Code in der Übersicht:

@echo off
setlocal enabledelayedexpansion
 
set browser_path=d:\programme\internet\ff\firefox.exe
set http_root=http://127.0.0.1
set doc_root=e:\web\http
 
set datei=%1
 
call :StrLength %doc_root%
 
call set "datei=%%datei:~%StrLength%%%"
set datei=%datei:\=/%
 
set browser_url=%http_root%%datei%
start %browser_path% %browser_url%
 
goto :eof
:StrLength 
set WorkString=%*
set Length=0
:StrLengthLoop
if not "!WorkString:~%StrLength%,1!"=="" (
  set /a StrLength += 1
  goto StrLengthLoop
)
goto :eof

Ach so, etwas fehlt ja noch:
Speichert die Datei z. B. als open-php.bat ab. Öffnet den Explorer und gebt in der Adressleiste shell:sendto ein. So gelangt ihr in den SendTo-Ordner, und dort legt ihr die Batch-Datei rein.
Nun könnt ihr durch Rechtsklick die gewünschte Datei über Senden an an euren Browser mit einer HTTP-URL übergeben.

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="">

Spam protection by WP Captcha-Free