• 进群密钥:www.lolichan.vip

适用于QRSpeed的ping功能-PHP开源

xiwangly

活捉一只老RBQ
管理成员
2020/02/27
95
72
18
全新的ping API开源了!大大精简了代码提高了效率。点击下载:https://github.com/xiwangly2/xiwangly_ping

我在网上东挪西借才找到了这些函数,测试并修改了整整半天,累......
关于如何使用这个资源请参考QRSpeed-第6课时-第六节-网络词库
PHP:
<?php
header("content-type:text/html;charset=GBK");         //设置编码
/**此源码的文件编码为GB2312
不适用于禁用了一些函数(exec,...等)的主机
两个函数来自互联网,帖子暂时找不到了,反正引用的很杂(东挪西借)
由于是使用系统本身执行的命令,所以会有很多缺陷……
*/
/**
  *@param $ip target ip
  *@param $times ping times
  */

function ping($ip,$times=4)
{
     $info = array();
      if(!is_numeric($times) ||  $times-4<0)
      {
           $times = 4;
      }
      if (PATH_SEPARATOR==':' || DIRECTORY_SEPARATOR=='/')//linux
      {
           exec("ping $ip -c $times",$info);
           if (count($info) < 9)
           {
            $info['error']='timeout';
        }
  }
  else //windows
  {
       exec("ping $ip -n $times",$info);
       if (count($info) < 10)
       {
         $info['error']='timeout';
       }
  }
  return $info;
}
$ip = $_GET["url"];//IP地址
// print_r(ping($ip));
mkdir("./ping/");
file_put_contents("./ping/data.txt",ping($ip));
/**
* fromFile : 转换前的文件
* toFile   : 转换后的文件
* toEncode : 转换后文件的编码
*/
function changeFileEncode($fromFile,$toFile,$toEncode="GB2312"){
    // 变换文件如果不存在,退出
    if(!file_exists($fromFile)) {
        return ;
    }

    // 文件转换
    $data = file_get_contents($fromFile);
    $fromEncode = mb_detect_encoding($data, array('GB2312','GBK','UTF-8'));
    $content = mb_convert_encoding($data, $toEncode, $fromEncode);

    // 输入文件如果存在先删除
    if(file_exists($toFile)){
        unlink($toFile);
    }
    // 写入输出文件
    file_put_contents($toFile, $content);
}
// 单个文件的转换
$fromFile = "./ping/data.txt";
$toFile = "./ping/data.txt";
changeFileEncode($fromFile, $toFile, "UTF-8");
header("content-type:text/html;charset=utf-8");//异编码对于仅支持utf-8编码的访问输出必须(例如QRSpeed词库的访问语句)
$l=file_get_contents("./ping/data.txt");
echo $l;
?>
需要注意的是,这个在大多数虚拟主机上都无法使用,因为主机商为了安全考虑禁用了那些函数(exec,...等)。只能在自己的独立服务器上使用。
Apache需要更改配置文件,以启用这些函数。IIS默认是开启的。宝塔的我就不知道了(多种情况混合)。
由于论坛不允许PHP文件上传,我另外打包了zip文件,在下面可以直接下载使用。

我在编写这个的时候遇到了这些问题以及解决方案:(授人以鱼,不如授之以渔
1.QRSpeed始终使用UTF-8编码访问网站,这会导致绝大多数不支持exec()函数UTF-8输出而导致乱码
解决方案:开头声明GBK编码(GB2312也行,GBK默认就是GB2312),然后写出的文件也是这个编码,如果直接写出文件使用UTF-8编码也会乱码,而是要进行文件转码操作,再进行打开文件输出字符串。
2.直接输出数组导致文本过长未授权QRSpeed发不出去的问题
解决方案:写入文件,然后再写出文件。这样就不会以数组直接输出(39行我特意注释以对比使用)。
3.
...

知识共享许可协议 (CC BY-NC-ND 4.0)
本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。
 

附件

  • ping.zip
    1.1 KB · 查看: 19
最后编辑:

CEO徐

LV1
2020/04/09
22
11
3
武汉
wkkjinc.xyz
老哥啊,宝塔报错line13
Warning: exec() has been disabled for security reasons in /www/wwwroot/weikang.yixuedh.com/ping.php on line 13
time out