目标
直接从内联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而不是通过内联服务来工作?我是否需要更改某些标题类型?
答案 0 :(得分:0)
当文件无效(例如,文件名无效)时,可能会引发OTS parsing error: invalid version tag
错误。当PHP转储并出错时,您将它作为字体流式传输到浏览器。或者当您的代码引入其他字节时(例如,第一个?>
之后的换行符和二进制数据的开头)。
您可以尝试在浏览器的开发工具的网络面板中检查HTTP请求,并查看该请求是否确实包含字体或其他内容。