0

私のサイトでは、すべてのファイルが指定されたフォルダーに正しくキャッシュされていますが、これらのフォルダーに格納されているファイルが多すぎます。キャッシュ フォルダーを、ファイル名の最初の文字を含むサブ ディレクトリに分割し、そこからさらに分割することを考えていました。

以下に示すように、圧縮バージョンは「gz」フォルダーに保存され、通常のキャッシュは「html2」フォルダーに保存されます。

コード:

if ( $cache ) {
#header("Content-Type: text/html");
// get the buffer
$buffer = ob_get_contents();
#$length = ob_get_length();
#header('Content-Length: '.$length);
// end output buffering, the buffer content
// is sent to the client
ob_end_flush();

// now we create the cache file
if (!file_exists($pathName)) {
    mkdir($pathName, 0755, true);
}
if (!file_exists(str_replace('/html/html2/', '/html/gz/', $pathName))) {
    mkdir(str_replace('/html/html2/', '/html/gz/', $pathName), 0755, true);
}
$compressed = preg_replace('%<!--(.|\s)*?-->%', '', $buffer);
$compressed = sanitize_output($compressed);
$encoded = gzencode($compressed, 9);
file_put_contents($file, $compressed);
file_put_contents(str_replace('/html/html2/', '/html/gz/', str_replace('.html', '.gz', $file)), $encoded);

}

上記のコードに基づくと、現在のキャッシュ ファイルのパスは次のとおりです。

/html2/New-York-Hotels.html

/gz/New-York-Hotels.gz

理想的には、キャッシュされたファイルの場所は次のようになります。

/html2/N/New-York-Hotels.html

/gz/N/New-York-Hotels.gz

あなたの助けは大歓迎です! 前もって感謝します。

4

1 に答える 1

1

このコードを試してください(修正済み):

if ($cache) {

  // Get the buffer into a string
  // I do it this way to save memory - no point in keeping 2 copies of the data
  $buffer = ob_get_clean();

  // Send buffer content to the client
  // header("Content-Type: text/html");
  // header('Content-Length: '.strlen($buffer));
  echo $buffer;
  flush();

  // Get the paths into sensibly named variables
  $fileBase = basename($file); // The name of the HTML file
  $htmlPath = rtrim($pathName, '/').'/'.strtoupper($fileBase[0]).'/'; // The directory the HTML file is stored in
  $gzPath = str_replace('/html/html2/', '/html/gz/', $htmlPath); // The directory the gzipped file is stored in
  $htmlFile = $htmlPath.$fileBase; // The full path of the HTML file
  $gzFile = $gzPath.str_replace('.html', '.gz', $fileBase); // The full path of the gzipped file

  // Make sure the paths exist
  if (!is_dir($htmlPath)) {
    mkdir($htmlPath, 0755, true);
  }
  if (!is_dir($gzPath)) {
    mkdir($gzPath, 0755, true);
  }

  // Strip comments out of the file and sanitize_output() (whatever than does)
  // $compressed is a silly name for a variable when we are also zipping the data
  $html = sanitize_output(preg_replace('%<!--(.|\s)*?-->%', '', $buffer));

  // Save the files
  file_put_contents($htmlFile, $html);
  file_put_contents($gzFile, gzencode($html, 9));

}

ここには、処理する必要のある未チェックの潜在的なエラーがいくつかあります。たとえば、失敗した場合はどうなりますか、失敗mkdir()した場合はどうなりfile_put_contents()ますか?

于 2012-08-08T15:14:25.847 に答える