ホームページ  >  記事  >  バックエンド開発  >  コード共有をキャッシュするPHP Webサイト

コード共有をキャッシュするPHP Webサイト

WBOY
WBOYオリジナル
2016-07-25 09:05:131162ブラウズ
  1. /**
  2. * @著者セラフィム
  3. * @copyright 2012
  4. * @link http://bbs.it-home.org
  5. */
  6. //
  7. function sendheader($last_modified, $p_type, $content_length = 0)
  8. {
  9. //クライアントキャッシュの有効期間を設定します
  10. header("Expires: " . gmdate("D, d M Y H:i:s", time() + 15360000) . "GMT"); Control: max-age=315360000");
  11. header("Pragma: ");
  12. // 最終更新時刻を設定
  13. header("Last-Modified: " . $last_modified);
  14. // ファイルタイプ情報を設定
  15. header($p_type);
  16. header("Content-Length: " . $content_length)
  17. define('ABSPATH', dirname(__file__) . '/');
  18. $cache = true; cache/'; //gz ファイルが保存されているディレクトリ。書き込み可能であることを確認します。
  19. if (empty($_SERVER['QUERY_STRING']))
  20. $gzip = strstr($_SERVER['HTTP_ACCEPT_ENCODING') ], 'gzip ');
  21. if (empty($gzip))
  22. $key = array_shift('?', $_SERVER['QUERY_STRING'])); '../ ', '', $key);
  23. $filename = '_';
  24. $rel_path(ABSPATH, '', dirname($filename)); namespace = str_replace( '/', $symbol, $rel_path);
  25. $cache_filename = $namespace . $symbol .gz'; ext = array_pop(explode('.', $filename)); //suffixに基づいてファイルタイプ情報を判断します
  26. $type = "Content-type: text/html" //デフォルトのファイルタイプ
  27. switch ($ext); {
  28. case ' css':
  29. $type = "コンテンツ タイプ: text/css";
  30. case 'js':
  31. $type = "コンテンツ タイプ: text/javascript"; gif':
  32. $cache = false;
  33. $type = "コンテンツ タイプ: image/gif";
  34. case 'jpg':
  35. $type = "コンテンツ タイプ: image/jpeg ";
  36. break ;
  37. case 'png':
  38. $cache = false;
  39. $type = "Content-type: image/png";
  40. break;
  41. default:
  42. exit();
  43. }
  44. if ($cache)
  45. {
  46. if (file_exists($cache_filename))
  47. { // gz ファイルが存在する場合
  48. $mtime = filemtime($cache_filename);
  49. $gmt_mtime = gmdate('D, d M Y H:i:s', $mtime) ' GMT';
  50. if ((isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && array_shift(explode(';', $_SERVER['HTTP_IF_MODIFIED_SINCE'])) ==
  51. $gmt_mtime))
  52. {
  53. //ブラウザのキャッシュ ファイルの変更日は一致しており、304 が返されます
  54. header("HTTP/1.1 304 Not Modified")
  55. // クライアント ヘッダーを送信
  56. header("Content-Encoding:gzip");
  57. sendheader($gmt_mtime) , $type);
  58. }
  59. else
  60. {
  61. // gz ファイル出力を読み取る
  62. $content = file_get_contents($cache_filename);
  63. // クライアント ヘッダーを送信
  64. sendheader($gmt_mtime, $type, strlen($content));
  65. header(" Content-Encoding: gzip");
  66. // データを送信
  67. echo $content;
  68. }
  69. else
  70. if (file_exists($filename))
  71. { // 対応する gz ファイルがありません
  72. $mtime = mktime();
  73. $gmt_mtime = gmdate('D, d M Y H:i:s', $mtime)
  74. // ファイルを読み取ります
  75. $content = file_get_contents($filename);空白部分
  76. / / $content = ltrim($content);
  77. // 圧縮ファイルの内容
  78. $content = gzencode($content, 9, $gzip ? FORCE_GZIP : FORCE_DEFLATE);
  79. sendheader($) gmt_mtime, $type , strlen($content));
  80. header("Content-Encoding: gzip");
  81. //データを送信
  82. $content; }
  83. else
  84. {
  85. header("HTTP/1.0 404 Not Found");
  86. }
  87. }
  88. else
  89. { // Gzip モードで出力を処理します。原理は基本的に上記と同じです
  90. if (file_exists($filename))
  91. {
  92. $mtime = filemtime($filename)
  93. $gmt_mtime = gmdate('D, d M Y H:i:s', $mtime); ' GMT';
  94. if ((isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && array_shift(explode(';', $_SERVER['HTTP_IF_MODIFIED_SINCE'])) ==
  95. $gmt_mtime))
  96. {
  97. // ファイルありブラウザキャッシュ内 変更日は一致しており、304 が返されます
  98. header("HTTP/1.1 304 Not Modified")
  99. // クライアントヘッダーを送信
  100. sendheader($gmt_mtime, $type, strlen($content)); "Content-Encoding: gzip");
  101. }
  102. else
  103. {
  104. // ファイル出力を読み取る
  105. $content = file_get_contents($filename);
  106. // クライアントヘッダーを送信する
  107. sendheader($gmt_mtime, $type, strlen($content) ));
  108. //データを送信
  109. echo $content;
  110. }
  111. }
  112. header("HTTP/1.0 404 Not Found")
  113. }
  114. }
  115. ?>
  116. 添付ファイル-------------- 例証します: 1. 圧縮ファイルはサーバー上にキャッシュされ、再圧縮時間と CPU 使用率を削減するために再度アクセスされます。 2. クライアント ファイルのキャッシュ時間を設定して再リクエストの数を減らすと、85% 以上削減できます。 3. イメージはすでに圧縮形式であるため、クライアント キャッシュ時間のみが設定され、圧縮は実行されません。

    使用方法: 1. サーバーは gzip および Rewrite 機能をサポートする必要があります。 2. .htacess ファイルの「RewriteBase/」の下の行に次のコードを追加します。 RewriteRule (.*.css$|.*.js$|.*.jpg$|.*.gif$|.*.png$) gzip.php?$1 [L] 3. gzip.php をルート ディレクトリにアップロードします 4. ルート ディレクトリにキャッシュ フォルダーを作成し、読み取りと書き込みが可能であることを確認します。



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。