惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

有赞技术团队
有赞技术团队
Martin Fowler
Martin Fowler
N
Netflix TechBlog - Medium
WordPress大学
WordPress大学
罗磊的独立博客
H
Help Net Security
MongoDB | Blog
MongoDB | Blog
A
About on SuperTechFans
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
D
Docker
云风的 BLOG
云风的 BLOG
Microsoft Security Blog
Microsoft Security Blog
Blog — PlanetScale
Blog — PlanetScale
P
Proofpoint News Feed
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
I
InfoQ
J
Java Code Geeks
博客园 - 聂微东
大猫的无限游戏
大猫的无限游戏
Engineering at Meta
Engineering at Meta
美团技术团队
小众软件
小众软件
Stack Overflow Blog
Stack Overflow Blog
C
Check Point Blog

博客园 - 赵瑛

如何把一个js的代码变成一个.min.js的文件 thinkphp8有一个木马文件链接 thinkphp 可以居中的分页css样式 php将内容转为word vue点击复制 vue简单分页 vue无限加载 mpdf增加字体并进行使用 jquery导出word css清除浮动最好的方法 Elasticsearch同时实现and与or查询 Elasticsearch查询指定字段是否有重复数据 查询并删除Elasticsearch库中指定字段重复的数据 elasticsearch进行and,or多条件组合查询 elasticsearch中的and和or php FTP操作类( 拷贝、移动、删除文件/创建目录 ) mysql重置自增id js 双指放大、拖动图片 php操作elasticsearch数据库的方法
thinkphp8无法显示验证码的原因之一
赵瑛 · 2025-07-29 · via 博客园 - 赵瑛

安装了thinkphp8后,在使用验证码时,死活不显示,字体换了几个,路径也正确,就是不显示。

最后,终于发现一个问题,那就是获取的路径的编码有问题,通过转码后,最终验证码显示出来了

给有同样问题的友友们一个经验,碰到不显示的,也可以用我的方法试试

$fontttf = $_SERVER['DOCUMENT_ROOT'].'/static/fonts/zkcryyt.ttf';
// 转为 GBK(Windows)
$fontGbk = iconv('UTF-8', 'GBK//IGNORE', $fontttf);
if (@file_exists($fontGbk) && @is_readable($fontGbk)) {
     $fontttf = $fontGbk;
} else {
     $fontttf = realpath($fontttf);
     if (!$fontttf) {
         $fontttf = $fontttf;
     }
}

 将上面的添加到\vendor\topthink\think-captcha\src\Captcha.php中的215行,并注释掉下面的代码

        // 验证码使用随机字体
//        $ttfPath = __DIR__ . '/../assets/' . ($this->useZh ? 'zhttfs' : 'ttfs') . '/';
//
//        if (empty($this->fontttf)) {
//            $dir  = dir($ttfPath);
//            $ttfs = [];
//            while (false !== ($file = $dir->read())) {
//                if (substr($file, -4) === '.ttf' || substr($file, -4) === '.otf') {
//                    $ttfs[] = $file;
//                }
//            }
//            $dir->close();
//            $this->fontttf = $ttfs[array_rand($ttfs)];
//        }
//
//        $fontttf = $ttfPath . $this->fontttf;

 最后要注意一下你字体的路径即可。