ubuntuusers.de

Per Dateimanager-Kontextmenü PHP-Dateien im Browser ausführen

Status: Ungelöst | Ubuntu-Version: Lubuntu 14.04 (Trusty Tahr)
Antworten |

coram

Anmeldungsdatum:
17. Januar 2015

Beiträge: 645

Wohnort: Freiburg

Eigentlich war das im folgenden vorgestellte Shellskript als Beitrag zu diesem Forenthema gedacht. Wegen des Umfangs halte ich es nun jedoch für sinnvoller, ein eigenes Projekt aufzumachen. 🙄

Das Skript:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#!/bin/bash

FILE=$1 # Dateiname (MIT Pfad)

if ! [ -e $1 ] # Hinweis und Abbruch bei falschem Dateioperand 
then
   zenity --warning --title="Falscher Dateioperand" --text="Die eingegebene Datei existiert nicht bzw. die Pfadangabe ist falsch. Das Skript wird abgebrochen! \n\nSie können phixfox ohne Dateioperanden ausführen, um ein Dateiauswahl-Fenster zu erhalten."
   exit
fi

if [[ $1 = "" ]] # Dialog zur Dateiauswahl bei Skriptausführung ohne Dateioperand
then
    FILE=$(zenity --title "Eine Datei wählen" --file-selection)
    case $? in
         0)
                       ;;
         1)
                exit ;; # Bei Abbruch der Dateiauswahl wird Skript beendet
        -1)
                exit ;;
    esac
fi

###  Pfad des DocumentRoots ###
DOCROOT="/var/www/html"

### Fall 1: Auszuführende PHP-Datei liegt im DocumentRoot ###

if [[ $FILE =~ $DOCROOT ]]
then

    firefox http://localhost${FILE#${DOCROOT}}

else

### Fall 2: Auszuführende PHP-Datei Datei liegt außerhalb des DocumentRoots ###

# Graphischer Dialog für Benutzerabfrage
    zenity --question --text="Die Datei liegt nicht im DocumentRoot! \n\nSoll eine Kopie im Verzeichnis ${DOCROOT}/tmp angelegt und ausgeführt werden?" --ok-label="Ja" --cancel-label="Abbrechen"
    
    if [ $? -eq 0 ] # falls Benutzer Option "Ja" gewählt hat
    then

       mkdir ${DOCROOT}/tmp; cp $FILE ${DOCROOT}/tmp/ # Kopie der Datei in ein "temporäres" Verzeichnis im DocumentRoot
       DATEINAME=$(basename $FILE) # (Dateiname OHNE Pfad)
       firefox http://localhost/tmp/$DATEINAME

    fi
fi

sleep 2
PF=$(pidof firefox)

### Wurde ein temporärer Ordner angelegt, wird nach Schließen des Browsers eine Löschoption angezeigt ###

if [$PF = ""] && [ -e ${DOCROOT}/tmp ] # prüft, ob (1) Firefox geschlossen ist und (2) der temporäre Ordner existiert

then
    zenity --question --text="Soll der temporäre Ordner ${DOCROOT}/tmp einschließlich der enthaltenen Dateikopien gelöscht werden?" --ok-label="Ja" --cancel-label="Nein"
    
    if [ $? -eq 0 ]  # Löschen des Verzeichnisses tmp nach Bestätigung durch Benutzer/in
    then
       rm -fr ${DOCROOT}/tmp
    fi
fi

Wer erste Schritte in PHP unternimmt, kann oft nur schwer akzeptieren, dass PHP-Dateien sich nicht ohne weiteres direkt aus dem Dateimanager per Mausklick im Browser ausführen lassen. Anders als HTML-Dateien kann der Browser PHP-Dateien nicht von sich aus darstellen, sondern ist auf die Aufbereitung durch Webserver und PHP-Interpreter angewiesen. (Versucht man die pure Datei mit Firefox zu öffnen, bietet er diese zum Download an ...)

Diese "Lücke" will mein Skript schließen: PHP-Dateien übergibt es grundsätzlich mit der zugehörigen localhost-URL an den Browser.

