SunshinePHP 2020 CFP Started

Phar::webPhar

(PHP 5 >= 5.3.0, PHP 7, PECL phar >= 2.0.0)

Phar::webPharmapPhar для phar-архивов на базе веб. Контроллер фронтенда для веб-приложений

Описание

final public static Phar::webPhar ([ string $alias [, string $index = "index.php" [, string $f404 [, array $mimetypes [, callable $rewrites ]]]]] ) : void

Phar::mapPhar() для phar-архивов на базе веб. Этот метод разбиарет $_SERVER['REQUEST_URI'] и маршрутизирует запросы веб-браузера к конкретному файлу в phar-архиве. Фактически это симуляция веб-сервера, перенаправляющего запросы к корректным файлам, возвращающим правильные заголовки и разбирающий PHP-файлы, если необходимо. Этот мощный метод является частью того, что упрощает преобразование существующего PHP-приложения в phar-архив. Совместно с Phar::mungServer() и Phar::interceptFileFuncs() он помогает запускать любое веб-приложение из phar-архива, никак его не меняя.

Phar::webPhar() должен вызываться только из заглушки (stub) phar-архива (о том, что такое заглушка и как с ним работать, читайте тут).

Список параметров

alias

Псевдоним для использования в обертках phar://.

index

Местоположение в phar-архиве индексного файла.

f404

Местоположение скрипта, отвечающего за обработку ошибки 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',
);
?>

rewrites

Функция перезаписи, которой передается единственный строковый параметр и которая должна также вернуть строку, либо FALSE.

Если вы используете fast-cgi или cgi, то параметром, передаваемым в эту функцию будет значение переменной $_SERVER['PATH_INFO']. В ином случае передаваться будет значение переменной $_SERVER['REQUEST_URI'].

Если будет возвращена строка, то она будет использована как путь к файлу внутри архива. Если вернется FALSE, то webPhar() пошлет код ошибки HTTP 403.

Возвращаемые значения

Эта функция не возвращает значения после выполнения.

Ошибки

Выбросит исключение PharException, если будет невозможно открыть какой-либо файл, либо если вызывать ее не из заглушки. Если в параметре mimetypes указать некорректный MIME-тип, или в rewrites будет передана некорректная функция обратного вызова, то будет выброшено исключение UnexpectedValueException.

Примеры

Пример #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) {
    
// обработка ошибок
}
?>

Смотрите также

  • Phar::mungServer() - Определить список до четырех $_SERVER-переменных, которые должны быть изменены для запуска
  • Phar::interceptFileFuncs() - Указывает phar перехватывать fopen, file_get_contents, opendir и все stat-функции

add a note add a note

User Contributed Notes 1 note

up
0
James
6 years ago
It seems that calling Phar::webPhar() from inside a function is a bad idea.  Doing so will cause global variables in included files to not be global.  For instance, do NOT try this:

<?php
$phar
= new Phar('test.phar.php');
$phar['test.php'] = '<?php
$FOO = "globals work";
function test() {
  global $FOO;
  echo "test: $FOO\n";
}
test();
?>'
;
$phar->setStub('<?php
function _bootstrap() {
Phar::webPhar();
}
_bootstrap();
__HALT_COMPILER(); ?>'
);
?>

The output will be "test:", not "test: globals work".
To Top