LookingGlass 是一个非常好的在线测试工具,部署之后可以测试 ping、mtr、traceroute 等信息。前几天把一台部署了 LookingGlass 的 VPS 升级到了 PHP 7.3,升级之后也没注意,不过刚刚想到上去测试了一下,发现居然不能用,这就很奇怪。于是简单排查了一下问题,还好快速定位到了问题所在,就在此记录一下解决方法。这次错误主要是“PHP Fatal error: Uncaught Error: Function name must be a string in Ajax.php”这个错误,是由于 PHP 版本之间语法不兼容导致的。
一、LookingGlass 无法运行的可能原因
如果我们首次安装之后无法运行,或者是在 PHP5 版本上面运行不了,建议先参考下面这篇文章进行排查问题:《解决 LookingGlass 在 Ubuntu 16.04 LTS 上无法使用的问题》。
一般来说都是因为 proc_open
这个函数被禁用导致的,我们只需参考上面的文章将这个函数启用就可以了。
二、LookingGlass 适配 PHP7 以上版本
此外,对于 PHP7 版本,打开调试模式之后,我们可以看到下面的报错信息:
PHP Fatal error: Uncaught Error: Function name must be a string in Ajax.php
这是因为对于 PHP7,写法不一样了,需要对 ajax.php 文件进行修改。
在 LookingGlass 根目录找到 ajax.php 文件,打开后,找到第 44 行:
$output = $lg->$_GET['cmd']($_GET['host']);
替换成:
$output = $lg->{$_GET['cmd']}($_GET['host']);
保存之后,就可以正常使用了。
关于这个问题,其实已经有两个 PR(参考 1,参考 2),但是 LookingGlass 项目作者一直没有合并,不知道为什么。