lehrkraefte:blc:informatik:ffprg2-2023:serverfileio

Eine Datei auf dem Server mit PHP schreiben und lesen

  • 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.

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

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.

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.

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).

multiple origins

multiple origins

Es darf nur ein header Access-Control-Allow-Origin definiert sein. Sollen mehrere Origins erlaubt sein, ist folgender Trick eine Lösung:

https://gist.github.com/brianlmoon/2291111c5c69252c85f4

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.

  • lehrkraefte/blc/informatik/ffprg2-2023/serverfileio.txt
  • Last modified: 2023/08/28 15:50
  • by Ivo Blöchliger