| <- Vorlesung 8 | Übungen | Vorlesung 10 -> |
<form enctype="multipart/form-data" action="x.php" method=POST> <input TYPE="hidden" name="MAX_FILE_SIZE" value="1000000"> Ihr Name: <input name="sendername"> <br> Dateiname: <input name="geschicktedatei" type="file"><br> <input type="submit"> </form>Es können auch mehrere Felder vom Typ file vorhanden sein. Entscheidend ist, daß in <form> die Attribute enctype="multipart/form-data" und method=POST angegeben werden.
Der Wert des versteckten Feldes "MAX_FILE_SIZE" gibt die maximale Größe der Datei in Bytes an. Ist die Datei größer, so wird sie nicht akzeptiert. Nach dem Versenden der Datei sind - in unserem Beispiel in der Datei x.php mehrere PHP-Variable gesetzt, die Information über die übertragene Datei beinhalten. Sie beginnen alle mit dem Namen des Datei-Feldes im Formular (+ vorangestelltes Dollarzeichen), in unserem Fall also $geschicktedatei. Folgende Variable sind gesetzt:
if (isset($geschicktedatei)) {
echo "$geschicktedatei<br>\n";
echo "$geschicktedatei_name<br>\n";
echo "$geschicktedatei_size<br>\n";
echo "$geschicktedatei_type<br>\n";
copy($geschicktedatei,"/tmp/".$geschicktedatei_name);
}
In der systemweiten PHP-Konfigurationsdatei php.ini gibt es die Einstellung upload_max_filesize, die standardmäßig auf 2 MByte gesetzt ist. Diese globale Einstellung hat höchste Priorität, d.h. man kann sie nicht mit einer höheren Einstellung von MAX_FILE_SIZE überbieten.
Seit Version PHP 4.0.2 gibt es die Funktionen is_uploaded_file() und move_uploaded_file(), die das Kopieren von übertragenen Dateien erleichtern und etwas sicherer machen. Das obige Beispiel würde damit so aussehen:
if (move_uploaded_file($geschicktedatei, "/tmp/".$geschicktedatei_name)) {
echo "Übertragung gelungen\n";
} else {
echo "Es wude keine Datei übertragen\n";
}
Um lediglich zu testen, ob eine Datei übertragen wurde, gibt man an:
if (is_uploaded_file($geschicktedatei) {
echo "Datei wurde übertragen\n";
} else {
echo "Es wurde keine Datei übertragen\n";
}
Nachdem der Betrachter Login und Passwort eingegeben hat, sind drei PHP-Variablen gesetzt:
Im Header (d.h. vor allen HTML-Kommandos) könnte dann folgender PHP-Code gesendet werden:
<?
if (!isset($PHP_AUTH_USER) ||
($PHP_AUTH_USER!="heinz") ||
($PHP_AUTH_PW!="qwertz")
) {
Header("WWW-Authenticate: Basic realm=\"Anmeldung am Server\"");
Header("HTTP/1.0 401 Unauthorized");
echo "Anmeldung nicht erfolgreich\n";
exit;
} else {
echo "Anmeldung erfolgreich\n";
}
?>
Dieses Beispiel ist sehr einfach gehalten. Besser wäre es,
die möglichen Benutzernamen und die Passwörter in einer Datenbank zu speichern
und beim Auruf der Seite zu überprüfen.
Diese Art der Anmeldung birgt einige Nachteile mit sich. Unter anderem ist nich genau festgelgt, wann der Zugriff endet (Beim Beenden des Browsers, oder beim Beenden des Fensters...). Ausserdem ist diese Art der Zugangsbeschränkung nicht möglich, wenn PHP im CGI-Modus läuft.
Eine weitere Möglichkeit, den Zugriff zu beschränken, bietet unter anderem der apache-Server mit .htaccess-Dateien.
| <- Vorlesung 8 | Übungen | Vorlesung 10 -> |