私はダイナミックなPHPページをキャッシュするためにある程度前にスタックオーバーフローで見つかったスクリプトを使用しています。それは私の基本的知識と統合することができます:D .htaccessを使用しないPHPコードだけですシンプルなPHPキャッシングがたくさんのファイルを作成する - サブフォルダが必要
キャッシングファイルの一意の名前を作成するためにURLのMD5ハッシュが作成されます。しかし、今は私のフォルダにたくさんのファイル(約300.000)があり、読み込み時間に関してftp経由でフォルダを開くのを待つのは面倒です。 1つのフォルダ内のファイル数を減らすために、最初の2文字をサブフォルダの名前として使用するソリューションを探しています。それが現時点でどのように動作する
:
- URL:e72b0f58601e6d0c12f71a40b14101b7
- ファイル:キャッシュ/ e72b0f58601e6d0c12f71a40b14101b7.html
ベストセラーソリューション:
- URL:e72b0f58601e6d0c12f71a40b14101b7
- ファイル:彼らは存在しない場合はキャッシュ/ E7/e72b0f58601e6d0c12f71a40b14101b7.html
サブフォルダが自動的に作成されなければなりません。誰かがコードを手伝ってくれますか、またはこの解決策に懸念がありますか?
substr-commandの使用については考えましたが、私の「実験」はうまく機能しませんでした。
ありがとうございます!
更新:返信のおかげで、私はコードを正常に編集することができました。あなたが解決策に興味があるなら、これらの行を更新する必要があります(stackflow/http://www.sanwebe.com/2013/09/php-cache-dynamic-pages-speed-up-load-times/ソース)
<?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
?>
必要な変更は、私は、キャッシングのために使用している元のコード
コードの下に見つけることができます:
オリジナル:
$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)
更新
(動的URLは同じですが、原因異なるために、ここで言及されている):
$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
...
オリジナル:
更新if (!is_dir($cache_folder)) { //create a new folder if we need to
mkdir($cache_folder);
}
:
if (!is_dir($cache_folder)) { //create a new folder if we need to
mkdir($cache_folder, 0777, true);
}
md5ハッシュを分割して正しいディレクトリとファイルパスを生成するのは簡単です。これまでに何を試してみましたか? – jeroen