Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| lehrkraefte:blc:informatik:ffprg2-2023:serverfileio [2023/08/28 13:31] – [HTTP GET] Ivo Blöchliger | lehrkraefte:blc:informatik:ffprg2-2023:serverfileio [2023/08/28 13:50] (current) – [Aufgabe] Ivo Blöchliger | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== 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 '' | ||
| + | |||
| + | Order deny,allow | ||
| + | deny from all | ||
| + | |||
| + | Das wurde mir folgendem bash-script erledigt: | ||
| + | <code bash> | ||
| + | set -x | ||
| + | user=$1 | ||
| + | home=`eval echo ~$user` | ||
| + | data=$home/ | ||
| + | mkdir -p $data | ||
| + | echo -e "Order deny, | ||
| + | chown -R $user: | ||
| + | chmod g+rwx $data | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== Minimalbeispiel in PHP ===== | ||
| + | Kopieren Sie den Ordner '' | ||
| + | |||
| + | 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 | ||
| + | ([[https:// | ||
| + | |||
| + | {{: | ||
| + | |||
| + | Diese Parameter können in PHP im Objekt '' | ||
| + | |||
| + | 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, | ||
| + | |||
| + | ===== URL in JavaScript bauen und darauf zugreifen ===== | ||
| + | Beispiel-Code: | ||
| + | ==== CORS (Cross origin resource sharing) ==== | ||
| + | Szenario: Der Live-Server auf '' | ||
| + | |||
| + | Das schlägt fehl, der Browser unterbindet aus Sicherheitsgründen solche Requests. Wenn aber der '' | ||
| + | Dazu deponieren Sie im Verzeichnis, | ||
| + | <code txt> | ||
| + | Header add Access-Control-Allow-Origin " | ||
| + | </ | ||
| + | (Dazu muss im Apache Webserver das Module '' | ||
| + | |||
| + | <hidden 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:// | ||
| + | </ | ||
| + | |||
| + | ===== Aufgabe ===== | ||
| + | Bauen Sie mit diesen Angaben ein Highscore-System. | ||
| + | |||
| + | <WRAP todo> | ||
| + | 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, | ||
| + | </ | ||
| + | |||
| + | <WRAP todo> | ||
| + | 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. | ||
| + | </ | ||
| + | |||