Направляет запрос из браузера во внутренний файл в phar-архиве

# Phar::webPhar

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

Phar::webPhar — Направляет запрос из браузера во внутренний файл в phar-архиве

### Описание

final public static function Phar::webPhar(
?string `$alias` = `null`,
?string `$index` = `null`,
?string `$fileNotFoundScript` = `null`,
array `$mimeTypes` = [],
?callable `$rewrite` = `null`
): void

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

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

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

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open