phar:// фактически умерла ещё в PHP 8.0 — и это почти никто не заметил. До этого её могла спровоцировать практически любая функция, принимающая путь к файлу:
file_exists(), filesize(), getimagesize() и другие.Stream wrapper разбирал манифест архива и десериализовывал его metadata — даже если в вашем коде вообще не было вызова
unserialize().При этом Phar определяется не по расширению файла, а по содержимому: движок ищет токен
__HALT_COMPILER();. Поэтому файл можно было загрузить даже как avatar.jpg, и он всё равно мог быть распознан и обработан как Phar.В PHP 8.0 metadata сделали ленивой: теперь она десериализуется только при явном вызове
Phar::getMetadata().Изменение было предложено в RFC Тайсоном Андре.
@WebDev_Plus
