PHP Manual

Автоматична мінімізація PHP скрипта

22. 08. 2019

Іноді нам потрібно зменшити великий PHP-скрипт і стиснути кілька з них в один файл. Це корисно, коли ми створюємо бібліотеку, яку опублікуємо в Інтернеті і не хочемо, щоб хтось втручався в неї, або це корисний скрипт, який ми будемо часто копіювати і тому не хочемо передавати занадто багато даних.

Можливим рішенням є мінімізація коду.

Я підготував для цього онлайн-інструмент (просто вставте код і ви одразу отримаєте мініатюрну версію).

До цього мінімуму можна скоротити серцевину мініфікатора:

$file = 'StaticClass.php';
// Dgx's PHP shrinker
// Сумісність з 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('хв'.$file, $output);

Ядром є функція token_get_all(), яка розбирає PHP-код на окремі "атоми" (токени), які можна однозначно ідентифікувати, а потім ігнорувати за необхідності.

Наприклад, генерує (для прикладу я використовував метод Nette\Utils\Images):

Minified code

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