HTMLファイルの出力を圧縮する【Compress】PHPコードがある場合は、file_get_contents()ではなくてob_get_contents()!


ちょっとでもページの読み込みが早くなればいいな~と悪戦苦闘。
HTMLのCompressを自前で組み込む!

 

index.php

中身はこれだけを書く。HTML要素は『contents.php』にがっつり書く。

<?php
	function html_compress( $filename ){

		$contents = "";
		if (is_file($filename)) {
			ob_start();  
			include $filename;
			$contents = ob_get_contents();
			ob_end_clean();

			$contents = preg_replace('/<!--[\s\S]*?-->/s', '', $contents);// コメントを削除『<!-- -->』
			$contents = preg_replace('/\/\*[\s\S]*?\*\//s', '', $contents);// コメントを削除『/* */』
			$contents = preg_replace('/\/\/.*/', '', $contents);//1行コメントを削除『//』
			$contents = preg_replace('/\t/s', '', $contents);// タブを削除
			$contents = preg_replace('/\r\n|\r|\n/s', '', $contents);// 改行を削除
			$contents = preg_replace('/  /s', '', $contents);// 半角空白2つを削除
			return $contents;
		}
	    return false;
	}

echo html_compress('contents.php');
?>

※ちなみに、画面にちゃんと表示ができない場合は、13行目の一行コメントと、15行目の改行削除をコメントアウトして原因を調べること。
ページのソースコードや、error_logなどを確認する。
(『http://aaa.com』なんて記述がある場合は、『//』以降が消されてしまって『http:』に変換されてバグることを確認済み。現在未対応。)

 

contents.php

中身は普通のHTML&PHP。たとえばこんな感じ。

<?php
global $title = "タイトル";
?>
<HTML>
<BODY>
<p><?php echo $title; ?></p>
略
</BODY>
</HTML>

 

コツ

『file_get_contents()』ではなく『ob_get_contents()』を使用すること。
ob_get_contents()を使用すると、PHP実行済みのHTMLコードを出力してくれる。
file_get_contents()を使用すると、PHPが未実行なので、PHPタグがサイトに表示されてしまう。

 

使い方

ob_start();
include 'contents.php';
$contents = ob_get_contents();
ob_end_clean();

 

【OK】ob_get_contents()をした場合

PHPが実行されて、HTMLコードが吐き出される。

<HTML><BODY><p>タイトル</p>略</BODY></HTML>

 

【NG】file_get_contents()をした場合

PHPが未実行なので、PHPタグがついたままのHTMLコードが吐き出される。
↓こんな感じ。

<?phpglobal $title = "タイトル";?><HTML><BODY><p><?php echo $title; ?></p>略</BODY></HTML>