Uploads steuern mit PHP

Loveboat

Erfahrenes Mitglied
Hallo zusammen,

ich möchte mich mal wieder an Euch wenden. Hoffe Ihr könnt mir Antworten zu meinen Fragen geben. :p

Ich möchte gerne über eine Admin-Page Bilder hochladen können. Hierzu habe ich eine Seite inkl. Upload-Form gebastelt. Und damit ich nicht nur ein Bild hochladen kann, habe ich mehrere Upload-Felder eingerichtet:

HTML:
<tr>
    <td width="50" height="20" align="left" class="Font5">Bild 1:</td>
    <td width="460" height="20" align="left"><input type="file" name="upload[]" size="20" class="form_textlong1"></td>
</tr>
<tr>
    <td width="50" height="20" align="left" class="Font5">Bild 2:</td>
    <td width="460" height="20" align="left"><input type="file" name="upload[]" size="20" class="form_textlong1"></td>
</tr>
<tr>
    <td width="50" height="20" align="left" class="Font5">Bild 3:</td>
    <td width="460" height="20" align="left"><input type="file" name="upload[]" size="20" class="form_textlong1"></td>
</tr>
<tr>
    <td width="50" height="20" align="left" class="Font5">Bild 4:</td>
    <td width="460" height="20" align="left"><input type="file" name="upload[]" size="20" class="form_textlong1"></td>
</tr>

Damit diese auch schön im Array an mein PHP-Script übergeben werden habe ich die Namen mit einer eckigen Klammer versehen. Die Übergabe an mein Script funktioniert auch fehlerfrei.

Als Ergebnis (mit var_dump($_FILES['upload']) erstellt) kommt folgendes raus:


PHP:
array(5) {
  ["name"]=>
  array(4) {
    [0]=>
    string(23) "Buckingham_Palace-1.jpg"
    [1]=>
    string(18) "Tower_Bridge-2.jpg"
    [2]=>
    string(22) "Trafalgar_Square-1.jpg"
    [3]=>
    string(29) "Buckingham_Palace_Green-1.jpg"
  }
  ["type"]=>
  array(4) {
    [0]=>
    string(11) "image/pjpeg"
    [1]=>
    string(11) "image/pjpeg"
    [2]=>
    string(11) "image/pjpeg"
    [3]=>
    string(11) "image/pjpeg"
  }
  ["tmp_name"]=>
  array(4) {
    [0]=>
    string(18) "/var/tmp/php_2aabV"
    [1]=>
    string(18) "/var/tmp/phpa3aabV"
    [2]=>
    string(18) "/var/tmp/phpb3aabV"
    [3]=>
    string(18) "/var/tmp/phpc3aabV"
  }
  ["error"]=>
  array(4) {
    [0]=>
    int(0)
    [1]=>
    int(0)
    [2]=>
    int(0)
    [3]=>
    int(0)
  }
  ["size"]=>
  array(4) {
    [0]=>
    int(693358)
    [1]=>
    int(570217)
    [2]=>
    int(682325)
    [3]=>
    int(818966)
  }
}



Frage a:

Wie werden die Dateien hochgeladen, wenn ich allen 4 Feldern eine Datei übergebe? Werden die Bilder parallel oder hintereinander hochgeladen?


Frage b:
Wie kann ich eine Anzeige erstellen, die mir den Status der Übertragung anzeigt, also wieviel schon hochgeladen wurde? Normalerweise kann ich prozentual ausrechnen, wie groß die temporäre Datei im vergleich zur Originaldatei hat. Aber dazu müsste die HTML-Seite mehrmals pro Sekunde eine Art Reload machen und neu berechnen. Hat hier jemand eine bessere Idee?

Wäre super wenn hier jemand ein paar Tips geben kann.

Danke und Gruß an alle..
Loveboat
 
ich schmeis jetzt einfach mal Ajax ins Gespräch.
damit könntest du ein httpRequest absetzten der auf ein PHP Script zielt das, dass tut was du gerade beschrieben hast. (Grafische Anzeige) Alleine mit PHP geht es nicht, evt in einem iframe. aber das wäre doch sehr unschön.
wie es hochgeladen wird kann ich dir nicht sagen.
 