Hierbei müssen die PHP-Dateien nicht zwingend im Apache-Hauptverzeichnis (Document Root) liegen. Vielmehr bietet das Skript bei außerhalb des Document Roots - etwa auch auf einem Wechseldatenträger - liegenden Dateien an, diese in einen temporären Ordner im DocumentRoot zu kopieren und anschließend die Kopie auszuführen. Nach Schließen des Browsers wird der temporäre Ordner auf Wunsch wieder gelöscht. Diese Optionen setzen für den grafischen Benutzer-Dialog das Hilfsprogram Zenity voraus:

sudo apt-get install zenity

Benutzer des Skripts müssen/können sich das Skript ggf. anpassen:

  • In Zeile 19 muss der Pfad des Document Root geändert werden, falls er vom Apache-Standard /var/www/html abweicht,

  • in den Zeilen 32, 46 und 52 kann Firefox natürlich gerne durch einen anderen Browser ersetzt werden.

Und so kriegt man das Skript zum Laufen:

Der obige Code des Skripts wird in einen Text-Editor eingefügt und (im folgenden unter dem Namen phixfox 😉 ) im Homeverzeichnis im evtl. noch anzulegenden Ordner ~/bin gespeichert. Anschließend muss diese Datei ausführbar gemacht werden - entweder mit Hilfe des Dateimanagers oder per Terminalbefehl:

chmod +x ~/bin/phixfox

Eine zugehörige .desktop-Datei ist nicht unbedingt erforderlich, kann aber in manchen Dateimanagern die Auswahl des Skripts im Kontextmenü erleichtern:

1
2
3
4
5
6
7
8
9
[Desktop Entry]
Type=Application
Encoding=UTF-8
Name=PHP im Browser ausführen
Exec=phixfox
MimeType=application/x-php;text/html;text/xml;application/xhtml+xml;x-scheme-handler/http;application/x-extension-html;
Categories=Internet;Network;WebBrowser;
NoDisplay=false
Terminal=false

Natürlich darf der .desktop-Datei auch ein Icon spendiert werden. Die .desktop-Datei muss im Verzeichnis ~/.local/share/applications gespeichert werden (Dateiname im Prinzip egal).

Um nun künftig PHP-Dateien aus dem Dateimanager heraus anzuzeigen, öffnet man per Rechtsklick auf eine PHP-Datei das Kontextmenü. Dann wählt man "Öffnen mit" (kann je nach Dateimanager evtl. auch anders bezeichnet sein) und anschließend "PHP im Browser ausführen" (im Falle einer Kategoriengliederung unter "Internet" zu finden).

Künftig sollte "PHP im Browser ausführen" bei allen PHP-Dateien als Option im Kontextmenü zu finden sein.

Will man auf die .desktop-Datei verzichten, bietet jeder vernünftige Dateimanager in der Anwendungsauswahl aber auch die Alternative, für das Öffnen der Datei eine Befehlszeile einzutragen; evtl. ist hierbei ein Parameter %f als Platzhalter für die Datei zu ergänzen:

phixfox %f

Integration in Geany:

Das Skript kann auch verwendet werden, um PHP-Dateien aus dem Editor Geany heraus im Browser auszuführen. Dies geschieht über die Sicht "Dateien" in der Geany-Seitenleiste, die als Plugin allerdings erst aktiviert werden muss:

Menü → Werkzeuge → Plugin-Verwaltung → "Dateibrowser" anhaken.

Nun öffnet man in der Dateien-Seitenleiste (NICHT in der Dokumente-Seitenleiste!) per Rechtsklick auf eine beliebige PHP-Datei das Kontextmenü, wählt "Einstellungen" und trägt dort "phixfox %f" als Externes Öffnen-Kommando ein.

Fortan lassen sich PHP-Dateien aus der Geany-Seitenleiste heraus per Rechtsklick/Kontextmenü "mit externer Anwendung öffnen".

Das Skript lässt sich natürlich auch im Terminal starten:

phixfox /Pfad/zur/PHP-Datei

Lässt man den Datei-Operanden weg, bekommt man eine mit Zenity umgesetzte graphische Dateiauswahl angeboten.

Antworten |