PHP8 Phar::webPhar

2024-02-21 14:40 更新

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

Phar::webPhar — 将来自 Web 浏览器的请求路由到 phar 存档中的内部文件

说明

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

Phar::webPhar() 用作 Phar::mapPhar() 基于 Web 的 Phars。此方法解析和 将来自 Web 浏览器的请求路由到 Phar 存档中的内部文件。 它模拟 Web 服务器,将请求路由到正确的文件,并回显正确的文件 标头并根据需要解析 PHP 文件。结合 Phar::mungServer() 和 Phar::interceptFileFuncs(),可以使用任何 Web 应用程序 未从 Phar 存档中修改。$_SERVER['REQUEST_URI']

Phar::webPhar() 应该只 从 Phar 存档的存根调用(有关什么是存根的更多信息,请参阅此处)。

参数 

alias

可在 URL 中使用的别名 请参阅此存档,而不是其完整路径。phar://

index

目录索引的 phar 中的位置。

fileNotFoundScript

找不到文件时要运行的脚本的位置。这 脚本应输出正确的 HTTP 404 标头。

mimeTypes

将其他文件扩展名映射到 MIME 类型的数组。 如果默认映射足够,则传递一个空数组。 默认情况下,这些扩展映射到以下 MIME 类型:

<?php
$mimes = array(
    'phps' => Phar::PHPS, // pass to 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, // parse as PHP
    'inc' => Phar::PHP, // parse as 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

rewrites 函数将字符串作为其唯一参数传递,并且必须返回字符串或 false

如果您使用的是 fast-cgi 或 cgi,则传递给函数的参数是变量的值。否则,传递给函数的参数是值 的变量。$_SERVER['PATH_INFO']$_SERVER['REQUEST_URI']

如果返回字符串,则将其用作内部文件路径。如果返回 false,则 webPhar() 将 发送 HTTP 403 拒绝代码。

返回值 

没有返回值。

错误/异常 

无法打开内部时引发 PharException 文件输出,或者如果 从非存根调用。如果传递了无效的数组值或传递了无效的回调,则会引发 UnexpectedValueException。mimeTypesrewrite

更新日志 

版本说明
8.0.0fileNotFoundScript并且现在是可空的。rewrite

示例 

示例 #1 A Phar::webPhar() example

在下面的示例中,创建的 phar 将显示 if one browses to 或 to ,并将显示 if one browses to 的来源。Hello World/myphar.phar/index.php/myphar.pharindex.phps/myphar.phar/index.phps

<?php
// creating the phar archive:
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) {
    // handle error here
}
?>

参见 

  • Phar::mungServer() - 定义最多 4 个 $_SERVER 变量的列表,这些变量应修改以执行
  • Phar::interceptFileFuncs() - 指示 phar 拦截 fopen、file_get_contents、opendir 和所有与 stat 相关的函数


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号