Ich benutze ein Skript, das ich vor einiger Zeit auf Stack-Überlauf gefunden habe, um meine dynamische PHP-Seite zwischenzuspeichern, und ich bin ziemlich zufrieden mit der einfachen Lösung, da es einfach funktioniert und ich war kann es mit meinem rudimentären Wissen integrieren: D Es ist nur PHP-Code ohne die Verwendung von .htaccessEinfaches PHP-Caching erstellt zu viele Dateien - Unterordner erforderlich
Ein MD5-Hash der URL wird erstellt, um einen eindeutigen Namen für die Caching-Datei zu erstellen. Allerdings gibt es jetzt viele Dateien (ca. 300.000) in meinem Ordner, es ist nervig, beim Öffnen des Ordners per ftp auf die Ladezeiten zu warten. Um die Anzahl der Dateien in einem Ordner zu reduzieren, suche ich nach einer Lösung, um die ersten beiden Buchstaben als Namen von Unterordnern zu verwenden.
Wie es im Moment funktioniert:
- URL: e72b0f58601e6d0c12f71a40b14101b7
- Datei: cache/e72b0f58601e6d0c12f71a40b14101b7.html
Gewünschter Lösung:
- URL: e72b0f58601e6d0c12f71a40b14101b7
- Datei: cache/e7/e72b0f58601e6d0c12f71a40b14101b7.html
Die Unterverzeichnisse automatisch erstellt werden, wenn sie nicht existieren. Kann mir jemand mit dem Code helfen oder gibt es Bedenken gegen diese Lösung?
Dachte über die Verwendung der Substr-Befehl, aber meine "Experimente" hat nicht ganz gut funktioniert.
Vielen Dank im Voraus!
Update: Dank der Antworten konnte ich den Code erfolgreich bearbeiten. (: Stackflow/http://www.sanwebe.com/2013/09/php-cache-dynamic-pages-speed-up-load-times/ Quelle)
<?php
//settings
$cache_ext = '.html'; //file extension
$cache_time = 3600; //Cache file expires afere these seconds (1 hour = 3600 sec)
$cache_folder = 'cache/'; //folder to store Cache files
$ignore_pages = array('', '');
$dynamic_url = 'http://'.$_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] . $_SERVER['QUERY_STRING']; // requested dynamic page (full url)
$cache_file = $cache_folder.md5($dynamic_url).$cache_ext; // construct a cache file
$ignore = (in_array($dynamic_url,$ignore_pages))?true:false; //check if url is in ignore list
if (!$ignore && file_exists($cache_file) && time() - $cache_time < filemtime($cache_file)) { //check Cache exist and it's not expired.
ob_start('ob_gzhandler'); //Turn on output buffering, "ob_gzhandler" for the compressed page with gzip.
readfile($cache_file); //read Cache file
echo '<!-- cached page - '.date('l jS \of F Y h:i:s A', filemtime($cache_file)).', Page : '.$dynamic_url.' -->';
ob_end_flush(); //Flush and turn off output buffering
exit(); //no need to proceed further, exit the flow.
}
//Turn on output buffering with gzip compression.
ob_start('ob_gzhandler');
######## Your Website Content Starts Below #########
?>
<!DOCTYPE html>
<html>
<head>
<title>Page to Cache</title>
</head>
<body>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer ut tellus libero.
</body>
</html>
<?php
######## Your Website Content Ends here #########
if (!is_dir($cache_folder)) { //create a new folder if we need to
mkdir($cache_folder);
}
if(!$ignore){
$fp = fopen($cache_file, 'w'); //open file for writing
fwrite($fp, ob_get_contents()); //write contents of the output buffer in Cache file
fclose($fp); //Close file pointer
}
ob_end_flush(); //Flush and turn off output buffering
?>
Wenn Sie in der Lösung interessiert sind, diese Zeilen aktualisiert werden müssen, die erforderlichen Änderungen können unter dem ursprünglichen Code
-Code Ich verwende für das Caching finden :
Original:
$cache_folder = 'cache/'; //folder to store Cache files
$dynamic_url = 'http://'.$_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] . $_SERVER['QUERY_STRING']; // requested dynamic page (full url)
Aktualisiert (Dynamic URL ist die gleiche, aber wegen einer anderen Reihenfolge hier erwähnt wird):
$dynamic_url = 'http://'.$_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] . $_SERVER['QUERY_STRING']; // requested dynamic page (full url)
$cache_folder = 'cache/'.substr(md5($dynamic_url),0,2).'/'; //folder to store Cache files
...
Original:
if (!is_dir($cache_folder)) { //create a new folder if we need to
mkdir($cache_folder);
}
Aktualisiert:
if (!is_dir($cache_folder)) { //create a new folder if we need to
mkdir($cache_folder, 0777, true);
}
Die Aufteilung des MD5-Hash und das Erstellen der richtigen Verzeichnisse und Dateipfade scheint ziemlich einfach. Was hast du bisher versucht und wie funktioniert es nicht? – jeroen