(PHP 5 >= 5.3.0, PHP 7, PHP 8, PECL phar >= 2.0.0)
Phar::webPhar — Направляет запрос из браузера во внутренний файл в phar-архиве
$alias
= null
,$index
= null
,$fileNotFoundScript
= null
,$mimeTypes
= [],$rewrite
= null
Phar::webPhar() служит Phar::mapPhar() для веб-архивов phar. Метод анализирует $_SERVER['REQUEST_URI'] и направляет запрос из браузера во внутренний файл в phar-архиве. Он имитирует веб-сервер, направляет запросы к нужному файлу, отображает правильные заголовки и анализирует файлы PHP по мере необходимости. В сочетании с Phar::mungServer() и Phar::interceptFileFuncs(), любое веб-приложение можно использовать без изменений из phar-архива.
Phar::webPhar() должен вызываться только из заглушки (stub) phar-архива (о том, что такое заглушка и как с ним работать, читайте тут).
alias
Псевдоним для использования в обёртках phar://
.
index
Местоположение в phar-архиве индексного файла.
fileNotFoundScript
Местоположение скрипта, отвечающего за обработку ошибки HTTP 404. Скрипт должен возвращать корректные заголовки для этой ошибки.
mimeTypes
Массив сопоставления расширений файлов типам MIME. Если достаточно сопоставления по умолчанию, то передайте сюда пустой массив. По умолчанию используются такие сопоставления:
<?php
$mimes = array(
'phps' => Phar::PHPS, // передаётся в highlight_file()
'c' => 'text/plain',
'cc' => 'text/plain',
'cpp' => 'text/plain',
'c++' => 'text/plain',
'dtd' => 'text/plain',
'h' => 'text/plain',
'log' => 'text/plain',
'rng' => 'text/plain',
'txt' => 'text/plain',
'xsd' => 'text/plain',
'php' => Phar::PHP, // разбирается как PHP
'inc' => Phar::PHP, // разбирается как PHP
'avi' => 'video/avi',
'bmp' => 'image/bmp',
'css' => 'text/css',
'gif' => 'image/gif',
'htm' => 'text/html',
'html' => 'text/html',
'htmls' => 'text/html',
'ico' => 'image/x-ico',
'jpe' => 'image/jpeg',
'jpg' => 'image/jpeg',
'jpeg' => 'image/jpeg',
'js' => 'application/x-javascript',
'midi' => 'audio/midi',
'mid' => 'audio/midi',
'mod' => 'audio/mod',
'mov' => 'movie/quicktime',
'mp3' => 'audio/mp3',
'mpg' => 'video/mpeg',
'mpeg' => 'video/mpeg',
'pdf' => 'application/pdf',
'png' => 'image/png',
'swf' => 'application/shockwave-flash',
'tif' => 'image/tiff',
'tiff' => 'image/tiff',
'wav' => 'audio/wav',
'xbm' => 'image/xbm',
'xml' => 'text/xml',
);
?>
rewrite
Функция перезаписи, которой передаётся единственный строковый параметр и которая должна также вернуть строку, либо false
.
Если вы используете fast-cgi или cgi, то параметром, передаваемым в эту функцию будет значение переменной $_SERVER['PATH_INFO']. В ином случае передаваться будет значение переменной $_SERVER['REQUEST_URI'].
Если будет возвращена строка, то она будет использована как путь к файлу внутри архива. Если вернётся false
, то webPhar() пошлёт код ошибки HTTP 403.
Функция не возвращает значения после выполнения.
Выбросит исключение PharException, если будет невозможно открыть какой-либо файл, либо если вызывать её не из заглушки. Если в параметре mimeTypes
указать некорректный MIME-тип, или в rewrite
будет передана некорректная функция обратного вызова, то будет выброшено исключение UnexpectedValueException.
Версия | Описание |
---|---|
8.0.0 | Параметр fileNotFoundScript и rewrite теперь допускают значение null . |
Пример #1 Пример использования Phar::webPhar()
В примере ниже, созданный phar отобразит Hello World
при обращении из браузера к /myphar.phar/index.php
или к /myphar.phar
, и отобразит исходный код index.phps
при обращении к /myphar.phar/index.phps
.
<?php
// создаём архив:
try {
$phar = new Phar('myphar.phar');
$phar['index.php'] = '<?php echo "Hello World"; ?>';
$phar['index.phps'] = '<?php echo "Hello World"; ?>';
$phar->setStub('<?php
Phar::webPhar();
__HALT_COMPILER(); ?>');
} catch (Exception $e) {
// обработка ошибок
}
?>