一、事件背景 (可以直接跳到2.4看总结)
最近在搭建测速网站, 网上找到所有的教程都可以正常搭建完成,可以正常测速。但是无法分享(不生成历史记录)。测速结果如下
二、解决过程
2.1.前期折腾
2.1.1.修改html代码
刚开始以为是我在网上随便下载的版本不对,后面直接在github上直接下载的压缩包,本地解压后上传到服务器,然后按照教程部署也是能正常测速,无法存储历史记录,结束页面没有分享界面,我强行修改index.html的代码,直接显示share模块,显示出testid 一直是空。没有找到原因,因为本身对html和linux 就是一知半解,就东一榔头西一棒槌的瞎弄,弄出问题了就重装, 折腾了无数次,还是没弄好。
2.1.2.寻找example-singleServer-full.html
后面开始看github项目本身的教程,看到他的视频部署(和我网上找的教程流程一致),其中有一步是把example-singleServer-full.html 复制为index.html。 我找遍我下载的压缩包中都没有找到这个网页文件,我以为我找到问题了,开始满网搜索example-singleServer-full.html,但是无论从哪里下载的安装包里都没有这个文件了,我记得我几年前下载的版本里是有这个的,后面不知怎么在github的某一个页面中找到了这个example-singleServer-full.html文件,我直接复制代码粘贴替换到我的index.html中,满怀期待打开,测速,问题依旧。
2.1.3.修改speedtest_work.js
后面用F12看到每次测速都要加载这个js,而且这个js 中有定义testid,因为这个testid是历史记录查询编码,所以我怀疑是因为这个编码没有所以导致分享没出来。
找到文件中telemetry_level 直接设置成3 (debug )再次测速还是没有历史记录,设置成2 (full)再次测试,还是没有历史记录。
后面抓着这个文件折腾了很多遍,一直修改和testId相关的数据。都没有成功。
2.2.找到方向
后面就直接搜索libre speedtest无法分享,无法记录,但是没有找到相关的记录。查找过程中看到别人说查询是通过stats.php这个页面,来查询数据库中的数据。然后我就直接打开localhost/results/stats.php 结果打开是错误,反馈错误代码500,此时是我最接近解决的时候,但是我搜500代码之后,得到答案:接口500报错都有哪些问题导致?如何排查?-CSDN博客
1.代码错误(如下)(本次故障原因,但我直接跳过):
语法错误 :代码中的拼写错误、缺少关键结尾等。
逻辑错误:程序逻辑不正确,导致运行时异常。
空指针异常:尝试访问或操作 null 引用。
数组越界异常:尝试访问数组的非法索引。
2.资源问题(参见原文):
3.依赖问题(参见原文):
4.配置错误(参见原文):
5.安全限制(参见原文):
6.资源耗尽(参见原文):
7.并发问题(参见原文):
8.第三方库或框架问题(参见原文):
2.2.1.怀疑劝降问题导致数据库无法访问。
因为我对php代码一点不熟悉,所以直接跳过第一项(又因为github直接下的文件,无任何怀疑文件存在错误的想法),看到有数据库权限问题,我直接删除了原来服务器自带的mariadb改成安装mysql ,再次配置完成,再次测速依然无法记录。
2.2.2.找到关键提示
后面又多次搜索500错误代码带来的问题,依然没有找到我认为合理的解决方法。有一次搜索的时候,不知为啥没有偷懒,搜索的时候带上了php这个关键词,找到了这个指引方向的关键文章
php-浏览器提示该网页无法正常运行-HTTP ERROR 500_php 该网页无法正常运作-CSDN博客
但是我修改完成 用systemctl restart php-fpm的时候提示我不存在php-fpm服务,又不知道该咋办了,后面看到了如下文章:
按照文章中的设置做出如下改变(详细请点击以上连接):
找到 php的配置文件 /etc/php.ini
配置参数值:display_errors = On
重启apache 服务 service httpd restart
我只看到这里,发现原来我只要中期http服务就可以了,后面没来的及看就又回去测试了,然后发现stats.php 反馈代码是200,我认为是已经正常加载了,但是测速页面还是没有分享页。
2.2.3.突发奇想
好像又卡住了,只有这个对了那其他php网页的对不对呢,都看看吧,然后我在result文件夹下一个个看过去突然有一个打开网页上有一行字:unexpected ‘)’ ...... 这不是我之前写C和python经常看到的报错嘛,不是少了一个分号就是多了一个括号。
卧槽,这不就是在这个telemetry_db.php的第61行多了一个)括号嘛,竟然有这样的错误,马上删了他,直接秒杀!!!
信心十足的修改文件,回来测试,卧槽一样的报错,难道是62行的括号上去了又出问题,又卡主了。
2.2.3.锁定问题(我下载的源码版本有问题,是汉化过的不是原版,原版没这个问题)
看了下代码,感觉没有啥问题,两个括号也是一样的又多级一个是isset的括号,一个是if的括号,没啥问题啊。
实在不行就把括号挪到一行,和isset最后的代码一行,再试试,回来一看报错来到了60行,哎,还是有问题,但是哎哎哎,这怎么括号前是个逗号呢,然后往上看看其他括号前不是逗号,应该不是PHP的固有格式,先删除试试。
回来测试,telemetry_db.php 也变成了空白网页,反馈代码是200,成功!!!
继续回来看telemetry.php能不能加载,嗯竟然又报错:
看了下报错内容竟然是一些字段没有定义就引用了。那应该不是故障,应该是前置页面没有运行, 导致没有相关的数据。
测速看看结果:
有了! share results也有了。完美!!!
历史记录可查了。
所以结束了吗?NONONO!还要把ID混淆一下免得别人猜到。
2.3完善配置
2.3.1.修telemetry_setting.php
2024.7.6修改,ture 写错了,改成true。
修改成enable_id_obfuscation=true ,再次测速,下面再次一片空白。又回到最初了。
查看数据库已经混淆成功了 。
今天去github找解决方案,找到了,如下解决方案,大致意思是ID混淆需要64位 php8 以上版本,并确保服务器对results文件夹有写权限
但是我centos 7 安装php8的时候出问题了,只有重装系统,现在重装好了之后我的php8 安装好了,但是我的图片显示不出来了,只有分享连接,链接下的图片不见了。
github 说freetype2没按或者安装不正确。我装了没对。
难受,继续研究下。
芜湖~~~~~ 收工!
本系统自带一个检测网页 results/sanitycheck.php 这个网页打开会提示检测是否通过。
我的是php-gd 忘记安装了,看到这个不是PASS 我就想起来之前找这个安装教程的时候看到过,要安装php,php-mysqlnd php-pdo php-gd 。 结果重装后只记得前3个。后来看这个检测网页的时候才发现没有安装,这个网页每打开一次会向数据库写入一条没有速度和延迟等信息的记录。
2.4 总结
OK,历时好多天的安装终于完成了。
总结下问题:
1.下载原版的,不要别人修改过的,一般官网搜到第一个就是。
2.查看原版的问题文档:idobfuscation 功能需要64位 8.0以上的php
3.查看源码自带的检测手段,判断是否正确安装:results/sanitycheck.php
三、致谢
再次感谢两位大神的文章及时给我指引方向,排名不分先后,只是我查询到的先后顺序。