Het kan belachelijk lijken op het onderwerp van dit artikel, maar meer dan een geïnteresseerd zullen zijn.
Een van onze partners zal uitvoeren in uw portal mobiele zoekmachine geëxploiteerd door JumpTap en vroeg om een enkele maanden geleden leveranciers die voor hem werkte that they send content moet een XML-file with our of catalogus. De XML-bestand moet worden gecomprimeerd en ook verkrijgbaar in een URL om deze regelmatig bij te werken. Zoals duidelijk is, in een normaal scenario, moeten we handmatig maken van dit bestand, iets wat we uiteraard niet klaar waren. We hadden ook nog een probleem. Onze mobiele portal platform is fysiek uniek, er is slechts een voorbeeld op de plaat, die zou hebben gegenereerde bestanden verschillende namen hebben voor de dienstverrichter kan downloaden zonder dat een ieder overschrijven elke keer als ik wilde werken. Naast de bestandsnaam dient te worden gebruikt voor het lossen, dat wil zeggen als het bestand is te comprimido.zip, zou moeten bestand te downloaden dat niet een oproep om terug te keren compromido.php de zip met een header:
- "Content-Disposition: attachment; filename= \" comprimido.zip \" " ) ; header ("Content-Disposition: attachment; filename = \" comprimido.zip \ "");
of maak een definitieve omleiding rits. Dit is te wijten aan het proces dat nodig is om automatisch het bestand downloaden automatiseren. Denk je dat een file_get_contents of open een socket te halen het bestand niet interpreteren van deze gegevens.
Eerst moet de server
Je moet Apache vertellen wanneer bepaalde ZIP-bestanden van onze server oproep zal een PHP script te bellen. We kunnen dat doen. Zip-extensie is automatisch geparsed door PHP, maar dan konden we niet het downloaden van een ZIP nooit normaal. De beste optie: mod_rewrite :
- RewriteEngine on
- ^ ( .+ ) catalogo_ ( .+ ) .zip$ RewriteCond% (REQUEST_URI) ^ (. +) Catalogo_ (. +). Zip $
- catalogo_ ( .+ ) .zip /catalogo_zip.php$ 1 RewriteRule ^ (. +) Catalogo_ (. +). Zip / catalogo_zip.php 1 dollar
Dat is, iedere keer dat u belt foo foo catalogo_. Zip, de webserver om het script te catalogo_zip.php genoemd belang. In ons geval, de bestanden worden gevormd door de naam van de host van waaruit zij worden genoemd, en elke host of portal heeft een ander bestand, bijvoorbeeld catalogo_portal1.dominio.com.zip, catalogo_portal2.dominio.com.zip, catalogo_dominio2.com . rits. De dienstverlener zou verzamelt de bestanden uit:
- 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
respectievelijk met inachtneming van de regels die we hebben opgelegd: verschillende bestanden voor verschillende sites.
Nu het script
Nu dat Apache weet hoe nep interpreteren onze ZIP, het is tijd om daadwerkelijk de bestanden te genereren. Hiervoor gebruiken we het ZIP-functies van PHP die nog nooit had gebruikt, maar ik ben aangenaam verrast ..
- ; Xml $ = "XML gegenereerd <our />";
- . $_SERVER [ 'HTTP_HOST' ] . ".zip" ; $ Filename = "downloads / catalogo_. $ 'HTTP_HOST'].." _SERVER [Zip";
- ZipArchive ( ) ; $ Zip = new ZipArchive ();
- ( $filename , ZIPARCHIVE:: CREATE ) ; $ Zip -> open ($ filename, ZIPARCHIVE:: CREATE);
- / / Store onze XML-bestand
- ( "catalogo_" . $_SERVER [ 'HTTP_HOST' ] . ".xml" , $xml ) ; $ Zip -> addFromString (catalogo_. $ _SERVER ['HTTP_HOST'] .. "XML", $ xml);
- ( ) ; $ Zip -> Close ();
- / / Toon het zip
Eigenlijk creëren we een nieuw bestand, voeg de XML en gelanceerd als een reactie op het HTTP-verzoek. Magic is de rol addFromString vermijdt met ons aan de XML wordt eerst schrijven naar een aanvullend bestand. Men zou kunnen uitbreiden met andere externe bestanden AddFile indien nodig.
En dat is alles, met een paar regels code hebben we het leven een beetje makkelijker.









