Hej Aminoer Jeg sidder og roder lidt med et lille projekt. Det er primært for at øve mig lidt i PHP, men jeg er stødt på en lille udfordring. Jeg henter en XML fil med noget data, og viser på siden, men samtidig smider jeg hele indholdet i en MySQL database. For ikke skulle hente XML filen hver gang, vil jeg gerne tjekke i databasen om den findes først og hvis den ikke er mere en 24 timer gammel, så skal data fra DB'en hentes, ellers skal XMl filen hentes. Har en tabel i databasen der hedder MyTable, og der er et felt med DATETIME (som hedder "updated") med dato for hvornår XML filen sidst er hentet. Jeg er kommet her til: // Tjek om datoen er gammel tname er den XML fil der hentes, så jeg laver altså en SELECT fra MyTable hvor updated er mere en 24 timer gammel og tname er den fil der spørges på. Det jeg har brug for hjælp til er om jeg er på rette spor med den SQL sætning, og hvordan jeg tjekker resultatet? Jeg tænker noget: If $sqlDato ikke er tom, så hent fra XML ellers hent fra DB... Er der en hardcore Amino med PHP skills, der kan hjælpe mig på rette vej? På forhånd tak. |
Hej Lars,
Det du er ved at lave kan selvfølgelig sagtens laves med en database, men at bruge en cache som f.eks. memcached eller APC er en del nemmere når der blot er tale om at cache (gemme data som man skal bruge, "tættere" på hvor det skal bruges, så det er hurtigere at læse).
De fleste PHP webhoteller skulle gerne have APC installeret (selvom det er længe siden jeg har benyttet andet end egen hosting mener jeg de har det installeret).
Der kan du gemme en værdi, f.eks. med:
apc_store('min_kaempe_xml_fil', $xml, 86400)
for at gemme noget en værdi i cachen. Den første streng er din cache key, som skal være unik (hvis du ikke gemmer andet i cachen er det fint med den jeg har valgt i eksemplet. $xml er din xml, som du har hentet. Og de 86400 er antal sekunder værdien skal gemmes (86400 = 1 dag).
Når du så skal bruge din værdi, kan du gøre noget lignende det her (det hele sat sammen):
$xml = apc_fetch('min_kaempe_xml_fil');
if(false === $xml)
{
//Hent xml fra nettet
$xml = file_get_contents('http://test.domain/foo.xml');
apc_store('min_kaempe_xml_fil', $xml, 86400)
}
//Brug XML filen til noget
$simpleXml = simplexml_load_string($xml);