Christoph: Bilder hochladen

Ich will Bilder mit ihrer Originalnamen in ein Verzeichnis auf einen Server laden. Das Verzeichnis wurde mittels mkdir erfolgreich erstellt.
Allerdings werden die Bilder nicht in den Server geladen.
Das sind die Codes:
Code:
Grafik 1<br>
gültige Formate jpg-, jpeg- und gif-Dateien.
<input name='grafik1' type='file' >
<input type='hidden' name='MAX_FILE_SIZE' value='500000'>
<input type='hidden' name='ordner' value='$ordner'>
<input type='submit' name='submit' value='Beenden'>

Code:
<?php
$ordner = ($_POST["ordner"]);
$max = ($_POST["MAX_FILE_SIZE"]);
    $dateiname1 = $grafik1_name;
if($grafik1_size > $max)
{
echo "Die Datei ist zu groß, die maximale Dateigrösse beträgt $max Byte(s)";
}
else
if (isset($submit)) {
copy($grafik1,"/$ordner/$dateiname1");

  1. Hallo Christoph,

    Allerdings werden die Bilder nicht in den Server geladen.

    Das ist auch keine grosse Ueberraschung

    Lies mal diesen Artikel in den PHP-FAQ
    http://www.php-faq.de/q/q-formular-upload-php4.html

    Gruß,

    Dieter

  2. Hi!

    Ich will Bilder mit ihrer Originalnamen in ein Verzeichnis auf einen Server laden. Das Verzeichnis wurde mittels mkdir erfolgreich erstellt.
    Allerdings werden die Bilder nicht in den Server geladen.
    [...]

    Das wundert mich nicht - dein Code strotzt nur so von Fehlern ;-)

    Zu allererst sei mal erwähnt, das MAX_FILE_SIZE nur eine Art Richtwert für den Browser ist, der jedoch auch überschritten werden kann, insofern solltest du dich nicht alleine auf diesen Wert verlassen, sondern die Dateigröße selber ermitteln (filesize().

    Darüber hinaus solltest du die superglobalen Arrays $_POST und $_FILES verwenden, anstatt dich auf register_globals=on zu verlassen. Dahinter stehen vor allem sicherheitskritische Gründe.

    Für alles andere möchte ich dir den entsprechenden Abschnitt im Manual näherlegen. Dort wird alles genau beschrieben.

    Grüße,
    Fabian St.

    1. Hello,

      Zu allererst sei mal erwähnt, das MAX_FILE_SIZE nur eine Art Richtwert für den Browser ist, der jedoch auch überschritten werden kann, insofern solltest du dich nicht alleine auf diesen Wert verlassen, sondern die Dateigröße selber ermitteln (filesize().

      Wenn man die Größe ganz gezielt beschränken will und einen Apache-Server hat, so sollte man das Script in ein Verzeichnis legen, dessen Upload mittels .htaccess-Einstellung oder VirtHost-Einstellung serverseitig beschränkt ist. Der Apache wertet dann schon die in den Headern übermittelte Dateigröße aus (wenn vorhanden) und gibt einen Fehlercode, wenn die zu groß ist, oder bricht schlimmstenfalls den Upload nach der eingestellten Anzahl Bytes ab.

      SetInputFilter PHP
        LimitRequestBody 16000000

      regelt die maximale Größe des gesamten Requests

      php_admin_value post_max_size        500000
        php_admin_value upload_max_filesize   80000

      regeln dann php-seits die Größen per Post und per Datei

      Dem Browser sollte man seinen Wunsch aber trotzdem mitteilen.

      Harzliche Grüße vom Berg
      esst mehr http://www.harte-harzer.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau
  3. Hello,

    Grafik 1<br>
    gültige Formate jpg-, jpeg- und gif-Dateien.
    <input name='grafik1' type='file' >
    <input type='hidden' name='MAX_FILE_SIZE' value='500000'>
    <input type='hidden' name='ordner' value='$ordner'>
    <input type='submit' name='submit' value='Beenden'>

    Code:
    <?php
    $ordner = ($_POST["ordner"]);
    $max = ($_POST["MAX_FILE_SIZE"]);
        $dateiname1 = $grafik1_name;
    if($grafik1_size > $max)
    {
    echo "Die Datei ist zu groß, die maximale Dateigrösse beträgt $max Byte(s)";
    }
    else
    if (isset($submit)) {
    copy($grafik1,"/$ordner/$dateiname1");

    Da will ich für Dich (und für uns alle) aber hoffen, dass Du das nur auf deinem lokalen Server einsetzt.

    • Keine Prüfung, um welchen Mime-Type es sich wirklich handelt
        Die Prüfung _muss_ auf dem Server geschehen mit einer sicheren Funktion

    • Keine Prüfung, vohin die Datei geladen wird

    • Keine Auswertung der Fehlerstati

    Außerdem:

    Woher kommt $grafik1_size ?
    Woher kommt $grafik1 ?

    Das siehrt mir alles sehr nach 'register_globals = ON' aus *igitt*

    Lies Dir das Manual nochmal genauer durch, und programmiere so, als wäre register_globals = OFF

    http://de.php.net/features.file-upload

    und baue alle Prüfungen ein, die Du Dir vorstellen kannst. Fileupload ist der empfindlichste Bereich in Bezug auf Sicherheit!

    Ober willst Du Deinen Server an Spammer und Gangster verlieren und dafür auch noch haften?

    Harzliche Grüße vom Berg
    esst mehr http://www.harte-harzer.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau