php - 通过PHP传递字体文件

标签 php fonts

我有一个这样设置的网站:

client request --> gate.php --> requested file

客户端发送的每个请求都会发送至 gate.php如果它被解析。 Gate.php然后包含来自受限目录的请求文件,以便客户端无法访问除 gate.php 之外的任何文件.

门文件:

<?php
$_uri = strtok($_SERVER["REQUEST_URI"],'?');
$_root = "<root>";
// Index //
switch($_uri) {
    case "/": $_uri = "<path>"; break;
    case "/css": $_uri = "<path>"; break;
    case "/js": $_uri = "<path>"; break;
    case "/font": $_uri = "<path>".strtok($_GET["p"],".")."/".$_GET["p"]; break;
    case "/ajax": $_uri = "<path>"; break;
    case "/signin": $_uri = "<path>"; break;
    case "/signup": $_uri = "<path>"; break;
    default:
        if(substr($_uri,0,8) == "/profile") { // profile
            $_uri = "<path>";
            $_page = substr($_uri,9);
        } else {
            header("HTTP/1.1 404");
            require_once($_root."<path>");
            die();
        }
}
!isset($_page) and isset($_GET["p"]) ? $_page = $_GET["p"] : 0;
// Mime //
$_path = explode(".",$_uri);
switch($_path[1]) {
    case "php": $_path[2] = "text/html"; break;
    case "css": $_path[2] = "text/css"; break;
    case "js": $_path[2] = "application/javascript"; break;
    case "xml": $_path[2] = "application/xml"; break;
    case "svg": $_path[2] = "application/xml+svg"; break;
    case "jpg": $_path[2] = "image/jpeg"; break;
    case "png": $_path[2] = "image/png"; break;
    case "otf": $_path[2] = "x-font/otf"; break;
    case "eot": $_path[2] = "x-font/eot"; break;
    case "ttf": $_path[2] = "x-font/ttf"; break;
    case "woff": $_path[2] = "x-font/woff"; break;
    default:
        header("HTTP/1.1 500");
        require_once($_root."<path>");
        die();
}
$_path[2] == "text/html" ? require_once($_root."<path>") : 0;
// File //
header("Content-Type: ".$_path[2]);
require_once($_root."/sys".$_uri);

?>

问题是,当我通过大门传递字体文件时,该字体文件包含文本 <? PHP 解析并返回错误。

有没有办法转义字体文件,使 PHP 不解析它?

最佳答案

您只能require可由 PHP 解释的文件。如果您想通过脚本提供其他类型的文件,则必须通过读取它们来输出它们。

类似于:

$file = 'myfontfile.ttf';

if (file_exists($file)) {
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: inline; filename="'.basename($file).'"');
    header('Content-Length: ' . filesize($file));
    readfile($file);
    exit;
}

关于php - 通过PHP传递字体文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32810524/

相关文章:

php - jQuery Ajax 请求未到达 PHP 脚本

php - 如何修复不平衡的 thead 和 tbody 的表

php - Mime/Base 64 编码

html - 如何更改后备字体的字体大小和样式

.NET PrivateFontCollection - 加载不同样式的字体

php - mysql : Table multiple rows Insert into one sql row

php - 如何使用 Summernote 使用 PHP 防止危险的 HTML 输入?

ios - 自定义字体在 Xcode 中不起作用

c - 在普通 C 中测量字符串大小

.net - 如何在我的 .NET 应用程序中找到用户的字体?