从php脚本内联提供Webfont(.woff)会产生OTS分析错误

时间:2018-10-28 09:11:16

标签: php webfonts

目标

直接从内联php脚本中提供webfont(woff)。


代码

<?php
ob_start(); ?>
0001 0000 000b 0080 0003 0030 4f53 2f32
....
0f12 0b9e 0000 00bc 0000 0060 636d 6170
$font_test_woff = ob_get_clean();

header("Content-type: application/font-woff", true);
header('Content-Disposition: attachment; filename="font_test.woff"');
echo $font_test_woff;
?>

“ ....”表示还有更多的二进制代码。但这对于这篇文章来说就足够了。


错误

提供字体会产生

OTS解析错误:Chrome浏览器中的版本标记无效


解决方法

通过file_get_contents()提供字体。

<?php
$font_test_woff = file_get_contents("path_to_woff.woff.php");

header("Content-type: application/font-woff", true);
header('Content-Disposition: attachment; filename="font_test.woff"');
echo $font_test_woff;
?>

这不会产生任何错误,并且可以正常工作


为什么它通过file_get_contents而不是通过内联服务来工作?我是否需要更改某些标题类型?

1 个答案:

答案 0 :(得分:0)

当文件无效(例如,文件名无效)时,可能会引发OTS parsing error: invalid version tag错误。当PHP转储并出错时,您将它作为字体流式传输到浏览器。或者当您的代码引入其他字节时(例如,第一个?>之后的换行符和二进制数据的开头)。

您可以尝试在浏览器的开发工具的网络面板中检查HTTP请求,并查看该请求是否确实包含字体或其他内容。