von Norman Seibert, 28.02.2008

TYPO3 als Download-Center

Aus dem
t3n Magazin Nr. 11

Jetzt kaufen

Außerdem wurde das Streaming optimiert, indem anstelle des selbstgeschriebenen Codes PEAR::HTTP_Download eingebunden wurde. Das Ergebnis ist ein stabiler Download-Prozess auch bei großen Dateien, der konstant hohe Transferraten ermöglicht.

PHP

require_once("HTTP/Download.php");
function send_file($path, $sendmime) {
$dl = &new HTTP_Download();
 $dl->setFile($path);
 $dl->setContentType($sendmime);
$dl->setContentDisposition(HTTP_DOWNLOAD_ATTACHMENT, basename($path));
 return $dl->send(false);
}

Listing 5

Nachdem die Zip-Erstellung auf die PHP5-internen Funktionen umgestellt wurde, war Performance kein Thema mehr – jedoch die Integrität der erstellten Archive. Bei mehr als 500 Dateien pro Zip-Datei enthielt das Archiv nämlich kein Verzeichnis mehr, der Benutzer lud eine „leere“ Datei herunter. Deshalb war es notwendig, mehrere Archive zu erstellen, wenn mehr als 500 Dateien zum Download angefordert wurden. Dem Benutzer werden in diesem Fall mehrere Links zu den erzeugten Archiven angezeigt. Die Fortschrittsanzeige verwendet die in der Datenbank gepufferten Dateigrößen und berechnet daraus den Fertigstellungsgrad.

Damit der Festplattenspeicher des Webservers trotz der Erstellung vieler Zip-Archive täglich nicht vor temporären Dateien überläuft, werden diese regelmäßig gelöscht. Dazu wird der TYPO3-Scheduler „Gabriel“ [3] verwendet, der acht Stunden nach der Zip-Erstellung alte Dateien entfernt:

PHP

require_once(t3lib_extMgm::extPath('gabriel').'class.tx_gabriel_event.php');
$notification = t3lib_div::getUserObj('EXT:[...]/class.tx_[...]_scheduler.php:tx_[...]_scheduler');
$notification->registerSingleExecution(time()+8*3600);
$gabriel = t3lib_div::getUserObj('EXT:gabriel/class.tx_gabriel.php:&tx_gabriel');
$gabriel->addEvent($notification,'scheduled cleanup @' .time());

Listing 6

Wie verwaltet man eine Million?

Nachdem das Frontend nun schnell und stabil lief, wurde die Verwaltung der Dateien angegangen. Weil die Installationspakete, Patches etc. in der Produktentwicklung zusammengestellt wurden, lagen die Informationen fast seit Beginn als Excel-Tabellen vor. Diese wurden etwa vierteljährlich vorwiegend manuell in CSV-Dateien exportiert und dann in die Datenbank geladen. Der Hauptaufwand bestand darin, Listeneinträge aufzulösen, wenn beispielsweise als Sprache „English, German“ angegeben war.

Seite:  1 2 3 4 5

Empfohlene Artikel