介绍一个
使用方法
$
代码如下 | 复制代码 |
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 { |
上传图片form提交target到一个隐藏的iframe里,
代码如下 | 复制代码 |
form action="upload.php" id="form1" name="form1" enctype="multipart/form-data" method="post" target="uploadIframe"> |
然后后台处理完上传图片逻辑后返回给前台,利用ajax修改当前页面DOM对象实现无刷新上传图片的友好功能。
实例
代码如下 | 复制代码 |
a.html <form enctype="multipart/form-data" action="a.php" target="ifram_sign" method="POST"> <iframe name="ifram_sign"" width=100% src="" frameborder="0" height="0" width="0" marginheight="0" marginwidth="0"></iframe> |
PHP代码:
代码如下 | 复制代码 |
<?php if ($_FILES["test_file"]["error"] > 0) { echo "Error: " . $_FILES["test_file"]["error"] . "<br />"; } else { //这里的判断图片属性的方法就不写了。自己扩展一下。 $filetype=strrchr($_FILES["test_file"]["name"],"."); $filetype=substr($filetype,1,strlen($filetype)); $filename="img/".time("YmdHis").".".$filetype; move_uploaded_file($_FILES["test_file"]["tmp_name"],$filename); echo '<script >alert(1)</script>'; $return="parent.document.getElementByIdx_x('mpic".$pageset_id."').innerHTML='".$dataimgpath."'"; echo "<script >alert('上传成功')</script>"; echo "<script>{$return}</script>"; } ?> |
其实jquery ajax图片异步上传
HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en_US" xml:lang="en_US">
<head>
<title>图片异步上传</title>
</head>
<script type="text/javascript"" width=100% src="js/jquery.js"></script>
<script type="text/javascript"" width=100% src="js/index.js"></script>
<link type="text/css" rel="stylesheet" href="css/index.css">
<body>
<div class="frm">
<form name="uploadFrom" id="uploadFrom" action="upload.php" method="post" target="tarframe" enctype="multipart/form-data">
<input type="file" id="upload_file" name="upfile">
</form>
<iframe" width=100% src="" width="0" height="0" style="display:none;" name="tarframe"></iframe>
</div>
<div id="msg">
</div>
</body>
</html>
index.js
$(function(){
$("#upload_file").change(function(){
$("#uploadFrom").submit();
});
});
function stopSend(str){
var im="<img" width=100% src='upload/images/"+str+"'>";
$("#msg").append(im);
}
upload.php
<?php
$file=$_FILES['upfile'];
$name=rand(0,500000).dechex(rand(0,10000)).".jpg";
move_uploaded_file($file['tmp_name'],"upload/images/".$name);
//调用iframe父窗口的js 函数
echo "<script>parent.stopSend('$name')</script>";
?>
获取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" width=100% src="/ipcity/ipaddress.php" type="text/javascript" language="javascript"></script> |
刷新页面,是不是达到预想的效果了呢?
上面的代码只是简单的判断了ip那里就跳到那,如果出现如,我想把湖南所有IP都跳到长沙去,那像衡阳,刘阳,耒阳 这些就要作多次父线处理了,要想知道请看下集。
表格展示无限级分类(PHP版)有需要的参考一下。表格展示无限级分类(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语句,可能使得你的网站访问速度急剧下降,后台数据库面临巨大压力,并且很快陷入无法打开页面的窘境