PHP Cache vorwärmer

Bei einem unserer Kunden – JTL Shop werden vereinzelt auf speziellen Seiten komplexe Datenbankabfragen ausgeführt, die bei nicht vorhandenen Cache lange Ladezeiten verursachen.
Lösung ist hier einen Cache vorwärmer einzusetzen. Dieser macht nichts anderes als ein Array aus URLs durch eine Schleife zu ziehen und jede URL per Curl aufzurufen. Somit ist der Cache generiert.

[code lang=“php“]
< ?php ini_set('max_execution_time', 300); //300 seconds = 5 minutes // Seiten fuer die der Cache generiert werden soll // Log Datei wird im Root abgelegt -> cache_warm_up.txt
#######################################################
#######################################################

$pages = array(
‚https://xxx-express.de/navi.php?k=502&ed=3‘,
‚https://xxx-express.de/navi.php?k=451&ed=3‘,
‚https://xxx-express.de/navi.php?k=444&ed=3‘

); // Letzte Eintrag OHNE Komma

######################################################
######################################################

$log = new Logging(); // Initialisiere Klasse
// Schleife Array durch Curl
foreach ($pages as $page){
echo $page.“
„;
get_data($page);

}

function get_data($url) {
global $log;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($ch);
curl_close($ch);
if ($data){
$log->lwrite(‚Cache erstellt fuer Page: ‚.$url);
$log->lclose();
}
}

class Logging {
private $log_file, $fp;
public function lfile($path) {
$this->log_file = $path;
}

public function lwrite($message) {

if (!is_resource($this->fp)) {
$this->lopen();
}

$script_name = pathinfo($_SERVER[‚PHP_SELF‘], PATHINFO_FILENAME);
$time = @date(‚[d/M/Y:H:i:s]‘);
fwrite($this->fp, „$time ($script_name) $message“ . PHP_EOL);
}

public function lclose() {
fclose($this->fp);
}

private function lopen() {

$log_file_default = ‚cache_warm_up.txt‘;
$lfile = $this->log_file ? $this->log_file : $log_file_default;
$this->fp = fopen($lfile, ‚a‘) or exit(„Can’t open $lfile!“);
}
}
[/code]

Neben der Datei wird eine Logdatei abgelegt. Beispielaufbau:


[16/Jan/2017:12:12:07] (cache_warm_up) Cache erstellt fuer Page: https://xxx-express.de/navi.php?k=455&ed=3
[16/Jan/2017:12:12:21] (cache_warm_up) Cache erstellt fuer Page: https://xxx-express.de/navi.php?k=451&ed=3
[16/Jan/2017:12:12:25] (cache_warm_up) Cache erstellt fuer Page: https://xxx-express.de/navi.php?k=444&ed=3
[16/Jan/2017:12:13:56] (cache_warm_up) Cache erstellt fuer Page: https://xxx-express.de/navi.php?k=455&ed=3
[16/Jan/2017:12:13:57] (cache_warm_up) Cache erstellt fuer Page: https://xxx-express.de/navi.php?k=451&ed=3
[16/Jan/2017:12:13:58] (cache_warm_up) Cache erstellt fuer Page: https://xxx-express.de/navi.php?k=444&ed=3
[16/Jan/2017:12:18:15] (cache_warm_up) Cache erstellt fuer Page: https://xxx-express.de/navi.php?k=455&ed=3
[16/Jan/2017:12:18:28] (cache_warm_up) Cache erstellt fuer Page: https://xxx-express.de/navi.php?k=451&ed=3
[16/Jan/2017:12:18:32] (cache_warm_up) Cache erstellt fuer Page: https://xxx-express.de/navi.php?k=444&ed=3
[16/Jan/2017:12:18:48] (cache_warm_up) Cache erstellt fuer Page: https://xxx-express.de/navi.php?k=455&ed=3
[16/Jan/2017:12:18:49] (cache_warm_up) Cache erstellt fuer Page: https://xxx-express.de/navi.php?k=451&ed=3
[16/Jan/2017:12:18:49] (cache_warm_up) Cache erstellt fuer Page: https://xxx-express.de/navi.php?k=444&ed=3
[16/Jan/2017:12:19:00] (cache_warm_up) Cache erstellt fuer Page: https://xxx-express.de/navi.php?k=455&ed=3