PHP Manual

PHPスクリプトの自動最小化

22. 08. 2019

時には、大きなPHPスクリプトを縮小し、いくつかのスクリプトを1つのファイルに圧縮する必要があります。これは、インターネットに公開するライブラリを作っていて、誰にも邪魔されたくない場合や、頻繁にコピーする便利なスクリプトで、あまり多くのデータを転送したくない場合などに有効です。

解決策として考えられるのは、コードの最小化です。

このためのオンラインツールを用意しました(コードを貼り付けるだけで、すぐにminifyされたバージョンが返ってきます)。

ミニファミリーのコアは、この最小値まで減らすことができる。

$file = 'StaticClass.php';
// DgxのPHPシュリンカー
// PHP 4 と 5 の互換性
if (!defined('T_DOC_COMMENT'))
define ('T_DOC_COMMENT', -1);
if (!defined('T_ML_COMMENT'))
define ('T_ML_COMMENT', -1);
// 入力ファイルの読み込み
$input = file_get_contents($file);
$space = $output = '';
$set = '!"#$&\'()*+,-./:;<=>?@[\]^`{|}';
$set = array_flip(preg_split('//',$set));
foreach (token_get_all($input) as $token) {
if (!is_array($token))
$token = array(0, $token);
switch ($token[0]) {
case T_COMMENT:
case T_ML_COMMENT:
case T_DOC_COMMENT:
case T_WHITESPACE:
$space = '';
break;
default:
if (isset($set[substr($output, -1)]) ||
isset($set[$token[1]{0}])) $space = '';
$output .= $space . $token[1];
$space = '';
}
}
// 縮小したファイルを書き込む
file_put_contents('{cH00ffff}私達は、私達のために'.$file, $output);

核となるのは token_get_all() 関数で、PHP コードを一意に識別できる個々の「アトム」(トークン) にパースし、必要に応じて無視できるようにします。

例えば、次のようなものが生成されます(例では NetteUtils FilterImages メソッドを使用しました)。

ミニファイコード

Jan Barášek   Více o autorovi

Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.

Rád vám pomůžu:

Související články

1.
Status:
All systems normal.
2024