我正在使用 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)
请记住,您不需要部署路由器脚本,它只需要本地开发。