Ich muss dafür sorgen, dass ein Server folgendermaßen funktioniert:
Prüfen Sie, ob die angeforderte Datei lokal vorhanden ist.
- Wenn vorhanden, servieren Sie es sofort
- wenn nicht, übergeben Sie den REQUEST_URI an ein Skript, das ihn herunterlädt
- Wenn die Datei ?delete=1 hat, rufen Sie das Skript auf, um sie zu entfernen
Ich habe dieses Verhalten erfolgreich mit nginx (unter Verwendung des 404-Fehlerhandlers) und PHP implementiert. Die Sache ist, dass ich, um dies auf einem anderen Server zu implementieren, sowohl nginx als auch PHP installieren/kompilieren muss.
Meine Frage ist, ob es eine Möglichkeit gibt, PHP aus dem Stack zu entfernen und Nginx (oder einen anderen Server) für diese Aufgabe einzusetzen. Ideal wäre für mich, wenn ich Bash-Skripte/-Befehle direkt vom Server aus ausführen/aufrufen könnte.
Kann mir jemand den richtigen Weg weisen?
Antwort1
Was Sie versuchen, lässt sich ganz einfach mit einfachem CGI und einem Shell-Skript erreichen. Wie Sie CGI aktivieren/implementieren, hängt vom Server ab. Nginxsollenkann, aber ich weiß, dass Apache dazu in der Lage ist. Lesen Sie in der Dokumentation nach oder stellen Sie eine spezifische Frage zum Aktivieren von CGI auf einem bestimmten Webserver.
Einfache Bash-Logik zum Prüfen, ob eine Datei existiert und um sie anzuzeigen:
#!/bin/bash
FILE="/path/to/file"
URI="http://example.com/file"
/bin/echo "Content-type: text/plain"
/bin/echo
if [ -f $FILE ]; then
/bin/cat $FILE
else
/usr/bin/wget $URI
fi
Sie können ${QUERY_STRING} analysieren, um Ihre Löschaktion zu erhalten. Die vollständige Lösung und Fehlerbehandlung überlasse ich Ihnen als Übung. Es wird etwas knifflig und geht über den Rahmen unseres Q&A-Formats hinaus.