PHP 内置服务器托管 Web 字体

NoC*_*sum 2 php

我正在使用 PHP 的内置 Web 服务器进行项目的本地开发,如下所示:

$ php -S localhost:8000 -t web/
Run Code Online (Sandbox Code Playgroud)

内部web目录是FontAwesome(图标web字体),并以正确的网页包括和类。在本地提供时,字体无法正确显示。

浏览器中的“网络”开发人员选项卡显示从服务器正确加载的字体:

200 GET http://localhost:8000/fonts/fontawesome-webfont.woff2?v=4.6.3
Run Code Online (Sandbox Code Playgroud)

但是,响应标头包括Content-type: application/octet-stream(我相信)它们应该何时返回 Content-type: application/font-woff等。

有没有办法使用 PHP 的内置 Web 服务器来提供 Web 字体?也许添加自定义 MIME 类型?

小智 5

文档

如果在启动 Web 服务器时在命令行上给出了 PHP 文件,则它被视为“路由器”脚本。该脚本在每个 HTTP 请求开始时运行。如果此脚本返回 FALSE,则请求的资源将按原样返回。否则脚本的输出将返回到浏览器。

$ php -S localhost:8000 router.php
Run Code Online (Sandbox Code Playgroud)

用于添加其他 mime 类型的示例 router.php,php cli 网络服务器本身不支持,如下所示:

<?php
// router.php
$path = pathinfo($_SERVER["SCRIPT_FILENAME"]);
if ($path["extension"] == "el") {
    header("Content-Type: text/x-script.elisp");
    readfile($_SERVER["SCRIPT_FILENAME"]);
} else {
    return FALSE;
}
?>
Run Code Online (Sandbox Code Playgroud)

包含 Font-Awesome 的我自己的 router.php 文件如下所示:

<?php
// router.php
$path = pathinfo($_SERVER["SCRIPT_FILENAME"]);
switch ($path["extension"]) {
    case "ttf":
        header("Content-Type: application/x-font-ttf");
        break;
    case "woff":
        header("Content-Type: application/x-font-woff");
        break;
    case "woff2":
        header("Content-Type: font/woff2");
        break;
    default:
        return FALSE;
}
readfile($_SERVER["SCRIPT_FILENAME"]);
Run Code Online (Sandbox Code Playgroud)

请记住,您不需要部署路由器脚本,它只需要本地开发。