PHP根据IP地址判断城市实现城市切换或跳转代码
获取IP地址
代码如下 | 复制代码 |
<?php |
方法二
代码如下 | 复制代码 |
function getip () { if (getenv('http_client_ip')) { $ip = getenv('http_client_ip'); } else if (getenv('http_x_forwarded_for')) { $ip = getenv('http_x_forwarded_for'); } else if (getenv('remote_addr')) { $ip = getenv('remote_addr'); } else { $ip = $_server['remote_addr']; } return $ip; |
更多详细内容请查看:http://www.111cn.net/phper/php/33938.htm
PHP通过IP地址判断用户所在城市
上文已经获得了用户IP地址,接下来,我们就是根据这个IP地址获得用户所在城市了。开始之前,我们需要下载一个现成的数据库QQ IP数据库。
最新IP地址数据库:http://8.zjdx2.crsky.com/201209/qqwry0830.rar
使用方法:解压后QQWry.Dat就是我们想要IP地址数据库,我们新建一个ipcity文件夹,将数据库放在下面。QQ IP数据库使用非常方便,数据也很齐全,你可以及时关注官方更新以保持数据最新,强力推荐一下:)
接下来,我们在上面的ipcity目录下新建一个ipaddress.php文件,直接复制以下代码进去即可,重要的地方也作了相应注释。B段:
代码如下 | 复制代码 |
<? //判断IP地址是否有效 //打开IP数据库 //explode函数分解IP地址,运算得出整数形结果 //获取IP地址索引开始和结束位置 $BeginNum = 0; //使用二分查找法从索引记录中搜索匹配的IP地址记录 //偏移指针到索引位置读取4个字节 //提取的长整型数大于我们IP地址则修改结束位置进行下一次循环 //取完上一个索引后取下一个索引 //找不到IP地址对应城市 $useripFlag = fread($fd, 1); if($useripFlag == chr(2)) { while(($char = fread($fd, 1)) != chr(0)) $AddrSeek = implode('', unpack('L', $AddrSeek.chr(0))); while(($char = fread($fd, 1)) != chr(0)) $useripFlag = fread($fd, 1); //返回IP地址对应的城市结果 return $useripaddr; |
PHP根据IP地址实现城市切换或跳转
到这里,其实问题已经很简单了,用简单的js就通通搞定。C段如下:
//根据IP地址跳转指定页面js取得城市
代码如下 | 复制代码 |
var city='<?echo ipCity($xp_UserIp);?>'; |
//根据IP地址所有城市跳转到指定页面
代码如下 | 复制代码 |
if(city.indexOf("上海市")>=0){ |
将开头的A段代码和上面的C段代码分别放在B段代码的头和尾,然后我们在需要跳转的页面加入以下代码:
代码如下 | 复制代码 |
<script src="/ipcity/ipaddress.php" type="text/javascript" language="javascript"></script> |
刷新页面,是不是达到预想的效果了呢?
上面的代码只是简单的判断了ip那里就跳到那,如果出现如,我想把湖南所有IP都跳到长沙去,那像衡阳,刘阳,耒阳 这些就要作多次父线处理了,要想知道请看下集。
linux中解析.htpasswd文件的PHP类有需要的朋友可参考一下。介绍一个
使用方法
$
代码如下 | 复制代码 |
passwdHandler = new Htpasswd('/home/myuser/.htpasswd'); // Add a user with name 'user1' and password 'I prefer to use passphrase rather than password.' if it doesn't exist in .htpasswd. $passwdHandler -> addUser('user1', 'I prefer to use passphrase rather than password.'); // Delete the user 'user1' if it exists in .htpasswd. $passwdHandler -> deleteUser('user1'); // Check if user 'user1' exists in .htpasswd. if ($passwdHandler -> doesUserExist('user1')) { // User 'user1' exists. } |
htpasswd类
代码如下 | 复制代码 |
class Htpasswd { |
表格展示无限级分类(PHP版)
TreeTable是一个能把无限分类展现为表格形式的PHP类库插件,分类的层级表示为表格的列,分类的行数表格分类的总数。单元格显示分类名称。
TreeTable通过对单元格的行合并和列合并实现了无限层级也能较好的展示层级架构。
1.构建ID/PID/NAME的数组,后期可通过数据库生成的动态数据。Tree算法请点击
代码如下 | 复制代码 |
?array( * 1 => array('id'=>'1','parentid'=>0,'name'=>'一级栏目一'), * 2 => array('id'=>'2','parentid'=>0,'name'=>'一级栏目二'), * 3 => array('id'=>'3','parentid'=>1,'name'=>'二级栏目一'), * 4 => array('id'=>'4','parentid'=>1,'name'=>'二级栏目二'), * 5 => array('id'=>'5','parentid'=>2,'name'=>'二级栏目三'), * 6 => array('id'=>'6','parentid'=>3,'name'=>'三级栏目一'), * 7 => array('id'=>'7','parentid'=>3,'name'=>'三级栏目二') * ) |
2. 导入TreeTable类库。
代码如下 | 复制代码 |
import('@.ORG.Util.TableTree'); //Thinkphp导入方法3. 生成TreeTable HTML代码 $treeTable->init($treearr); |
注意:get_treetable()只生产表体部门,<TALBE></TABLE>请自行构建。
完整代码
代码如下 | 复制代码 |
/** class TreeTable { /** /** /** |
因此,需要做好对mysql的查询优化。下面通过一个简单的例子,展现不同的SQL语句对于查询速度的影响:
存在这样的一张表test,它有一个自增的id作为主索引。现在要查询id号处于某一个范围内的记录,可以使用如下SQL语句:
代码如下 | 复制代码 |
SELECT * FROM `test` order by id asc limit 208888,50 |
这条SQL语句的意思是从id号为208888的记录开始向后取50条记录。在一个30万条记录的数据库中测试,在主索引都已经建立好的情况下,执行这条语句的时间为40~50秒。
那么有没有更快SQL语句来执行呢?显然是有的。看看下面这条SQL语句:
代码如下 | 复制代码 |
SELECT * FROM `test` WHERE id BETWEEN 208838 AND 208888 |
这条语句使用了一个条件进行过滤,在实际中测试的执行时间约为0.06秒。
究其原因,是因为虽然id属性上已经有索引了,但是排序仍然是一个非常高代价的操作,要慎用。而第二个语句,就可以让MySql充分利用数据库中已经建立好的B+树索引,所以查找起来速度相当快,是原来的几百倍。
由此可见,网站开发者在使用SQL语句的时候,一定要小心谨慎,因为一个疏忽大意的SQL语句,可能使得你的网站访问速度急剧下降,后台数据库面临巨大压力,并且很快陷入无法打开页面的窘境
一般情况下我们出现大量数据传输理希望减少服务器的带宽压力,会采取一种方式来压缩文件传输,php中用zlib也可以实现gzip压缩输出,下面我们来看GZIP压缩输出各种方法总结.GZIP(GNU-ZIP)是一种压缩技术。经过GZIP压缩后页面大小可以变为原来的30%甚至更小。这样用户浏览的时候就会感觉很爽很愉快!
准备工作
1、找不到php_zlib.dll文件?
自php4.3开始zlib压缩就已经内置在php中了,所以至少Windows环境下是不需要安装zlib的。
2、安装搭建php运行环境
由于光通过php.ini配置文件开启gzip配置实现php gzip压缩输出是不行的的,其需要apache的支持,所以建议安装搭建php+apache+mysql运行环境。
php gzip配置步骤
一、打开php.ini配置文件,找到zlib.output_compression = Off,将
zlib.output_compression = Off
;zlib.output_compression_level = -1
修改为
zlib.output_compression = On
zlib.output_compression_level = 6
实例1
PHP使用zlib扩展实现页面GZIP压缩输出
代码
代码如下 | 复制代码 |
function ob_gzip($content) // $content 就是要压缩的页面内容 { if(!headers_sent() && extension_loaded("zlib") && strstr($_SERVER["HTTP_ACCEPT_ENCODING"],"gzip"))//判断页面头部信息是否输出,PHP中zlib扩展是否已经加载,浏览器是否支持GZIP技术 |
函数写好后,就用ob_start调用它,于是原来的ob_start()变成
ob_start('ob_gzip'); //给ob_start()加一个参数,参数名就是刚才的函数名。这样当内容进入缓冲区后PHP就会调用ob_gzip函数把它压缩了。
最后结束缓冲区
ob_end_flush(); //结束缓冲区,输出内容。当然,不用这个函数也行,因为程序执行到最后会自动将缓冲区内容输出。
最终完整的实例
代码如下 | 复制代码 |
<?php function ob_gzip($content) |
实例2
zlib压缩和解压缩swf文件的代码
文件的例子:
代码如下 | 复制代码 |
//没有加入判断swf文件是否已经压缩,入需要可以根据文件的第一个字节是'F'或者'C'来判断 压缩swf文件: //-------------------------------------------------------------------------------------------------- //文件名 $filename = "test.swf"; //打开文件 $rs = fopen($filename,"r"); //读取文件的数据 $str = fread($rs,filesize($filename)); //设置swf头文件 $head = substr($str,1,8); $head = "C".$head; //获取swf文件内容 $body = substr($str,8); //压缩文件内容,使用最高压缩级别9 $body = gzcompress($body, 9); //合并文件头和内容 $str = $head.$body; //关闭读取的文件流 fclose($rs); //创建一个新的文件 $ws = fopen("create.swf","w"); //写文件 fwrite($ws,$str); //关闭文件留 fclose($ws); //---------------------------------------------------------------------------------------------------- ?> 解压缩swf文件: //---------------------------------------------------------------------------------------------------- //文件名 $filename = "test.swf"; //打开文件 $rs = fopen($filename,"r"); //读取文件的数据 $str = fread($rs,filesize($filename)); //设置swf头文件 $head = substr($str,1,8); $head = "F".$head; //获取swf文件内容 $body = substr($str,8); //解压缩文件内容 $body = gzuncompress($body); //合并文件头和内容 $str = $head.$body; //关闭读取的文件流 fclose($rs); //创建一个新的文件 $ws = fopen("create.swf","w"); //写文件 fwrite($ws,$str); //关闭文件留 fclose($ws); //---------------------------------------------------------------------------------------------------- ?> |
实例3
开启php zlib(gzip)压缩输出
php gzip配置知识点:
1、默认php是不开启zlib整站压缩输出的,而是通过对需要压缩输出的页面使用ob_gzhandler函数实现,两者只能二选一,否则会报错。
2、zlib.output_compression默认值为Off,你可以将其设置为On,或者output buffer size(默认为4k)
3、zlib.output_compression_level代表压缩比,默认推荐设置压缩比值为6,可选范围为1-9,-1代表关闭php zlib(gzip)压缩
二、保存php.ini配置文件,并重启apache服务器
三、打开apache 配置文件httpd.conf,配置装载deflate_module
这一步是最关键的开启php gzip压缩输出配置步骤,很多网友会说我已经开启了php.ini配置文件中的php gzip配置怎么还是没有实现php gzip压缩,就是因为没有让apache装载deflate_module,方法如下,将
代码如下 | 复制代码 |
#LoadModule deflate_module modules/mod_deflate.so |
去除开头的#号,并重启apache即可。
相关文章
- 有一种方法,可以不打开网站而直接查看到这个网站的源代码.. 这样可以有效地防止误入恶意网站... 在浏览器地址栏输入: view-source:http://...2016-09-20
- <?php require('path.inc.php'); header('content-Type: text/html; charset=utf-8'); $borough_id = intval($_GET['id']); if(!$borough_id){ echo ' ...2016-11-25
- 本文实例讲述了JS+CSS实现分类动态选择及移动功能效果代码。分享给大家供大家参考,具体如下:这是一个类似选项卡功能的选择插件,与普通的TAb区别是加入了动画效果,多用于商品类网站,用作商品分类功能,不过其它网站也可以用,...2015-10-21
- 本文实例讲述了JS实现自定义简单网页软键盘效果。分享给大家供大家参考,具体如下:这是一款自定义的简单点的网页软键盘,没有使用任何控件,仅是为了练习JavaScript编写水平,安全性方面没有过多考虑,有顾虑的可以不用,目的是学...2015-11-08
- 本文实例讲述了JS基于Mootools实现的个性菜单效果代码。分享给大家供大家参考,具体如下:这里演示基于Mootools做的带动画的垂直型菜单,是一个初学者写的,用来学习Mootools的使用有帮助,下载时请注意要将外部引用的mootools...2015-10-23
- php 取除连续空格与换行代码,这些我们都用到str_replace与正则函数 第一种: $content=str_replace("n","",$content); echo $content; 第二种: $content=preg_replac...2016-11-25
- php简单用户登陆程序代码 这些教程很对初学者来讲是很有用的哦,这款就下面这一点点代码了哦。 <center> <p> </p> <p> </p> <form name="form1...2016-11-25
- 公司一些wordpress网站由于下载的插件存在恶意代码,导致整个服务器所有网站PHP文件都存在恶意代码,就写了个简单的脚本清除。恶意代码示例...2015-10-23
- 其实挺简单的就是if(navigator.userAgent.indexOf('UCBrowser') > -1) {alert("uc浏览器");}else{//不是uc浏览器执行的操作}如果想测试某个浏览器的特征可以通过如下方法获取JS获取浏览器信息 浏览器代码名称:navigator...2015-11-08
- 本文实例讲述了JS实现双击屏幕滚动效果代码。分享给大家供大家参考,具体如下:这里演示双击滚屏效果代码的实现方法,不知道有觉得有用处的没,现在网上还有很多还在用这个特效的呢,代码分享给大家吧。运行效果截图如下:在线演...2015-10-30
- 一、日期减去天数等于第二个日期function cc(dd,dadd){//可以加上错误处理var a = new Date(dd)a = a.valueOf()a = a - dadd * 24 * 60 * 60 * 1000a = new Date(a)alert(a.getFullYear() + "年" + (a.getMonth() +...2015-11-08
- 微信支付,即便交了保证金,你还是处理测试阶段,不能正式发布。必须到你通过程序测试提交订单、发货通知等数据到微信的系统中,才能申请发布。然后,因为在微信中是通过JS方式调用API,必须在微信后台设置支付授权目录,而且要到...2014-05-31
- 本文实例讲述了PHP常用的小程序代码段。分享给大家供大家参考,具体如下:1.计算两个时间的相差几天$startdate=strtotime("2009-12-09");$enddate=strtotime("2009-12-05");上面的php时间日期函数strtotime已经把字符串...2015-11-24
- 小编分享了一段简单的php中文转拼音的实现代码,代码简单易懂,适合初学php的同学参考学习。 代码如下 复制代码 <?phpfunction Pinyin($_String...2017-07-06
php导出csv格式数据并将数字转换成文本的思路以及代码分享
php导出csv格式数据实现:先定义一个字符串 存储内容,例如 $exportdata = '规则111,规则222,审222,规222,服2222,规则1,规则2,规则3,匹配字符,设置时间,有效期'."/n";然后对需要保存csv的数组进行foreach循环,例如复制代...2014-06-07- ecshop商品无限级分类代码 function cat_options($spec_cat_id, $arr) { static $cat_options = array(); if (isset($cat_options[$spec_cat_id]))...2016-11-25
- 本文介绍了如何延迟javascript代码的加载,加快网页的访问速度。 当一个网站有很多js代码要加载,js代码放置的位置在一定程度上将会影像网页的加载速度,为了让我们的网页加载速度更快,本文总结了一下几个注意点...2013-10-13
- 这篇文章主要介绍了IDEA插件之快速删除Java代码中的注释,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-02-18
- 这篇文章主要介绍了C#超实用代码段合集,涉及C#针对图标、数学运算、拼音、日期、时间及文件夹等的相关操作技巧,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了vue项目,代码提交至码云,iconfont的用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-30