Es mag lächerlich erscheinen, das Thema dieses Artikels, aber mehr als einen interessieren wird.
Einer unserer Partner wird durch die Umsetzung in Ihrem Portal Mobile Search Engine betrieben JumpTap und bat um ein paar Monaten an Lieferanten, die ihm gearbeitet, dass sie Inhalte per XML-Datei mit unserem Katalog. Die XML-Datei gezippt werden sollte und auch in einer URL, um regelmäßig zu aktualisieren. Es ist klar, in ein normales Szenario, sollten wir diese Datei manuell zu erstellen, was natürlich waren wir nicht bereit. Wir hatten auch ein weiteres Problem. Unser mobiles Portal-Plattform ist physisch einzigartig, es gibt nur eine Instanz zu Protokoll, welche Dateien generiert würden, haben verschiedene Namen für die Anbieter konnte jeder ohne Überschreiben jedes Mal, wenn ich wollte Update herunterzuladen. Neben der Name der Datei sollte also verwendet werden, für die Entladung, wenn die Datei wurde comprimido.zip werden, müsste die Datei herunterzuladen, kein Aufruf zur Rückkehr der zip-Header compromido.php mit:
- "Content-Disposition: attachment; filename= \" comprimido.zip \" " ) ; header ("Content-Disposition: attachment; filename = \" comprimido.zip \ "");
oder eine endgültige redirect zip. Dies ist darauf zurückzuführen, um den Prozess benötigt, um automatisch die Datei herunterladen zu automatisieren. Möchten Sie einem file_get_contents oder öffnen Sie eine Buchse zur Aufnahme der Datei nicht interpretieren diese Daten.
Zuerst werden die Server
Sie haben zu sagen, wenn Apache auf bestimmte ZIP-Dateien von unserem Server aufrufen wird ein PHP-Skript aufrufen. Wir konnten das tun. Zip-Erweiterung wurde automatisch von PHP geparst, aber dann konnten wir nicht Download als ZIP nie normal. Die beste Option: mod_rewrite :
- RewriteEngine on
- ^ ( .+ ) catalogo_ ( .+ ) .zip$ RewriteCond% (REQUEST_URI) ^ (. +) Catalogo_ (. +). Zip $
- catalogo_ ( .+ ) .zip /catalogo_zip.php$ 1 RewriteRule ^ (. +) Catalogo_ (. +). PLZ / catalogo_zip.php $ 1
Das heißt, jedes Mal, wenn Sie anrufen foo foo catalogo_. Zip, dem Web-Server an das Skript aufgerufen catalogo_zip.php Interesse. In unserem Fall sind die Dateien namens gebildet durch den Namen des Rechners, von dem sie sind, und jeder Host-Portal oder eine andere Datei, zum Beispiel catalogo_portal1.dominio.com.zip, catalogo_portal2.dominio.com.zip, catalogo_dominio2.com . zip. Der Service Provider sammeln würde die Dateien aus:
- http://portal1.dominio.com/catalogo_portal1.dominio.com.zip
- http://portal2.dominio.com/catalogo_portal2.dominio.com.zip
- http://dominio2.com/catalogo_dominio2.com.zip
jeweils unter Beachtung der Regeln, die wir haben, verhängt: verschiedene Dateien für verschiedene Websites.
Nun das Skript
Nun, da Apache fake weiß, wie's zu interpretieren unsere ZIP, ist es Zeit zu generieren, die Dateien tatsächlich. Hierfür nutzen wir die ZIP-Funktionen von PHP verwendet, die noch nie aber ich war angenehm überrascht ..
- ; $ Xml = "XML generiert <unsere />";
- . $_SERVER [ 'HTTP_HOST' ] . ".zip" ; $ Filename = "downloads / catalogo_. $ _SERVER ['HTTP_HOST'].." Zip";
- ZipArchive ( ) ; $ Zip = new ZipArchive ();
- ( $filename , ZIPARCHIVE:: CREATE ) ; $ Zip -> Öffnen ($ filename, ZIPARCHIVE:: Create);
- / / Store unserer XML-Datei
- ( "catalogo_" . $_SERVER [ 'HTTP_HOST' ] . ".xml" , $xml ) ; $ Zip -> addFromString (catalogo_. $ _SERVER ['HTTP_HOST'] .. "XML", $ xml);
- ( ) ; $ Zip -> close ();
- / / Lassen Sie sich die zip
Grundsätzlich haben wir eine neue Datei erstellen, fügen Sie die XML und startete als Antwort auf den HTTP-Request. Magic ist die Rolle addFromString vermeidet unter uns zum ersten Schreiben Sie die XML-Datei, um eine zusätzliche. Man könnte hinzufügen, andere externe Dateien Datei hinzufügen , wenn nötig.
Und das ist alles, mit wenigen Zeilen Code haben wir das Leben ein wenig leichter.









