php_strip_whitespace()
В этой статье рассматривается функция PHP php_strip_whitespace(): синтаксис, принцип работы и практические примеры использования.
Функция PHP php_strip_whitespace() читает PHP-файл и возвращает его содержимое с удалёнными комментариями и лишними пробелами — именно тот результат, который вы получили бы при запуске файла через php -w в командной строке. На этой странице описаны синтаксис, что именно функция удаляет (и что нет), полный рабочий пример, особенности производительности, а также отличия от строковых функций обрезки, с которыми её часто путают.
Синтаксис
php_strip_whitespace(string $filename): string| Часть | Значение |
|---|---|
$filename | Путь к PHP-файлу для чтения и обработки. |
| Возвращаемое значение | Строка с исходным кодом файла, из которого удалены комментарии и лишние пробелы. В случае ошибки (например, если файл не существует) возвращает пустую строку. |
Функция не выполняет файл — она лишь токенизирует его исходный код. Она также не изменяет исходный файл на диске; вместо этого она возвращает обработанный код в виде новой строки, оставляя вам право решать, что с ним делать.
Что удаляется
php_strip_whitespace() использует собственный токенизатор PHP, поэтому удаление выполняется с полным пониманием синтаксиса — функция никогда не сломает код, убрав значимые пробелы. Конкретно удаляется следующее:
- Все стили комментариев:
// строка,# строкаи/* блок */(включая/** докблоки */). - Лишние пробелы между токенами: объединяются последовательности пробелов, табуляций и переводов строк.
Функция аккуратно сохраняет пробелы внутри строковых литералов и любое содержимое вне тегов <?php … ?> (обычный HTML), поскольку их удаление изменило бы вывод программы.
Как использовать php_strip_whitespace()
Передайте путь к файлу, который нужно обработать. Пример ниже создаёт небольшой файл, а затем обрабатывает его, чтобы можно было увидеть разницу:
<?php
// Create a sample file with comments and generous spacing.
$source = <<<'PHP'
<?php
// Greet the visitor.
function greet(string $name): string
{
/* Build the message */
return "Hello, $name!"; // spaces inside the string are kept
}
echo greet("World");
PHP;
file_put_contents('sample.php', $source);
// Strip comments and whitespace.
$stripped = php_strip_whitespace('sample.php');
echo $stripped;Комментарии и лишние пустые строки исчезнут, тогда как пробелы внутри строки "Hello, $name!" останутся нетронутыми, поскольку их удаление изменило бы поведение программы.
Если файл не удаётся прочитать, функция возвращает пустую строку, а не вызывает фатальную ошибку:
<?php
$result = php_strip_whitespace('does-not-exist.php');
var_dump($result === ''); // bool(true)Когда использовать
- Выпуск production-сборки. Удаление комментариев и пробелов уменьшает размер исходных файлов и незначительно сокращает время парсинга при холодной загрузке (при включённом кеше опкодов, например OPcache, этот выигрыш практически нивелируется после первого запроса).
- Обфускация распространяемого кода. Удаление комментариев и докблоков делает распространяемый исходный код менее самодокументированным — это лёгкая, но не надёжная, форма обфускации.
- Изучение токенизированного вывода. Быстрый способ посмотреть на исходный код файла без комментариев.
Соображения о производительности
Используйте php_strip_whitespace() только для production-копий ваших файлов, но не для рабочих исходников. В процессе разработки комментарии и пробелы делают код читаемым, отлаживаемым и поддерживаемым; удаление их на месте лишило бы вас этих преимуществ. Стандартный подход — хранить исходники с комментариями под контролем версий и генерировать очищенные копии как часть процесса сборки/деплоя.
Обратите внимание, что при использовании OPcache (входит в состав современного PHP и включён по умолчанию) скомпилированный байткод кешируется после первого запроса, поэтому экономия времени парсинга от обработки файлов минимальна. Более ощутимым преимуществом остаётся уменьшение размера файлов.
php_strip_whitespace() vs. trim()
Несмотря на похожие названия, эти функции не имеют ничего общего — что является распространённым источником путаницы:
| Функция | Работает с | Удаляет |
|---|---|---|
php_strip_whitespace() | PHP-файлом | комментарии + лишние пробелы из исходного кода |
trim() | строковым значением | пробелы в начале и конце строки |
ltrim() / rtrim() | строковым значением | пробелы только с одного конца |
Если ваша цель — очистить строку (например, ввод из формы), используйте trim(), а не php_strip_whitespace().
Связанные функции
file_get_contents()— читает необработанное содержимое файла без каких-либо удалений.readfile()— читает файл и выводит его содержимое прямо в выходной буфер.highlight_string()— противоположная цель: отображает PHP-исходник с подсветкой синтаксиса.- Комментарии PHP — синтаксисы комментариев, которые удаляет эта функция.
Заключение
php_strip_whitespace() возвращает копию PHP-файла без комментариев и лишних пробелов, пропуская его через токенизатор PHP, что позволяет безопасно уменьшить размер файлов без нарушения работоспособного кода. Используйте её только для production-сборок, помните, что она работает с файлами (а не строками), и не путайте с trim().