记“百度高精度IP定位API“与PHP的结合

  作者: thtomatic  分类: php笔记   评论: [ 0 ] 条  浏览: [ 2399 ] 次

        



百度把API封了  没用了 !



文章就仅供参考了












昨天逛论坛,发现一个可以使用IP查询准确位置的软件,因无聊、想学习的欲望太强,自己也申请了一个百度开放应用的ak码(申请地址:http://lbsyun.baidu.com/apiconsole/key),看了看他的文档,晓得了他是返回JSON格式,因为刚开始系统的学习PHP所以,对于怎么将网页内容定义为变量,让我查资料了半个小时,最后发现原来PHP有一个函数是可以直接打开的......这个函数就是“fopen”(文章的最下面会介绍这个函数)。得到了变量,下来就是将Json转为数组了,又是找资料,最后又是发现PHP也有一个函数json_decode(文章末尾也会解释这个函数),最后再用数组的形式进行调用就好了。

本站演示:


查询自己的IP


下面是PHP的代码:


<?php
header('Content-Type:text/html;charset=utf-8'); //设置本页面输出的文字编码为UTF-8
error_reporting(0); //出现错误禁止报错(如果是调试时期请注释掉这行代码,上线之后可以打开注释)
$ip=$_POST['ip'];//结合表单提交获取用户输入的IP地址。
$handle = fopen("这里是API接口地址(我就步放上来了)","rb");//打开接口地址并用制度方式强制转换为二进制
$content = "";//先定义一个空变量来接收转化的json
while (!feof($handle)) { //while语句:如果返回的值不为true则继续,feof的意思为测试文件指针是否到了文件结束的位置
    $content .= fread($handle, 10000);//使用二进制读取获取到的文件
}
fclose($handle);//关闭这个文件

$content = json_decode($content,true);//强制将json格式转化为数组模式

/*echo "<pre>";
print_r($content);                //这里是测试输出$content源码
echo "<pre>";
Array
(
    [content] => Array
        (
            [location] => Array
                (
                    [lat] => 36.358829
                    [lng] => 117.833588
                )

            [locid] => 643508d5de58bfba521bced697d8d692
            [radius] => 982619
            [confidence] => 0.2
            [address_component] => Array
                (
                    [country] => 中国                                    //这里是输出的数组,可以用来参考
                    [province] => 山东省
                    [city] => 莱芜市
                    [district] => 莱城区
                    [street] => G205(山深线)
                    [street_number] => 
                    [admin_area_code] => 371202
                )

            [formatted_address] => 山东省莱芜市莱城区G205(山深线)
        )

    [result] => Array
        (
            [error] => 161
            [loc_time] => 2016-10-01 16:37:00
        )

)*/

//因为本人foreach学的不怎么好,为了赶时间(本人有病,今天给自己定的事不弄完我睡不着),我直接用键值获取


echo "查询IP的地址是:".$content['content']['formatted_address'];
echo "<br>";
echo "<br>";
echo "当前查询时间为:".$content['result']['loc_time'];


本次用到的函数介绍:

fopen打开文件或者 URL

fopen()filename指定的名字资源绑定到一个流上。如果 filename是 "scheme://..." 的格式,则被当成一个 URL,PHP 将搜索协议处理器(也被称为封装协议)来处理此模式。如果该协议尚未注册封装协议,PHP 将发出一条消息来帮助检查脚本中潜在的问题并将 filename当成一个普通的文件名继续执行下去。

格式:resource fopen ( string $filename , string $mode [, bool $use_include_path [, resource $zcontext ]] )

参数:

fopen()mode 的可能值列表
mode 说明
'r' 只读方式打开,将文件指针指向文件头。
'r+' 读写方式打开,将文件指针指向文件头。
'w' 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
'w+' 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
'a' 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
'a+' 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
'x' 创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。这和给 底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。
'x+' 创建并以读写方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。这和给 底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。

Note:

不同的操作系统家族具有不同的行结束习惯。当写入一个文本文件并想插入一个新行时,需要使用符合操作系统的行结束符号。基于 Unix 的系统使用 \n作为行结束字符,基于 Windows 的系统使用 \r\n作为行结束字符,基于 Macintosh 的系统使用 \r作为行结束字符。

如果写入文件时使用了错误的行结束符号,则其它应用程序打开这些文件时可能会表现得很怪异。

Windows 下提供了一个文本转换标记('t')可以透明地将 \n 转换为 \r\n。与此对应还可以使用 'b' 来强制使用二进制模式,这样就不会转换数据。要使用这些标记,要么用 'b' 或者用 't' 作为 mode 参数的最后一个字符。

默认的转换模式依赖于 SAPI 和所使用的 PHP 版本,因此为了便于移植鼓励总是指定恰当的标记。如果是操作纯文本文件并在脚本中使用了 \n 作为行结束符,但还要期望这些文件可以被其它应用程序例如 Notepad 读取,则在 mode 中使用 't'。在所有其它情况下使用 'b'

在操作二进制文件时如果没有指定 'b'标记,可能会碰到一些奇怪的问题,包括坏掉的图片文件以及关于 \r\n 字符的奇怪问题。

Note:

为移植性考虑,强烈建议在用 fopen()打开文件时总是使用 'b' 标记。

Note:

再一次,为移植性考虑,强烈建议你重写那些依赖于 't' 模式的代码使其使用正确的行结束符并改成 'b' 模式。

feof测试文件指针是否到了文件结束的位置


如果文件指针到了 EOF 或者出错时则返回 TRUE,否则返回一个错误(包括 socket 超时),其它情况则返回 FALSE

格式:bool feof ( resource $handle )

fread读取文件(可安全用于二进制文件)

fread() 从文件指针 handle 读取最多 length 个字节。该函数在读取完最多 length 个字节数,或到达 EOF 的时候,或(对于网络流)当一个包可用时,或(在打开用户空间流之后)已读取了 8192 个字节时就会停止读取文件,视乎先碰到哪种情况。

返回所读取的字符串,如果出错返回 FALSE



格式:string fread ( int $handle , int $length )


fclose关闭一个已打开的文件指针

格式:bool fclose ( resource $handle )


handle 指向的文件关闭。

成功时返回 TRUE, 或者在失败时返回 FALSE.

文件指针必须有效,并且是通过 fopen()fsockopen() 成功打开的。

json_decode对 JSON 格式的字符串进行编码


json_decode对 JSON 格式的字符串进行编码

格式:mixed json_decode ( string $json [, bool $assoc ] )

接受一个 JSON 格式的字符串并且把它转换为 PHP 变量


参数

json

待解码的 json string 格式的字符串。

assoc

当该参数为 TRUE 时,将返回 array 而非 object


版权所有:《thtomatic》 => 《记“百度高精度IP定位API“与PHP的结合
本文地址:https://ask.mykeji.net/phpnotes/high-acc-ip.html
除非注明,文章均为 《简单记录》 原创,欢迎转载!转载请注明本文地址,谢谢。


发表评论:

    38.58ms