阿里云函数计算php7.2无法加载字体文件等资源文件的解决办法

简介:

最近团队准备更多将服务放在serverless上,然后上周跟小伙伴一起体验了阿里云的函数计算(第一个项目基于TP5),初步感觉还不错,轻轻松松并发几百上千,免运维无烦劳杜绝半夜电话催人重启服务器(开玩笑的 - -)。

不过有一点小小的不舒服,登录后台后发现字体文件无法加载,woff ttf等全部报502,小伙伴电话跟阿里云沟通被告知不支持(我是有点懵逼的,0202年了字体为何不能支持),无果暂时不管这个。

又过了几天想起这事,专门研究了下,尝试了2个小时,总结出了2个结论

  • 加载.woff .ttf后缀的文件会异常
  • 加载字体数据会异常(没错,就算把字体后缀改为其他的也会异常)

配置过的应该都知道函数计算有一个index.php入口文件,里面包含php_run和static_run 2个处理方法,而上面的第一个问题,会导致根本无法加载handler,第二个问题会导致static_run读取文件fopen打开的时候出错。

虽然感觉这样的设定很奇怪,但是找到了办法就好办了,针对第一个问题,改名即可 于是我改成了

font.woff >> font.woff.svg

这样就能进入static_run里面了。
然后针对第二个问题,将字体文件进行编码或加密,我这里直接用的hex转码,用其他的编码应该也是可以的

$fontData = file_get_contents("font.woff.svg");
file_put_contents("font.woff.hexencode.svg", bin2hex($fontData));

然后index的static_run需要针对字体文件做一些特殊处理

    $contentType = $GLOBALS['fcPhpCgiProxy']->getMimeType($file_dir);
    if (stripos($uri, '.hexencode.') !== false) {
        // 如果包含hexencode就转码一下
        $contents = hex2bin($contents);
        if (stripos($uri, '.woff') !== false) {
            $contentType = 'application/font-woff';
        } else {
            $contentType = 'application/octet-stream';
        }
    }

最后一步,还需要修改其他文件中的引用地址为新地址 font.woff.hexencode.svg

再次部署,终于看到了绿色的可爱的200状态,字体也正常显示。

不过这始终只是一个临时解决方案,而且这样改了之后,本地开发调试也需要特殊处理下。所以还是希望阿里云尽快支持下字体加载,字体文件跟js css jpg等资源文件并没有本质的不同,不清楚为何要留这么大个坑在这里,大家如果有更好的方法,欢迎指教下。

原文链接 https://www.jianshu.com/p/d1ca14038bda

相关实践学习
【玩转ComfyUI】基于函数计算一键部署AI生图平台ComfyUI
本次实验将带大家通过使用阿里云产品函数计算FC,快速使用ComfyUI实现更高质量的图像生成。
从 0 入门函数计算
在函数计算的架构中,开发者只需要编写业务代码,并监控业务运行情况就可以了。这将开发者从繁重的运维工作中解放出来,将精力投入到更有意义的开发任务上。
相关文章
php常见问题,php.ini文件不存在或者找不到,mb_strlen()函数未定义系列问题,dll模块找不到的解决
本文介绍了解决PHP常见问题的步骤,包括定位和创建`php.ini`文件,以及解决`mb_strlen()`函数未定义和DLL模块加载错误的具体方法。
php常见问题,php.ini文件不存在或者找不到,mb_strlen()函数未定义系列问题,dll模块找不到的解决
|
JavaScript Serverless 数据安全/隐私保护
函数计算产品使用问题之怎么动态设置.npmrc文件以配置私有仓库访问
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
前端开发 PHP
php学习笔记-php文件表单上传-day06
本文介绍了PHP文件上传处理流程、预定义变量`$_FILES`的使用、文件上传状态代码以及文件上传实现函数。同时,通过一个文件上传的小例子,演示了文件上传表单的创建、文件上传表单处理的PHP页面编写以及运行测试输出。
php学习笔记-php文件表单上传-day06
|
消息中间件 弹性计算 关系型数据库
体验函数计算:高效处理多媒体文件的真实感受与实战总结
该方案在引导和文档方面做得较为详尽,仅在事件驱动机制部分略显简略。部署和代码示例实用,但需注意内存配置以避免超时。使用体验方面,函数计算表现出色,尤其在高并发场景下,显著提升了应用稳定性和成本效益。云产品如OSS、MNS等与函数计算配合流畅,ECS和RDS表现稳健。总体而言,这套方案弹性好、成本低,特别适合应对高并发或流量不确定的场景,值得推荐。
268 26
|
缓存 监控 算法
分析慢日志文件来优化 PHP 脚本的性能
分析慢日志文件来优化 PHP 脚本的性能
|
存储 安全 数据库连接
php.ini 文件的用途是什么?
【8月更文挑战第29天】
414 1
|
缓存 PHP C语言
宝塔PHP8.1安装fileinfo拓展失败解决办法
在宝塔面板安装PHP8.1后,fileinfo扩展安装失败,手动尝试也报错。通过分析错误信息,在Makefile中修改CFLAGS添加`-std=c99`,并执行`make clean`清除缓存后,重新编译安装成功。最后在php.ini中启用fileinfo扩展并重启PHP服务。注意需调整CFLAGS为`-std=c99 -g`,去掉`-O2`。
2257 0
进入靶场,出现一张照片,右击查看源代码,发现有一个注释的source.php文件
这段代码实现了一个网站上弹出的促销海报动画效果,包含一个关闭按钮。当促销海报弹出时,会在三秒后开始抖动一两下。海报使用固定定位居中显示,带有阴影和圆角,关闭按钮位于右上角。可以通过修改时间参数调整弹出时间。
210 0
|
10月前
|
人工智能 运维 Kubernetes
Serverless 应用引擎 SAE:为传统应用托底,为 AI 创新加速
在容器技术持续演进与 AI 全面爆发的当下,企业既要稳健托管传统业务,又要高效落地 AI 创新,如何在复杂的基础设施与频繁的版本变化中保持敏捷、稳定与低成本,成了所有技术团队的共同挑战。阿里云 Serverless 应用引擎(SAE)正是为应对这一时代挑战而生的破局者,SAE 以“免运维、强稳定、极致降本”为核心,通过一站式的应用级托管能力,同时支撑传统应用与 AI 应用,让企业把更多精力投入到业务创新。
925 30
|
11月前
|
存储 人工智能 Serverless
函数计算进化之路:AI 应用运行时的状态剖析
AI应用正从“请求-响应”迈向“对话式智能体”,推动Serverless架构向“会话原生”演进。阿里云函数计算引领云上 AI 应用 Serverless 运行时技术创新,实现性能、隔离与成本平衡,开启Serverless AI新范式。
978 12

热门文章

最新文章