Php strip whitespace: примеры (PHP)
php_strip_whitespace(string $filename): stringФункция php_strip_whitespace возвращает исходный код PHP-файла с удаленными комментариями и пробельными символами. Основное применение – грубая оценка объема реального кода или создание упрощенных копий скриптов для анализа.
Функция принимает один обязательный аргумент:
- $filename (string) – путь к обрабатываемому PHP-файлу.
Функция читает указанный файл, удаляет из его содержимого комментарии (как однострочные //, #, так и многострочные /* */), а также лишние пробелы, табуляции и переводы строк, после чего возвращает "очищенный" код. Если файл не существует, возвращается пустая строка.
Пример с простым файлом, содержащим комментарии и лишние пробелы.
<?php
// Это однострочный комментарий
$a = 1;
# Это еще один комментарий
/*
Многострочный
комментарий
*/
echo "Hello";
?><?php
$result = php_strip_whitespace('test.php');
echo $result;
?><?php $a = 1; echo "Hello"; ?>
Обработка несуществующего файла.
<?php
$result = php_strip_whitespace('missing.php');
var_dump($result); // string(0) ""
?>Прямых аналогов для обработки файлов нет, но есть функции для работы со строками:
- trim(), ltrim(), rtrim() – Удаляют пробельные символы только с краев строки, не затрагивая внутренние пробелы и комментарии.
- preg_replace() – Позволяет удалять пробелы и комментарии через сложные регулярные выражения, но требует осторожности.
php_strip_whitespace используется для анализа файлов, а trim() – для очистки пользовательского ввода или строковых данных. preg_replace() подходит для тонкой настройки процесса очистки.
Прямых встроенных аналогов в Python, JavaScript или MySQL обычно нет. Подобная функциональность достигается сторонними библиотеками или вручную.
import ast
import inspect
def strip_php_whitespace(filepath):
with open(filepath, 'r') as file:
source = file.read()
tree = ast.parse(source)
return ast.unparse(tree) # Восстановление кода без комментариев
# Пример для Python-файла (не для PHP)В экосистеме JavaScript минификаторы (например, UglifyJS, Terser) выполняют схожую задачу для production-сборки.
// Использование через CLI, а не нативную функцию
// terser input.js --output output.min.js --compress --mangleОтличие от PHP в том, что php_strip_whitespace – встроенная функция для разового применения, а в других языках это часть инструментов сборки.
Функция не генерирует исключение, а возвращает пустую строку, что можно пропустить.
<?php
// Файла нет
$code = php_strip_whitespace('/fake/path/script.php');
if ($code === '') {
echo 'Файл не найден или он пуст.';
}
?>Функция предназначена только для PHP-кода. Для других типов файлов поведение некорректно.
<?php
// Файл test.txt с текстом 'Hello // World'
$result = php_strip_whitespace('test.txt');
echo $result; // Выведет 'Hello // World', комментарий не удалится
?>В поведении функции php_strip_whitespace с версии PHP 5 до PHP 8 существенных изменений не было. Она остается стабильной и редко изменяемой. В PHP 8.0+ функция корректно работает с новыми синтаксическими конструкциями, такими как атрибуты, но сам принцип удаления пробелов и комментариев не менялся.
<?php
$file = 'example.php';
$originalSize = filesize($file);
$strippedCode = php_strip_whitespace($file);
$strippedSize = strlen($strippedCode);
echo "Исходный размер: $originalSize байт\n";
echo "Размер после обработки: $strippedSize байт\n";
echo "Сжатие: " . round((1 - $strippedSize/$originalSize)*100, 2) . "%\n";
?><?php
foreach (glob('src/*.php') as $phpFile) {
$cleanCode = php_strip_whitespace($phpFile);
$name = basename($phpFile, '.php');
file_put_contents("clean/{$name}_clean.php", $cleanCode);
}
?>Функция полезна для статического анализа, например, подсчета операторов.
<?php
$code = php_strip_whitespace('app.php');
// Подсчет точек с запятой как грубая оценка количества операторов
$statements = substr_count($code, ';');
echo "Примерное количество операторов: $statements";
?>