Automatická minifikace PHP scriptu

Občas potřebujeme zmenšit velký PHP script a stlačit jich několik do jednoho souboru. To se hodí třeba v případě, kdy vytváříme knihovnu, kterou budeme publikovat na internet a nechceme, aby nám do ní někdo zasahoval, nebo jde o užitečný script, který budeme často kopírovat a nechceme proto přenášet zbytečně mnoho dat.

Možným řešeným je minifikace kódu.

Připravil jsem pro to online nástroj (stačí vložit kód a ihned dostanete zpět jeho minifikovanou verzi).

Jádro minifikátoru lze po zestručnění zmenšit na toto minimum:

 1 $file = 'StaticClass.php';
 2 
 3 // Dgx's PHP shrinker
 4 
 5 // PHP 4 & 5 compatibility
 6 if (!defined('T_DOC_COMMENT'))
 7   define ('T_DOC_COMMENT', -1);
 8 
 9 if (!defined('T_ML_COMMENT'))
10   define ('T_ML_COMMENT', -1);
11 
12 // read input file
13 $input = file_get_contents($file);
14 
15 $space = $output = '';
16 $set = '!"#$&\'()*+,-./:;<=>?@[\]^`{|}';
17 $set = array_flip(preg_split('//',$set));
18 
19 foreach (token_get_all($input) as $token)  {
20   if (!is_array($token))
21     $token = array(0, $token);
22 
23   switch ($token[0]) {
24     case T_COMMENT:
25     case T_ML_COMMENT:
26     case T_DOC_COMMENT:
27     case T_WHITESPACE:
28       $space = ' ';
29       break;
30 
31     default:
32       if (isset($set[substr($output, -1)]) ||
33           isset($set[$token[1]{0}])) $space = '';
34       $output .= $space . $token[1];
35       $space = '';
36   }
37 }
38 
39 // write shrinked file
40 file_put_contents('min_'.$file, $output);

Jádro tvoří funkce token_get_all(), která naparsuje PHP kód na jednotlivé „atomy“ (tokeny), které lze už jednoznačně poznat a podle potřeby následně ignorovat.

Vygeneruje například (pro ukázku jsem použil metodu Nette\Utils\Images):

Minifikovaný kód
Sponzorované odkazy
Pomohl Vám tento článek?