Phar::webPhar

(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 的 phar 文件。此方法解析 $_SERVER['REQUEST_URI'] 并将来自 Web 浏览器的请求路由到 phar 归档文件中的内部文件。它模拟一个 Web 服务器,将请求路由到正确的文件,回显正确的标头并根据需要解析 PHP 文件。结合 Phar::mungServer()Phar::interceptFileFuncs(),任何 Web 应用程序都可以从 phar 归档文件无修改地使用。

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

参数

alias

可在 phar:// URL 中使用的别名,用于引用此归档文件,而不是其完整路径。

index

phar 中目录索引的位置。

fileNotFoundScript

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

mimeTypes

一个将附加文件扩展名映射到 MIME 类型的数组。如果默认映射足够,请传递一个空数组。默认情况下,这些扩展名将映射到这些 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

重写函数接受一个字符串作为其唯一参数,并且必须返回一个 stringfalse

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

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

返回值

不返回任何值。

错误/异常

当无法打开内部文件进行输出或从非存根调用时,抛出 PharException。 如果将无效的数组值传递给 mimeTypes 或将无效的回调传递给 rewrite,则会抛出 UnexpectedValueException

变更日志

版本 描述
8.0.0 fileNotFoundScriptrewrite 现在可以为空。

示例

示例 #1 一个 Phar::webPhar() 示例

在下面的示例中,创建的 phar 档案将在浏览到 /myphar.phar/index.php/myphar.phar 时显示 Hello World,并将在浏览到 /myphar.phar/index.phps 时显示 index.phps 的源代码。

<?php
// 创建 phar 档案:
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) {
// 在此处处理错误
}
?>

参见

添加说明

用户贡献说明 1 条说明

James
11 年前
似乎从函数内部调用 Phar::webPhar() 不是一个好主意。 这样做会导致包含文件中全局变量不是全局变量。 例如,不要尝试以下操作

<?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(); ?>'
);
?>

输出将是“test:”,而不是“test: globals work”。
To Top