Zend_File_Transfer-Introduction.xml 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.file.transfer.introduction">
  5. <title>Zend_File_Transfer</title>
  6. <para>
  7. <classname>Zend_File_Transfer</classname> bietet exzessiven Support für Datei Uploads und
  8. Downloads. Es kommt mit eingebauten Prüfungen für Dateien und Funktionslitäten um Dateien
  9. mit Filtern zu verändern. Protokoll-Adapter erlauben
  10. <classname>Zend_File_Transfer</classname> die selbe <acronym>API</acronym> für
  11. Transportprotokolle wie <acronym>HTTP</acronym>, FTP, WEBDAV und andere zu verwenden.
  12. </para>
  13. <note>
  14. <title>Einschränkungen</title>
  15. <para>
  16. Die aktuelle Implementation von <classname>Zend_File_Transfer</classname>
  17. ist auf <acronym>HTTP</acronym> Post Uploads limitiert. Andere Adapter die Downloads und
  18. andere Protokolle unterstützen werden in zukünftigen Releases hinzugefügt. Aktuell
  19. sollte <classname>Zend_File_Transfer_Adapter_Http</classname> direkt verwendet werden.
  20. Sobald andere Adapter vorhanden sind, kann ein gemeinsames Interface verwendet werden.
  21. </para>
  22. </note>
  23. <note>
  24. <title>Formulare</title>
  25. <para>
  26. Wenn man <classname>Zend_Form</classname> verwendet sollte man die
  27. <acronym>API</acronym>s die von <classname>Zend_Form</classname> zur Verfügung gestellt
  28. werden, und <classname>Zend_File_Transfer</classname> nicht direkt, verwenden. Der
  29. Dateitransfer Support von <classname>Zend_Form</classname> ist in
  30. <classname>Zend_File_Transfer</classname> implementiert, weshalb die Informationen in
  31. diesem Kapitel für fortgeschrittene Benutzer von <classname>Zend_Form</classname>
  32. interessant sind.
  33. </para>
  34. </note>
  35. <para>
  36. Die Verwendung von <classname>Zend_File_Transfer</classname> ist relativ einfach. Es besteht
  37. aus zwei Teilen. Dem <acronym>HTTP</acronym> Formular, während
  38. <classname>Zend_File_Transfer</classname> die hochgeladenen Dateien behandelt. Siehe das
  39. folgende Beispiel:
  40. </para>
  41. <example id="zend.file.transfer.introduction.example">
  42. <title>Einfaches Formular für File-Uploads</title>
  43. <para>
  44. Dieses Beispiel zeigt einen einfachen Dateiupload. Das erste Teil ist das Dateiformular.
  45. In unserem Beispiel gibt es nur eine Datei welche wir hochladen wollen.
  46. </para>
  47. <programlisting language="xml"><![CDATA[
  48. <form enctype="multipart/form-data" action="/file/upload" method="POST">
  49. <input type="hidden" name="MAX_FILE_SIZE" value="100000" />
  50. Choose a file to upload: <input name="uploadedfile" type="file" />
  51. <br />
  52. <input type="submit" value="Upload File" />
  53. </form>
  54. ]]></programlisting>
  55. <para>
  56. Der Bequemlichkeit halber kann
  57. <link linkend="zend.form.standardElements.file">Zend_Form_Element_File</link> verwendet
  58. werden statt das <acronym>HTML</acronym> manuell zu erstellen.
  59. </para>
  60. <para>
  61. Der nächste Schritt ist die Erstellung des Empfängers des Uploads. In unserem Beispiel
  62. ist der Empfänger bei <filename>/file/upload</filename> zu finden. Als nächstes
  63. erstellen wir also den 'file' Controller mit der <methodname>upload()</methodname>
  64. Aktion.
  65. </para>
  66. <programlisting language="php"><![CDATA[
  67. $adapter = new Zend_File_Transfer_Adapter_Http();
  68. $adapter->setDestination('C:\temp');
  69. if (!$adapter->receive()) {
  70. $messages = $adapter->getMessages();
  71. echo implode("\n", $messages);
  72. }
  73. ]]></programlisting>
  74. <para>
  75. Dieses Codebeispiel demonstriert die einfachste Verwendung von
  76. <classname>Zend_File_Transfer</classname>. Ein lokales Ziel wird mit der
  77. <methodname>setDestination()</methodname> Methode definiert, und anschließend die
  78. <methodname>receive()</methodname> Methode aufgerufen. Wenn irgendwelche Uploadfehler
  79. auftreten werden diese als Ausnahme zurückgegeben.
  80. </para>
  81. </example>
  82. <note>
  83. <title>Achtung</title>
  84. <para>
  85. Dieses Beispiel ist nur für die Demonstration der grundsätzlichen <acronym>API</acronym>
  86. von <classname>Zend_File_Transfer</classname>. Man sollte dieses Code Beispiel
  87. <emphasis>niemals</emphasis> in einer Produktivumgebung einsetzen da es massive
  88. Sicherheitslücken aufweisst. Man sollte immer Prüfungen verwenden um die Sicherheit
  89. zu erhöhen.
  90. </para>
  91. </note>
  92. <sect2 id="zend.file.transfer.introduction.adapters">
  93. <title>Von Zend_File_Transfer unterstützte Adapter</title>
  94. <para>
  95. <classname>Zend_File_Transfer</classname> wurde designt um verschiedenste Adapter und
  96. auch Richtungen zu unterstützen. Mit <classname>Zend_File_Transfer</classname> kann man
  97. Dateien Hochladen, Herunterladen und sogar Weiterleiten (Hochladen mit einem Adapter und
  98. Herunterladen mit einem anderen Adapter zur gleichen Zeit).
  99. </para>
  100. </sect2>
  101. <sect2 id="zend.file.transfer.introduction.options">
  102. <title>Optionen für Zend_File_Transfer</title>
  103. <para>
  104. <classname>Zend_File_Transfer</classname> und seine Adapter unterstützen verschiedene
  105. Optionen. Alle Optionen können gesetzt werden indem Sie entweder dem Constructor
  106. übergeben werden, oder durch Aufruf der <methodname>setOptions($options)</methodname>.
  107. <methodname>getOptions()</methodname> gibt die Optionen zurück die aktuell gesetzt
  108. sind. Nachfolgend ist eine Liste aller unterstützten Optionen:
  109. </para>
  110. <itemizedlist>
  111. <listitem>
  112. <para>
  113. <emphasis>ignoreNoFile</emphasis>: Wenn diese Option auf
  114. <constant>TRUE</constant> gesetzt ist, ignorieren alle Prüfer Dateien die nicht
  115. vom Formular hochgeladen wurde. Der Standardwert ist <constant>FALSE</constant>,
  116. was einen Fehler verursacht wenn die Datei nicht spezifiziert wurde.
  117. </para>
  118. </listitem>
  119. </itemizedlist>
  120. </sect2>
  121. <sect2 id="zend.file.transfer.introduction.checking">
  122. <title>Dateien prüfen</title>
  123. <para>
  124. <classname>Zend_File_Transfer</classname> hat verschiedene Methoden die auf
  125. verschiedenste Stati von spezifizierten Dateien prüfen. Diese sind nützlich wenn man
  126. Dateien bearbeiten will nachdem Sie empfangen wurden. Diese Methoden beinhalten:
  127. </para>
  128. <itemizedlist>
  129. <listitem>
  130. <para>
  131. <emphasis>isValid($files = null)</emphasis>: Diese Methode prüft ob die
  132. angegebene Datei gültig ist, basierend auf den Prüfungen welche dieser Datei
  133. angehängt sind. Wenn keine Dateien spezifiziert wurden, werden alle Dateien
  134. geprüft. Man kann <methodname>isValid()</methodname> aufrufen bevor
  135. <methodname>receive()</methodname> aufgerufen wird; in diesem Fall ruft
  136. <methodname>receive()</methodname> intern <methodname>isValid()</methodname>
  137. nicht mehr auf.
  138. </para>
  139. </listitem>
  140. <listitem>
  141. <para>
  142. <emphasis>isUploaded($files = null)</emphasis>: Diese Methode prüft ob die
  143. spezifizierte Datei vom Benutzer hochgeladen wurde. Das ist nützlich wenn man
  144. eine oder mehrere Dateien definiert hat. Wenn keine Dateien spezifiziert wurden,
  145. werden alle Dateien geprüft.
  146. </para>
  147. </listitem>
  148. <listitem>
  149. <para>
  150. <emphasis>isReceived($files = null)</emphasis>: Diese Methode prüft ob die
  151. spezifizierte Datei bereits empfangen wurde. Wenn keine Dateien angegeben
  152. wurden, werden alle Dateien geprüft.
  153. </para>
  154. </listitem>
  155. </itemizedlist>
  156. <example id="zend.file.transfer.introduction.checking.example">
  157. <title>Dateien prüfen</title>
  158. <programlisting language="php"><![CDATA[
  159. $upload = new Zend_File_Transfer();
  160. // Gibt alle bekannten internen Datei Informationen zurück
  161. $files = $upload->getFileInfo();
  162. foreach ($files as $file => $info) {
  163. // Datei hochgeladen ?
  164. if (!$upload->isUploaded($file)) {
  165. print "Warum hast Du die Datei nicht hochgeladen ?";
  166. continue;
  167. }
  168. // Prüfungen sind ok ?
  169. if (!$upload->isValid($file)) {
  170. print "Sorry, aber die Datei ist nicht das was wir wollten";
  171. continue;
  172. }
  173. }
  174. $upload->receive();
  175. ]]></programlisting>
  176. </example>
  177. </sect2>
  178. <sect2 id="zend.file.transfer.introduction.informations">
  179. <title>Zusätzliche Dateiinformationen</title>
  180. <para>
  181. <classname>Zend_File_Transfer</classname> kann zusätzliche Informationen über Dateien
  182. zurückgeben. Die folgenden Methoden sind vorhanden:
  183. </para>
  184. <itemizedlist>
  185. <listitem>
  186. <para>
  187. <emphasis>getFileName($file = null, $path = true)</emphasis>: Diese Methode
  188. gibt den wirklichen Namen der übertragenen Datei zurück.
  189. </para>
  190. </listitem>
  191. <listitem>
  192. <para>
  193. <emphasis>getFileInfo($file = null)</emphasis>: Diese Methode gibt die
  194. internen Informationen für die angegebene übertragene Datei zurück.
  195. </para>
  196. </listitem>
  197. <listitem>
  198. <para>
  199. <emphasis>getFileSize($file = null)</emphasis>: Diese Methode gibt die
  200. echte Dateigröße für die angegebene Datei zurück.
  201. </para>
  202. </listitem>
  203. <listitem>
  204. <para>
  205. <emphasis>getHash($hash = 'crc32', $files = null)</emphasis>: Diese Methode
  206. gibt einen Hash des Inhalts einer angegebenen übertragenen Datei zurück.
  207. </para>
  208. </listitem>
  209. <listitem>
  210. <para>
  211. <emphasis>getMimeType($files = null)</emphasis>: Diese Methode gibt den
  212. Mimetyp der angegebenen übertragenen Datei zurück.
  213. </para>
  214. </listitem>
  215. </itemizedlist>
  216. <para>
  217. <methodname>getFileName()</methodname> akzeptiert den Namen des Elements als ersten
  218. Parameter. Wenn kein Name angegeben wird, werden alle bekannten Dateinamen in einem
  219. Array zurückgegeben. Wenn die Datei eine MultiDatei ist, wird auch ein Array
  220. zurückgegeben. Wenn nur eine einzelne Datei vorhanden ist wird nur ein String
  221. zurückgegeben.
  222. </para>
  223. <para>
  224. Standardmäßig werden Dateinamen mit dem kompletten Pfad zurückgegeben. Wenn man nur den
  225. Dateinamen ohne Pfad benötigt, kann der zweite Parameter <varname>$path</varname>
  226. gesetzt werden, welcher den Dateinamen ausschneidet wenn er auf
  227. <constant>FALSE</constant> gesetzt wird.
  228. </para>
  229. <example id="zend.file.transfer.introduction.informations.example1">
  230. <title>Den Dateinamen bekommen</title>
  231. <programlisting language="php"><![CDATA[
  232. $upload = new Zend_File_Transfer();
  233. $upload->receive();
  234. // Gibt die Dateinamen aller Dateien zurück
  235. $names = $upload->getFileName();
  236. // Gibt den Dateinamen des Formularelements 'foo' zurück
  237. $names = $upload->getFileName('foo');
  238. ]]></programlisting>
  239. </example>
  240. <note>
  241. <para>
  242. Es ist zu beachten das sich der Dateinamen ändern kann nachdem die Datei empfangen
  243. wurde (receive) weil alle Filter angewendet werden, sobald die Datei empfangen
  244. wurde. Deswegen sollte man <methodname>getFileName()</methodname> immer ausführen
  245. nachdem die Dateien empfangen wurden.
  246. </para>
  247. </note>
  248. <para>
  249. <methodname>getFileSize()</methodname> gibt standardmäßig die echte Dateigröße in SI
  250. Schreibweise zurück was bedeutet das man <emphasis>2kB</emphasis> statt
  251. <emphasis>2048</emphasis> erhält. Wenn man die reine Größe benötigt muß man die
  252. <property>useByteString</property> Option auf <constant>FALSE</constant> setzen.
  253. </para>
  254. <example id="zend.file.transfer.introduction.informations.example.getfilesize">
  255. <title>Die Größe einer Datei erhalten</title>
  256. <programlisting language="php"><![CDATA[
  257. $upload = new Zend_File_Transfer();
  258. $upload->receive();
  259. // Gibt die Größen aller Dateien als Array zurück
  260. // wenn mehr als eine Datei hochgeladen wurde
  261. $size = $upload->getFileSize();
  262. // Wechsle die SI Schreibweise damit reine Nummern zurückgegeben werden
  263. $upload->setOptions(array('useByteString' => false));
  264. $size = $upload->getFileSize();
  265. ]]></programlisting>
  266. </example>
  267. <note>
  268. <title>Vom Client angegebene Dateigröße</title>
  269. <para>
  270. Es ist zu beachten das die Dateigröße welche vom Client angegeben wird, nicht als
  271. sichere Eingabe angesehen wird. Deswegen wird die echte Größe der Datei erkannt und
  272. statt der Dateigröße zurückgegeben welche vom Client geschickt wurde.
  273. </para>
  274. </note>
  275. <para>
  276. <methodname>getHash()</methodname> akzeptiert den Namen eines Hash Algorithmus als
  277. ersten Parameter. Für eine Liste bekannter Algorithmen kann in
  278. <ulink url="http://php.net/hash_algos">PHP's hash_algos Methode</ulink> gesehen werden.
  279. Wenn kein Algorithmus spezifiziert wird, wird <emphasis>crc32</emphasis> als
  280. Standardalgorithmus verwendet.
  281. </para>
  282. <example id="zend.file.transfer.introduction.informations.example2">
  283. <title>Den Hash einer Datei erhalten</title>
  284. <programlisting language="php"><![CDATA[
  285. $upload = new Zend_File_Transfer();
  286. $upload->receive();
  287. // Gibt die Hashes von allen Dateien als Array zurück
  288. // wenn mehr als eine Datei hochgeladen wurde
  289. $hash = $upload->getHash('md5');
  290. // Gibt den Has für das 'foo' Formularelement zurück
  291. $names = $upload->getHash('crc32', 'foo');
  292. ]]></programlisting>
  293. </example>
  294. <note>
  295. <title>Rückgabewert</title>
  296. <para>
  297. Es ist zu beachten das der zurückgegebene Wert ein Array ist, wenn die Datei oder
  298. der Formularname mehr als eine Datei enthält.
  299. </para>
  300. </note>
  301. <para>
  302. <methodname>getMimeType()</methodname> gibt den Mimetyp einer Datei zurück. Wenn mehr
  303. als eine Datei hochgeladen wurde wird ein Array zurückgegeben, andernfalls ein String.
  304. </para>
  305. <example id="zend.file.transfer.introduction.informations.getmimetype">
  306. <title>Den Mimetyp einer Datei bekommen</title>
  307. <programlisting language="php"><![CDATA[
  308. $upload = new Zend_File_Transfer();
  309. $upload->receive();
  310. $mime = $upload->getMimeType();
  311. // Gibt den Mimetyp des 'foo' Form Elements zurück
  312. $names = $upload->getMimeType('foo');
  313. ]]></programlisting>
  314. </example>
  315. <note>
  316. <title>Vom Client angegebener MimeTyp</title>
  317. <para>
  318. Es ist zu beachten das der MimeTyp welcher vom Client angegeben wird, nicht als
  319. sichere Eingabe betrachtet wird. Deswegen wird der echte MimeTyp der Datei erkannt
  320. und statt dem Mimetyp welcher vom Client geschickt wird, zurückgegeben.
  321. </para>
  322. </note>
  323. <warning>
  324. <title>Mögliche Exception</title>
  325. <para>
  326. Beachte das diese Methode die fileinfo Erweiterung verwendet wenn Sie vorhanden ist.
  327. Wenn diese Erweiterung nicht gefunden werden kann wird die mimemagic Erweiterung
  328. verwendet. Wenn keine Erweiterung gefunden wird dann wird eine Exception geworfen.
  329. </para>
  330. </warning>
  331. <warning>
  332. <title>Originale Daten in $_FILES</title>
  333. <para>
  334. Aus Sicherheitsgründen werden auch die originalen Daten in $_FILES überschrieben
  335. sobald <classname>Zend_File_Transfer</classname> initiiert wird. Wenn man dieses
  336. Verhalten unterdrücken will und die originalen Daten benötigt, kann bei der
  337. Instanzierung die Option <property>detectInfos</property> einfach auf
  338. <constant>FALSE</constant> gesetzt werden.
  339. </para>
  340. <para>
  341. Diese Option hat keinen Effekt nachdem <classname>Zend_File_Transfer</classname>
  342. instanziert wurde.
  343. </para>
  344. </warning>
  345. </sect2>
  346. <sect2 id="zend.file.transfer.introduction.uploadprogress">
  347. <title>Fortschritt für Datei Uploads</title>
  348. <para>
  349. <classname>Zend_File_Transfer</classname> kann den aktuellen Status eines gerade
  350. stattfindenden Datei Uploads erheben. Um dieses Feature zu verwenden muß man entweder
  351. die <acronym>APC</acronym> Erweiterung verwenden, die mit den meisten standardmäßigen
  352. <acronym>PHP</acronym> Installationen vorhanden ist, oder die
  353. <classname>UploadProgress</classname> Erweiterung. Beide Erweiterungen werden erkannt
  354. und automatisch verwendet. Um den Fortschritt zu erhalten muß man einige Voraussetzungen
  355. erfüllen.
  356. </para>
  357. <para>
  358. Erstens, muß man entweder <acronym>APC</acronym> oder
  359. <classname>UploadProgress</classname> aktiviert haben. Es ist zu beachten das dieses
  360. Feature von <acronym>APC</acronym> in der eigenen <filename>php.ini</filename>
  361. ausgeschaltet werden kann.
  362. </para>
  363. <para>
  364. Zweitens, muß man die richtigen unsichtbaren Felder im Formular hinzugefügt haben das
  365. die Dateien sendet. Wenn man <classname>Zend_Form_Element_File</classname> verwendet
  366. werden diese unsichtbaren Felder automatisch von <classname>Zend_Form</classname>
  367. hinzugefügt.
  368. </para>
  369. <para>
  370. Wenn die oberen zwei Punkte vorhanden sind dann ist man in der Lage den aktuellen
  371. Fortschritt des Datei uploads zu erhalten indem man die
  372. <methodname>getProgress()</methodname> Methode verwendet. Aktuell gibt es 2 offizielle
  373. Wege um das hand zu haben.
  374. </para>
  375. <sect3 id="zend.file.transfer.introduction.uploadprogress.progressadapter">
  376. <title>Verwenden eines Progressbar Adapters</title>
  377. <para>
  378. Man kann einen bequemen <emphasis>Zend_ProgressBar</emphasis> verwenden um den
  379. aktuellen Fortschritt zu erhalten und kann Ihn dann auf einfachem Wege dem Benutzer
  380. zeigen.
  381. </para>
  382. <para>
  383. Um das zu ermöglichen, muß man den gewünschten
  384. <emphasis>Zend_ProgressBar_Adapter</emphasis> bei
  385. <methodname>getProgress()</methodname> hinzufügen wenn es das erste Mal aufgerufen
  386. wird. Für Details über den zu verwendenden Adapter, bitte im Kapitel <link
  387. linkend="zend.progressbar.adapters">Zend_ProgressBar Standard Adapters</link>
  388. nachsehen.
  389. </para>
  390. <example id="zend.file.transfer.introduction.uploadprogress.progressadapter.example1">
  391. <title>
  392. Verwenden eines Progressbar Adapters um den aktuellen Status zu erhalten
  393. </title>
  394. <programlisting language="php"><![CDATA[
  395. $adapter = new Zend_ProgressBar_Adapter_Console();
  396. $upload = Zend_File_Transfer_Adapter_Http::getProgress($adapter);
  397. $upload = null;
  398. while (!$upload['done']) {
  399. $upload = Zend_File_Transfer_Adapter_Http:getProgress($upload);
  400. }
  401. ]]></programlisting>
  402. </example>
  403. <para>
  404. Die komplette Handhabung wird von <methodname>getProgress()</methodname> im
  405. Hintergrund durchgeführt.
  406. </para>
  407. </sect3>
  408. <sect3 id="zend.file.transfer.introduction.uploadprogress.manually">
  409. <title>getProgress() händisch verwenden</title>
  410. <para>
  411. Man kann mit <methodname>getProgress()</methodname> auch händisch arbeiten, also
  412. ohne die Verwendung von <classname>Zend_ProgressBar</classname>.
  413. </para>
  414. <para>
  415. <methodname>getProgress()</methodname> muß ohne Einstellungen aufgerufen werden. Es
  416. gibt anschließend ein Array mit verschiedenen Schlüssel zurück. Sie unterscheiden
  417. sich, abhängig von der verwendeten <acronym>PHP</acronym> Extension. Aber die
  418. folgenden Schlüssel werden unabhängig von der Extension zurück gegeben:
  419. </para>
  420. <itemizedlist>
  421. <listitem>
  422. <para>
  423. <emphasis>id</emphasis>: Die ID dieses Uploads. Die ID identifiziert den
  424. Upload in der Extension. Man kann Sie auf den Wert des versteckten
  425. Schlüssels setzen welcher den Upload identifiziert wenn
  426. <methodname>getProgress()</methodname> das erste Mal aufgerufen wird.
  427. Standardmäßig ist er auf <emphasis>progress_key</emphasis> gesetzt. Man
  428. darf die ID nicht im Nachhinein ändern.
  429. </para>
  430. </listitem>
  431. <listitem>
  432. <para>
  433. <emphasis>total</emphasis>: Die komplette Größe der Datei die hochgeladen
  434. wird in Bytes als Integer.
  435. </para>
  436. </listitem>
  437. <listitem>
  438. <para>
  439. <emphasis>current</emphasis>: Die aktuelle hochgeladene Größe der
  440. Datei in Bytes als Integer.
  441. </para>
  442. </listitem>
  443. <listitem>
  444. <para>
  445. <emphasis>rate</emphasis>: Die durchschnittliche Geschwindigkeit des
  446. Uploads in Bytes pro Sekunde als Integer.
  447. </para>
  448. </listitem>
  449. <listitem>
  450. <para>
  451. <emphasis>done</emphasis>: Gibt <constant>TRUE</constant> zurück wenn der
  452. Upload abgeschlossen wurde, andernfalls <constant>FALSE</constant>.
  453. </para>
  454. </listitem>
  455. <listitem>
  456. <para>
  457. <emphasis>message</emphasis>: Die aktuelle Meldung. Entweder der
  458. Fortschritt als Text in der Form <emphasis>10kB / 200kB</emphasis>, oder
  459. eine hilfreiche Nachricht im Fall eines Problems. Probleme könnten sein,
  460. das kein Upload durchgeführt wird, das ein Fehler während des Empfangens der
  461. Daten, für den Fortschritt, aufgetreten ist, oder das der Upload abgebrochen
  462. wurde.
  463. </para>
  464. </listitem>
  465. <listitem>
  466. <para>
  467. <emphasis>progress</emphasis>: Dieser optionale Schlüssel nimmt eine
  468. Instanz von <classname>Zend_ProgressBar_Adapter</classname> oder
  469. <classname>Zend_ProgressBar</classname>, und erlaubt es, den aktuellen
  470. Status des Uploads, in einer Progressbar zu erhalten
  471. </para>
  472. </listitem>
  473. <listitem>
  474. <para>
  475. <emphasis>session</emphasis>: Dieser optionale Schlüssel nimmt den Namen
  476. eines Session Namespaces entgegen der in
  477. <classname>Zend_ProgressBar</classname> verwendet wird. Wenn dieser
  478. Schlüssel nicht angegeben wird, ist er standardmäßig
  479. <classname>Zend_File_Transfer_Adapter_Http_ProgressBar</classname>.
  480. </para>
  481. </listitem>
  482. </itemizedlist>
  483. <para>
  484. Alle anderen zurückgegebenen Schlüssel werden direkt von den Extensions übernommen
  485. und werden nicht geprüft.
  486. </para>
  487. <para>
  488. Das folgende Beispiel zeigt eine mögliche händische Verwendung:
  489. </para>
  490. <example id="zend.file.transfer.introduction.uploadprogress.manually.example1">
  491. <title>Händische Verwendung des Datei Fortschritts</title>
  492. <programlisting language="php"><![CDATA[
  493. $upload = Zend_File_Transfer_Adapter_Http::getProgress();
  494. while (!$upload['done']) {
  495. $upload = Zend_File_Transfer_Adapter_Http:getProgress($upload);
  496. print "\nAktueller Fortschritt:".$upload['message'];
  497. // Tu was zu tun ist
  498. }
  499. ]]></programlisting>
  500. </example>
  501. <note>
  502. <title>Die Datei kennen von welcher der Fortschritt kommen soll</title>
  503. <para>
  504. Das obige Beispiel funktioniert wenn der identifizierte Upload auf
  505. 'progress_key' gesetzt wurde. Wenn man einen anderen Identifikator im Formular
  506. verwendet muss man den verwendeten Identifikator als ersten Parameter an
  507. <methodname>getProgress()</methodname> bei initialen Aufruf übergeben.
  508. </para>
  509. </note>
  510. </sect3>
  511. </sect2>
  512. </sect1>