Zend_File_TransferZend_File_Transfer bietet exzessiven Support für Datei Uploads und Downloads. Es kommt mit eingebauten Prüfungen für Dateien und Funktionslitäten um Dateien mit Filtern zu verändern. Protokoll-Adapter erlauben Zend_File_Transfer die selbe API für Transportprotokolle wie HTTP, FTP, WEBDAV und andere zu verwenden.
Die Verwendung von Zend_File_Transfer ist relativ einfach. Es besteht aus zwei Teilen. Dem HTTP Formular, während Zend_File_Transfer die hochgeladenen Dateien behandelt. Siehe das folgende Beispiel: Example #1 Einfaches Formular für File-Uploads Dieses Beispiel zeigt einen einfachen Dateiupload. Das erste Teil ist das Dateiformular. In unserem Beispiel gibt es nur eine Datei welche wir hochladen wollen.
Der Bequemlichkeit halber kann Zend_Form_Element_File verwendet werden statt das HTML manuell zu erstellen. Der nächste Schritt ist die Erstellung des Empfängers des Uploads. In unserem Beispiel ist der Empfänger bei /file/upload zu finden. Als nächstes erstellen wir also den 'file' Controller mit der upload() Aktion.
Dieses Codebeispiel demonstriert die einfachste Verwendung von Zend_File_Transfer. Ein lokales Ziel wird mit der setDestination() Methode definiert, und anschließend die receive() Methode aufgerufen. Wenn irgendwelche Uploadfehler auftreten werden diese als Ausnahme zurückgegeben.
Von Zend_File_Transfer unterstützte AdapterZend_File_Transfer wurde designt um verschiedenste Adapter und auch Richtungen zu unterstützen. Mit Zend_File_Transfer kann man Dateien Hochladen, Herunterladen und sogar Weiterleiten (Hochladen mit einem Adapter und Herunterladen mit einem anderen Adapter zur gleichen Zeit). Optionen für Zend_File_TransferZend_File_Transfer und seine Adapter unterstützen verschiedene Optionen. Alle Optionen können gesetzt werden indem Sie entweder dem Constructor übergeben werden, oder durch Aufruf der setOptions($options). getOptions() gibt die Optionen zurück die aktuell gesetzt sind. Nachfolgend ist eine Liste aller unterstützten Optionen:
Dateien prüfenZend_File_Transfer hat verschiedene Methoden die auf verschiedenste Stati von spezifizierten Dateien prüfen. Diese sind nützlich wenn man Dateien bearbeiten will nachdem Sie empfangen wurden. Diese Methoden beinhalten:
Example #2 Dateien prüfen
Zusätzliche DateiinformationenZend_File_Transfer kann zusätzliche Informationen über Dateien zurückgeben. Die folgenden Methoden sind vorhanden:
getFileName() akzeptiert den Namen des Elements als ersten Parameter. Wenn kein Name angegeben wird, werden alle bekannten Dateinamen in einem Array zurückgegeben. Wenn die Datei eine MultiDatei ist, wird auch ein Array zurückgegeben. Wenn nur eine einzelne Datei vorhanden ist wird nur ein String zurückgegeben. Standardmäßig werden Dateinamen mit dem kompletten Pfad zurückgegeben. Wenn man nur den Dateinamen ohne Pfad benötigt, kann der zweite Parameter $path gesetzt werden, welcher den Dateinamen ausschneidet wenn er auf FALSE gesetzt wird. Example #3 Den Dateinamen bekommen
getFileSize() gibt standardmäßig die echte Dateigröße in SI Schreibweise zurück was bedeutet das man 2kB statt 2048 erhält. Wenn man die reine Größe benötigt muß man die useByteString Option auf FALSE setzen. Example #4 Die Größe einer Datei erhalten
getHash() akzeptiert den Namen eines Hash Algorithmus als ersten Parameter. Für eine Liste bekannter Algorithmen kann in » PHP's hash_algos Methode gesehen werden. Wenn kein Algorithmus spezifiziert wird, wird crc32 als Standardalgorithmus verwendet. Example #5 Den Hash einer Datei erhalten
getMimeType() gibt den Mimetyp einer Datei zurück. Wenn mehr als eine Datei hochgeladen wurde wird ein Array zurückgegeben, andernfalls ein String. Example #6 Den Mimetyp einer Datei bekommen
Warning
Mögliche ExceptionBeachte das diese Methode die fileinfo Erweiterung verwendet wenn Sie vorhanden ist. Wenn diese Erweiterung nicht gefunden werden kann wird die mimemagic Erweiterung verwendet. Wenn keine Erweiterung gefunden wird dann wird eine Exception geworfen. Warning
Originale Daten in $_FILESAus Sicherheitsgründen werden auch die originalen Daten in $_FILES überschrieben sobald Zend_File_Transfer initiiert wird. Wenn man dieses Verhalten unterdrücken will und die originalen Daten benötigt, kann bei der Instanzierung die Option detectInfos einfach auf FALSE gesetzt werden. Diese Option hat keinen Effekt nachdem Zend_File_Transfer instanziert wurde. Fortschritt für Datei UploadsZend_File_Transfer kann den aktuellen Status eines gerade stattfindenden Datei Uploads erheben. Um dieses Feature zu verwenden muß man entweder die APC Erweiterung verwenden, die mit den meisten standardmäßigen PHP Installationen vorhanden ist, oder die UploadProgress Erweiterung. Beide Erweiterungen werden erkannt und automatisch verwendet. Um den Fortschritt zu erhalten muß man einige Voraussetzungen erfüllen. Erstens, muß man entweder APC oder UploadProgress aktiviert haben. Es ist zu beachten das dieses Feature von APC in der eigenen php.ini ausgeschaltet werden kann. Zweitens, muß man die richtigen unsichtbaren Felder im Formular hinzugefügt haben das die Dateien sendet. Wenn man Zend_Form_Element_File verwendet werden diese unsichtbaren Felder automatisch von Zend_Form hinzugefügt. Wenn die oberen zwei Punkte vorhanden sind dann ist man in der Lage den aktuellen Fortschritt des Datei uploads zu erhalten indem man die getProgress() Methode verwendet. Aktuell gibt es 2 offizielle Wege um das hand zu haben. Verwenden eines Progressbar AdaptersMan kann einen bequemen Zend_ProgressBar verwenden um den aktuellen Fortschritt zu erhalten und kann Ihn dann auf einfachem Wege dem Benutzer zeigen. Um das zu ermöglichen, muß man den gewünschten Zend_ProgressBar_Adapter bei getProgress() hinzufügen wenn es das erste Mal aufgerufen wird. Für Details über den zu verwendenden Adapter, bitte im Kapitel Zend_ProgressBar Standard Adapters nachsehen. Example #7 Verwenden eines Progressbar Adapters um den aktuellen Status zu erhalten
Die komplette Handhabung wird von getProgress() im Hintergrund durchgeführt. getProgress() händisch verwendenMan kann mit getProgress() auch händisch arbeiten, also ohne die Verwendung von Zend_ProgressBar. getProgress() muß ohne Einstellungen aufgerufen werden. Es gibt anschließend ein Array mit verschiedenen Schlüssel zurück. Sie unterscheiden sich, abhängig von der verwendeten PHP Extension. Aber die folgenden Schlüssel werden unabhängig von der Extension zurück gegeben:
Alle anderen zurückgegebenen Schlüssel werden direkt von den Extensions übernommen und werden nicht geprüft. Das folgende Beispiel zeigt eine mögliche händische Verwendung: Example #8 Händische Verwendung des Datei Fortschritts
|