全新的ping API开源了!大大精简了代码提高了效率。点击下载:https://github.com/xiwangly2/xiwangly_ping
我在网上东挪西借才找到了这些函数,测试并修改了整整半天,累......
关于如何使用这个资源请参考QRSpeed-第6课时-第六节-网络词库。
需要注意的是,这个在大多数虚拟主机上都无法使用,因为主机商为了安全考虑禁用了那些函数(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 国际许可协议进行许可。
我在网上东挪西借才找到了这些函数,测试并修改了整整半天,累......
关于如何使用这个资源请参考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;
?>
Apache需要更改配置文件,以启用这些函数。IIS默认是开启的。宝塔的我就不知道了(多种情况混合)。
由于论坛不允许PHP文件上传,我另外打包了zip文件,在下面可以直接下载使用。
我在编写这个的时候遇到了这些问题以及解决方案:(授人以鱼,不如授之以渔)
1.QRSpeed始终使用UTF-8编码访问网站,这会导致绝大多数不支持exec()函数UTF-8输出而导致乱码
解决方案:开头声明GBK编码(GB2312也行,GBK默认就是GB2312),然后写出的文件也是这个编码,如果直接写出文件使用UTF-8编码也会乱码,而是要进行文件转码操作,再进行打开文件输出字符串。
2.直接输出数组导致文本过长未授权QRSpeed发不出去的问题
解决方案:写入文件,然后再写出文件。这样就不会以数组直接输出(39行我特意注释以对比使用)。
3.
...

本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。
附件
最后编辑: