Eine Datei auf dem Server mit PHP schreiben und lesen
Technische Voraussetzungen
- PHP muss auf dem Webserver konfiguriert sein.
- Der Benutzer des Webservers (www-data) muss die Erlaubnis haben, in ein bestimmtes Verzeichnis zu schreiben.
- Das Vezeichnis sollte vor direktem Webzugriff geschützt sein.
Vorbereitung
Damit der Webserver Zugriff hat, kann man als Benutzer Schreibrechte für alle auf ein Verzeichnis geben, oder der Administrator kann ein Verzeichnis anlegen, auf das www-data Schreibrechte hat.
Damit der Webserver aber keine Datei darin direkt ausliefert, wurde darin die Datei .htaccess
mit folgendem Inhalt angelegt:
Order deny,allow deny from all
Das wurde mir folgendem bash-script erledigt:
set -x user=$1 home=`eval echo ~$user` data=$home/www-data-dir mkdir -p $data echo -e "Order deny,allow\ndeny from all" > $data/.htaccess chown -R $user:www-data $data chmod g+rwx $data
Minimalbeispiel in PHP
Kopieren Sie den Ordner simple-file-io
vom Archiv https://ofi.tech-lab.ch/2023/teach/76f5054a/simple-file-io.zip in Ihr Homeverzeichnis auf dem Webserver.
Testen Sie den Code online und studieren Sie den PHP-Code in den PHP-Dateien.
HTTP GET
Bei einem Zugriff auf einen Webserver mit der GET-Methode werden alle Parameter in der URL gespeichert (Bildquelle):
Diese Parameter können in PHP im Objekt $_GET
ausgelesen werden.
Im Gegensatz dazu können Daten mit HTTP POST direkt zum Server gesandt werden, die nicht in der URL erscheinen. Dies ist z.B. absolut nötig für vertrauliche Information, wie z.B. Passwörter etc.
URL in JavaScript bauen und darauf zugreifen
CORS (Cross origin resource sharing)
Szenario: Der Live-Server auf localhost
möchte per XMLHttpRequest
auf ofi.tech-lab.ch
zugreifen.
Das schlägt fehl, der Browser unterbindet aus Sicherheitsgründen solche Requests. Wenn aber der ofi.tech-lab.ch
-Server dem localhost
, bzw. 127.0.0.1
die Erlaubnis für den Zugriff erteilt, funktioniert das.
Dazu deponieren Sie im Verzeichnis, wo die aufgerufene URL liegt folgenden Inhalt in die Datei .htaccess
:
Header add Access-Control-Allow-Origin "http://127.0.0.1:5500"
(Dazu muss im Apache Webserver das Module headers
aktiviert sein, was bei unserem Server gemacht wurde).
Aufgabe
Bauen Sie mit diesen Angaben ein Highscore-System.
Der einfachheithalber sollen die gesamten Daten geladen werden. Wird ein neues Highscore eingefügt, wird die ganze Liste an der Server gesendet und dort gespeichert.
Das ist natürlich problematisch, weil die ganze Liste so sehr einfach manipuliert werden könnte.
Etwas bessere Variante: Beim Speichern soll nur noch Name und Score an den Server übermittelt werden. Das PHP-Script auf der Serverseite fügt die Daten dann allenfalls selbst in die Liste ein.
Das System kann so zwar immer noch sehr einfach manipuliert werden, aber andere Einträge können so nicht manipuliert werden.