Zu deiner Frage b kann ich dir auch nur einen Tip geben. Ich stand vor dem selben Problem. Ich habe das Formular dahergehend komplett in einen Div- Container gesetzt. Sobald ich auf Submit klicke, wird dieser eingeblendet und es erscheint eine Gif- Grafik, welche einem Ladebalken gleich kommt. Darunter steht, dass die Datei hochgeladen wird. Allerdings ist es glaub ich nur mit sehr sehr sehr sehr viel Aufwand möglich, den prozentualen Fortschritt auszugeben. Daheer ist denk ich eine derartige Lösung wie ich sie dir gerade vorgeschlagen hab am effektivsten.

Aber zu der Thematik fällt mir auch noch eine Frage ein:
Die Upload- Datein werden ja ins vorgesehene temporäre Verzeichnis von PHP geladen. Wie lange verweilen diese dort? Wäre es z.B. möglich 3 Datein einzeln nacheinander hoch zu laden, sprich ein Uploadscript 3 mal auszuführen?

Um kurz zu erklären, was mir vorschwebt:
Ich möchte innerhalb eines Newspublishers ein Uploadscript einbauen. Dort soll man per Pop- Up Datein hochladen können. Dies soll einzeln und nacheinander geschehen. Nach jedem Upload einer einzlenen Datei soll eine Session mit den temporären Namen der Dateien aktualisiert werden. Wenn man fertig mit dem Upload ist und den News, klickt man selbstverständlich auf Submit. Das verarbeitende Script soll erst dann anhand der Session die temporären Datein in einen spezifischen Ordner verschieben.
Ich brauche hierfür keine Anleitung, ich möchte nur wissen, ob dies technisch prinzipiell möglich ist, um mir möglicherweise vergebenen Aufwand zu sprane.
 
Zuletzt bearbeitet:
http://at.php.net/manual/de/features.file-upload.php

Das die hochgeladene Datei empfangende Skript sollte die notwendige Logik zur Entscheidung enthalten, was mit der hochgeladenen Datei geschehen soll. Sie können zum Beispiel $_FILES['userfile']['size'] benutzen, um zu kleine bzw. zu große Dateien wegzuwerfen. Sie können $_FILES['userfile']['type'] nutzen, um Dateien eines unerwünschten Typs wegzuwerfen. Seit PHP 4.2.0 können Sie Ihre Logik auch mittels $_FILES['userfile']['error'] anhand der Fehlercodes planen. Egal welche Logik Sie verwenden, Sie sollten die Datei in dem temporären Verzeichnis entweder löschen, oder an einen anderen Ort verschieben.

Wurde die Datei in dem temporären Verzeichnis nicht verschoben oder umbenannt, wird sie am Ende des Requests gelöscht.

Ich denke das kannst Du nur lösen wenn du dir ein Verzeichniss anlegst in dem du die Datein sammels und am Ende in das Gewünschte Verzeichniss kopierts
 
Aber das ist doch enorm Aufwand, oder? Oder lässt sich nur anhand einer Datei irgendwie das Datum und die Uhrzeit herausfinden?
Oder lässt sich eine Datei gar in einer Session speichern?
 
Verschiebe die hochgeladenen Dateien einfach in einem zusätzlichen temporären Verzeichnis, etwa in einem mit der Sitzungs-ID als Bezeichnung.
 
Hm, und dann müsste ich praktisch nur überprüfen, ob die Session- ID noch vorhanden ist. Wie macht man das? :(
Ja klar und wenn die Datein dann in den richtigen Ordner verschoben werden, lösche ich auch einfach den Ordner.
 
Darum gehts nicht. Mit dem was du mir hier gegeben hast, damit kann ich nur Prüfen, ob ein Ordner mit meiner eigenen Session- ID vorhanden ist. Allerdings müsste das Script alle derzeitigen Session-ID's auslesen und die Ordner mit diesen vergleichen.
 
Zurück