实现有ip或者用户区域,使用的是淘宝接口,速度非常快,同时API输出跨域问题完美解决。
代码如下:
- <?php
- /**
- * 获取ip 接口
- * @access public 以淘宝的接口为实例
- */
- function get_ip_info($ip) {
- $curl = curl_init(); //这是curl的handle
- //下面是设置curl参数
- $url = "http://ip.taobao.com/service/getIpInfo.php?ip=$ip";
- curl_setopt($curl, CURLOPT_URL, $url);
- curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
- curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 2);
- curl_setopt($curl, CURLOPT_HEADER, 0); //don't show header
- curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //相当关键,这句话是让curl_exec($ch)返回的结果可以进行赋值给其他的变量进行,json的数据操作,如果没有这句话,则curl返回的数据不可以进行人为的去操作(如json_decode等格式操作)
- curl_setopt($curl, CURLOPT_TIMEOUT, 2);
- //这个就是超时时间了
- $data = curl_exec($curl);
- // return json_decode($data, true);
- return $data;
- }
- /**
- * 对内容进行安全处理
- * @param string|array $string 要处理的字符串或者数组
- * @param $string $flags 指定标记
- */
- function dhtmlspecialchars($string, $flags = null) {
- if(is_array($string)) {
- foreach($string as $key => $val) {
- $string[$key] = dhtmlspecialchars($val, $flags);
- }
- } else {
- if($flags === null) {
- $string = str_replace(array('&', '"', '<', '>'), array('&', '"', '<', '>'), $string);
- if(strpos($string, '&#') !== false) {
- $string = preg_replace('/&((#(\d{3,5}|x[a-fA-F0-9]{4}));)/', '&\\1', $string);
- }
- } else {
- if(PHP_VERSION < '5.4.0') {
- $string = htmlspecialchars($string, $flags);
- } else {
- if(strtolower(CHARSET) == 'utf-8') {
- $charset = 'UTF-8';
- } else {
- $charset = 'ISO-8859-1';
- }
- $string = htmlspecialchars($string, $flags, $charset);
- }
- }
- }
- return $string;
- }
- $ip = dhtmlspecialchars($_GET['ip']);
- header("Access-Control-Allow-Origin:*");
- Header("Access-Control-Allow-Credentials: true");
- header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept");
- header('Access-Control-Allow-Methods: GET, POST, PUT');
- echo get_ip_info($ip);
复制代码
|