文章介绍了关于Sina OAuth request_token 如何存储,有需要了解的同学可参考一下。
资源如下:
- jquery1342660045312="31">新浪的OAuth API地址
- 新浪微博开放平台OAuth授权解决方案(含代码)
纠结的问题在于此:
- 新浪使用的是OAuth 1.0 ,在用户授权验证前,需要先生成request_token
- request_token 应该如何存储?
- SDK中的建议是存储在SESSION中,但是如果我有多台前端机,DNS解析又是不靠谱的,那么我的多台机器如何同步SESSION?
- SESSION存储在数据库中可以避免此问题,可是问题是我的业务不需要用到数据库,为了存储临时性的一次SESSION而用库,太不划算。
- 存储到COOKIE中,多台前端机的问题就不用关心了,不过是否会有不安全因素呢?
- COOKIE中是否可以存储一个字符串,该串为MEMCACHE的KEY,由MEM来存储这个一次性的request_token 是否可行?
- 别人拿到COOKIE,COOKIE可以加一些验证,比如签名之类的东西,并不是随便改造就可以破坏我的程序的。
分析过程大致如上,具体如何实现还在纠结!
这里举一个实现其它的不说多关于php ajax实现验证用户名是否存在完整程序,有需要了解的同学可参考一下。
代码如下 |
复制代码 |
<!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">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
<link rel="stylesheet" type="text/css" href="css/int.css" />
<script type="text/javascript" >
//根据下拉框变换图片
function img_change(thisObj){
var imgsrc = "/bbs/img/"+ thisObj.value+".gif";
document.getElementById("tx_change").src=imgsrc;
}
//检查是否都符合 注册 要求
function check_reg()
{
if(check_len() && check_pass() && check_email() && check_qq())
{
return true;
}else{
return false;
}
}
//检查密码长度不能少于6
function check_len(thisObj){
if(thisObj.value.length==0)
{
document.getElementById('show_pass').innerHTML="密码不能为空";
return false;
}else{
if (thisObj.value.length<6)
{
document.getElementById('show_pass').innerHTML="密码长度不少于6";
return false;
}
document.getElementById('show_pass').innerHTML="";
return true;
}
}
//检查俩次密码输入是否一致
function check_pass(thisObj){
var psw=document.getElementById('pass');
if(psw.value.length==0)
{
document.getElementById('show_pass').innerHTML="密码不能为空";
return false;
}else{
document.getElementById('show_pass').innerHTML="";
if (thisObj.value!=psw.value)
{
document.getElementById('show_repass').innerHTML="两次密码输入不正确";
return false;
}
document.getElementById('show_repass').innerHTML="";
return true;
}
}
//检查email是否正确
function check_email(thisObj){
var reg=/^([a-zA-Zd][a-zA-Z0-9_]+@[a-zA-Zd]+(.[a-zA-Zd]+)+)$/gi;
var rzt=thisObj.value.match(reg);
if(thisObj.value.length==0){
document.getElementById('show_e').innerHTML="Email不能为空";
return false;
}else{
if (rzt==null)
{
document.getElementById('show_e').innerHTML="Email地址不正确";
return false;
}
document.getElementById('show_e').innerHTML="";
return true;
}
}
//检查qq格式是否正确
function check_qq(thisObj){
var qq=document.getElementById('qq').value;
var reg=/^d+$/;
if(qq.search(reg))
{
document.getElementById('show_qq').innerHTML=" QQ 只能为数字";
return false;
}else{
document.getElementById('show_qq').innerHTML="";
return true ;
}
}
</script>
<style type="text/css">
td{
height:30px;
vertical-align:middle;
align:center;
}
#myText{
width:600px;
}
</style>
<title>注册页面</title>
</head>
<body >
<?php
error_reporting(0);
//不让PHP报告有错语发生。如果不关闭好有类似这的错语 Warning: preg_match() 关闭就不出现了
session_start();
header("Cache-control: private");
$conn = @ mysql_connect("localhost","root","")or die("数据库连接错误");
mysql_select_db("bbs",$conn);
mysql_query("set names utf8");
if($_POST['submit'])
{
$username = $_POST["username"];
$sql="select userName from user_info where userName='$username'";
// echo $sql;
$query=mysql_query($sql);
$rows = mysql_num_rows($query);
if($rows > 0){
echo "<script type='text/javascript'>alert('用户名已存在');location='javascript:history.back()';</script>";
}else{
$user_in = "insert into user_info (username,pass,sex,qq,email,img) values ('$_POST[username]',md5('$_POST[pass]'),'$_POST[sex]','$_POST[qq]','$_POST[email]','$_POST[img_select]')";
//echo $user_in;
mysql_query($user_in);
echo "<script type='text/javascript'>alert('写入成功!!');location.href='login.php';</script>";
}
//javascript:history.go(-1)
}
?>
<form action="reg.php" name="reg_form" method="post" onsubmit="return check_reg()">
<table name="reg_table" align="left">
<tr>
<td>用户:</td><td><input id="username" name="username" class="myText" type="text" maxlength="12" /></td>
</tr>
<tr> <!--性别:0 保密 1 女 2 男-->
<td > 性别:</td>
<td>女<input type="radio" value="1" name="sex"/>
男<input type="radio" value="2" name="sex" />
保密<input type="radio" value="0" name="sex" checked/></td>
</tr>
<tr>
<td>密码:</td><td><input name="pass" class="myText" type="password" onblur="check_len(this)"/><span id="show_pass" style="color:red;"></span></td>
</tr>
<tr>
<td>重复密码:</td><td><input name="repass" class="myText" type="password" onblur="check_pass(this)" /><span id="show_repass" style="color:red;"></span></td>
</tr>
<tr>
<td>QQ:</td><td><input type="text" class="myText" name="qq" onblur="check_qq(this)"/><span style="color:red;" id="show_qq"></span></td>
</tr>
<tr>
<td>邮箱:</td><td><input type="text" class="myText" name="email" onblur="check_email(this)"/><span id="show_e" style="color:red;"></span></td>
</tr>
<tr>
<td height="60">头像:</td>
<td>
<select name="img_select" onchange="img_change(this)">
<option value="101" >女 001</option>
<option value="102" >女 002</option>
<option value="103" >女 003</option>
<option value="104" >女 004</option>
<option value="105" >男 001</option>
<option value="106" >男 002</option>
<option value="107" >男 003</option>
<option value="108" >男 004</option>
</select>
<img src="/bbs/img/101.gif" id="tx_change" style="width:50px; height:65px;" alt=""/>
</td>
</tr>
<tr height="20" align="justify">
<td align="right" ><input type="submit" value="注册" name="submit" style="margin-right:5px;"/></td>
<td><input type="reset" value="重置" name="reset" style="margin-left:5px;"/></td>
</tr>
<tr>
<td colspan="2">我已有账号现在<a href="login.php">登录</a></td>
</tr>
</table>
</form>
</body>
</html>
|
文章详细的介绍了关于php生成略缩图程序过程与实现方法 ,有需要了解的同学可参考一下下。
12.3 自动微缩图的生成
由于图片的数据量比较大,传递过程相对较长,所以在用户浏览图片时,常常希望先
显示一个图片的缩略图。
虽然在HTML中可以通过指定图片的宽度和高度来随意缩放图片,但是这种方法不会
减少图片的像素数目。图形文件的尺寸没有改变,当然也不会加快图片下载的速度了。当
然也可以手动通过图形软件生成图片的缩略图,但对于大量的图片展示来说,这个工作量
将十分巨大。为此微缩图的自动生成程序就被设计出来了。
PHP中提供的imagecopyresized函数就可以用来生成真正的缩赂图片。该函数的标推
语法如下:
语法:int imagecopyresized(int dst_im,int src_im,int dstX,int dstY,
int srcX,int srcY,int dstW,int dstH,int srcW,int srcH);
返回值:整数
函数种类:图形处理
内容说明:本函数可复制新图,并重新调整图片的大小尺寸。参数都是目的在前,来
源在后。参数dst im及src_im为图片的handle。参数dstX、dstY、srcX、srcY分别为目的
及来源的坐标。参数dstW、dstH、srcW、srcH分别为来源及目的的宽及高,欲调整的新图
的尺寸就在这儿配置。
下面举个例子来说明这个函数的用法,对应的程序thumb.php如程序清单12—5所示。
程序清单12—5 thumb.php
代码如下 |
复制代码 |
<?
// 本函数从源文件取出图像,设定成指定大小,并输出到目的文件
// 源文件格式:gif,jpg,png
// 目的文件格式:gif
// $srcFile:源文件
// $dstFile: 目标文件
// $dstW:目标图片宽度
// $dstH:目标文件高度
function makethumb($srcFile,$dstFile,$dstW,$dstH)
{
$data = GetImageSize($srcFile,&$info);
switch ($data[2])
{
case 1:
$imgsrc = @ImageCreateFromGIF($srcFile);
break;
case 2:
$imgsrc = @ImageCreateFromJPEG($srcFile);
break;
case 3:
$imgsrc = @ImageCreateFromPNG($srcFile);
break;
}
$srcW = ImageSX($imgsrc);
$srcH = ImageSY($imgsrc);
$ni = ImageCreate($dstW,$dstH);
ImageCopyResized($ni,$imgsrc,0,0,0,0,$dstW,$dstH,$srcW,$srcH);
Imagegif($ni,$dstFile);
// 如果需要输出到浏览器,那么将上一句改为 ImageJpeg($ni);
// 如果需要其他格式的图片,改动最后一句就可以了
}
?> |
在这个例子中,首先通过getimagesize()函数获得源图片的情况,再用 imagecreatefromgif()、
imagecreatefromjpeg()或imagecreatefrompng()创建一个源位图$imgsrc,然后用
imagecreate()函数创建一个目标位图,其长、宽各是源位图的一半。然后调用imagecopyresized()
函数,将源位图缩小后拷贝到目标位图中,最后再用imagegif()函数生成缩略图。
这里所用到的图形处理函数就是由安装的GD库提供的,现对其分别进行说明。首先
介绍getimagesize()函数,其标准语法如下。
语法:array getimagesize(string filename,array [imageinfo]);
返回值:数组
函数种类:图形处理
内容说明:本函数可用来取得GIF、JPEG及PNG 3种WWW上图片的高与宽,不
需要安装GD library就可以便用本函数。返回的数组有4个元素,返回数组的第一个元素(索
引值0)是图片的高度,单位是像素(pixel);第二个元素(索引值1)是图片的宽度;第三个元
素(索引值2)是图片的文件格式,其值1为GIF格式、2为JPEG/JPG格式、3为PNG格式;
第四个元素(索引值3)为图片的高与宽字符串,height=xxx width=yyy。
通过getimagesize()函数的应用,能轻易获取图片的各种信息。下面给大家举一个获取
图片宽度、高度、格式、文件大小的信息的例子,来进一步领会getimagesize()函数的使用
技巧。程序imginfo如程序清单12—6所示。
程序清单12-6 imginfo.php
代码如下 |
复制代码 |
<?php
function getImageInfo($img) //$img为图像文件绝对路径
{
$img_info = getimagesize($img);
switch ($img_info[2])
{
case 1:
$imgtype = "GIF";
break;
case 2:
$imgtype = "JPG";
break;
case 3:
$imgtype = "PNG";
break;
}
$img_type = $imgtype."图像";
$img_size = ceil(filesize($img)/1000)."k"; //获取文件大小
$new_img_info = array (
"width"=>$img_info[0],
"height"=>$img_info[1],
"type"=>$img_type,
"size"=>$img_size
);
print " width";
print $img_info[0];
print " height";
print $img_info[1];
print " format";
print $img_type;
print " size";
print $img_size;
print $new_img_info;
}
$img = "/www/htdocs/images/jf.gif";
getImageInfo($img);
?>
|
在程序12-5中要创建一个缩略图,需要先创建一个用来绘图的空白的画布。
ImageCreate函数可以做到这一点。它将返回一个图像的标识符,并且需要告诉函数用像素
计算的画布有多大(x(宽度)与y(高度))。在程序12-5中用到的图形创建函数imagecreate()
的标准语法如下:
语法:int imagecreate(int x_size,int y_size);
返回值:整数
函数种类:图形处理
内容说明:本函数用来建立一张全空的图形。参数x_size、y_size为图形的尺寸,单位
为像素(pixel)。
如果要从已经存在的图片中取出图片文件代码,可以用imagecreatefromgif()、
imagecreatefromjpeg()或imagecreatefrompng(),例如函数imagecreatefromgif()就是从一个GIF
格式的图片文件中取出对应的图片源代码,其标准语法如下:
语法:int imagecreatefromgif(string filename);
返回值:整数
函数种类:图形处理
内容说明:本函数用来取出一张GIF格式图形,通常作为背景或者基本的画布样本使
用。参数filename可以是本地端的文件,也可以是网络的URL地址。返回值为GIF的文件
代码,可供其他函数使用。
在将源位图缩小后拷贝到目标位图中时,用到了imagecopyresized()函数,此函数可以
复制新图并调整大小,其标准语法如下:
语法:int imagecopyresized(int dst_im,int src_im,int dstX,int dstY,int srcX,int srcY,
int dstW,int dstH,int srcW,int srcH);
返回值:整数
函数种类:图形处理
内容说明:本函数可复制新图,并重新调整图片的大小尺寸。参数那是目的在前,来
源在后。参数ddst_im及src_im为图片的handle。参数dstX、dstY、srcX、srcY分别为目的
及来源的坐标。参数dstW、dstH、srcW、srcH分别为来源及目的的宽及高,若欲调整新图
的尺寸就在这里配置。
最后在输出图像时用到的imagegif()函数的标准语法如下:
语法:int imagegif(int im,string [filename]);
返问值:整数
函数种类:图形处理
内容说明:本函数用来建立一张GIF格式图形。参数im为使用ImageCreate()所建立
的图片代码,参数filename可省略,若无本参数filename,则会将图片直接送到浏览器端,
记得在送出图片之前要先送出使用Content-type:image/gif的标头字符串(header)到浏览器
端,以顺利传输图片。若要使用透明背景的GIF图,也就是GIF89a的格式,需要先使用
ImageColorTransparent()配置透明背景。本函数产生的GIF图,由于有版权的问题,因此
在商业上的使用还要多加考虑。
代码如下 |
复制代码 |
<?php
$pic_name=date("dMYHis");
// 生成图片的宽度
$pic_width=$_POST['width'];
// 生成图片的高度
$pic_height=$_POST['length'];
function ResizeImage($im,$maxwidth,$maxheight,$name){
//取得当前图片大小
$width = imagesx($im);
$height = imagesy($im);
//生成缩略图的大小
if(($width > $maxwidth) || ($height > $maxheight)){
$widthratio = $maxwidth/$width;
$heightratio = $maxheight/$height;
if($widthratio < $heightratio){
$ratio = $widthratio;
}else{
$ratio = $heightratio;
}
$newwidth = $width * $ratio;
$newheight = $height * $ratio;
if(function_exists("imagecopyresampled")){
$newim = imagecreatetruecolor($newwidth, $newheight);
imagecopyresampled($newim, $im, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
}else{
$newim = imagecreate($newwidth, $newheight);
imagecopyresized($newim, $im, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
}
ImageJpeg ($newim,$name . ".jpg");
ImageDestroy ($newim);
}else{
ImageJpeg ($im,$name . ".jpg");
}
}
if($_FILES['image']['size']){
//echo $_FILES['image']['type'];
if($_FILES['image']['type'] == "image/pjpeg"||$_FILES['image']['type'] == "image/jpg"||$_FILES['image']['type'] == "image/jpeg"){
$im = imagecreatefromjpeg($_FILES['image']['tmp_name']);
}elseif($_FILES['image']['type'] == "image/x-png"){
$im = imagecreatefrompng($_FILES['image']['tmp_name']);
}elseif($_FILES['image']['type'] == "image/gif"){
$im = imagecreatefromgif($_FILES['image']['tmp_name']);
}
if($im){
if(file_exists($pic_name.'.jpg')){
unlink($pic_name.'.jpg');
}
ResizeImage($im,$pic_width,$pic_height,$pic_name);
ImageDestroy ($im);
}
}
?>
<img src="<? echo $pic_name.'.jpg'; ?>"><br><br>
<form enctype="multipart/form-data" method="post" action="small_picture.php">
<br>
<input type="file" name="image" size="50" value="浏览"><p>
生成缩略图宽度:<input type="text" name="width" size="5"><p>
生成缩略图长度:<input type="text" name="length" size="5"><p>
<input type="submit" value="上传图片">
</form>
|
本文章介绍一个php中Ubb代码编辑器程序代码,大家可参考一下。
代码如下 |
复制代码 |
<?php
/*
php Ubb代码编辑器
*/
function get_ubb($ubb){
$ubb=preg_replace("/([B])(.*)([/B])/","<B>2</B>" ,$ubb);//替换B粗体字
$ubb=preg_replace("/([I])(.*)([/I])/","<I>2</I>" ,$ubb);
$ubb=preg_replace("/([U])(.*)([/U])/","<U>2</U>" ,$ubb);
$ubb=preg_replace("/([LEF])(.*)([/LEF])/","<div align=left>2</div>" ,$ubb);
$ubb=preg_replace("/([MID ])(.*)([/MID ])/","<div align=center>2</div>" ,$ubb);
$ubb=preg_replace("/([RIG])(.*)([/RIG])/","<div align=right>2</div>" ,$ubb);
$ubb=preg_replace("/([LINK])(.*)([/LINK])/","<a href=2>2</a>",$ubb);
$ubb=preg_replace("/([Email])(.*)([/Email])/","<a href=mailto:2>2</a>",$ubb);
$ubb=preg_replace("/([IMAGE])(.*)([/IMAGE])/","<img src=2>",$ubb);
$ubb=preg_replace("/([FLASH])(.*)([/FLASH])/","<OBJECT codeBase=http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=4,0,2,0 classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000 width=400 height=400><PARAM NAME=movie VALUE="2"><PARAM NAME=quality VALUE=high><embed src="2" quality=high pluginspage='http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash' type='application/x-shockwave-flash' width=400 height=400 ></embed></OBJECT>" ,$ubb);
$ubb=preg_replace("/([MUSIC])(.*)([/MUSIC])/","<embed src=2 autostart=false loop=3>" ,$ubb);
$ubb=preg_replace("/([PHOTO name=)([0-9]*)(])/","<img src=Ubb_img/biaoqing/2.gif >" ,$ubb);
$ubb=preg_replace("/([FONT=)(.{1,10})(])(.*)([/FONT])/","<div style=font:2>4</div>" ,$ubb);
$ubb=preg_replace("/([FONT-SIZE=)([0-9]*)(])(.*)([/FONT-SIZE])/","<div style=font-size:2px>4</div>" ,$ubb);
$ubb=preg_replace("/([FONT-COLOR=)(.{1,10})(])(.*)([/FONT-COLOR])/","<div style=color:2>4</div>" ,$ubb);
//$ubb=preg_replace("/([])(.*)([/])/","" ,$ubb);
return $ubb;
}
$str=get_ubb($_POST['cont']);
$str="<div style=font:宋体>[FONT=黑体]asdasd</div><div style=font:Georgia>asdasdas[/FONT]</div>";
echo get_ubb($str);
?>
|
汉字正则表达式是大家开发中会碰到的常用见主要是利用\\u4e00-\\u9fa5和来实现正则获取中文汉字了,有需要的同学可以参考一下。
本文章来详细的分析一下关于
代码如下 |
复制代码 |
var reg = /^[u4e00-u9fa5]+$/;
if(reg.test(str))
{
alert('汉字的干活');
}
$action = trim($_GET['action']);
if($action == "sub")
{
$str = $_POST['dir'];
//if(!preg_match("/^[".chr(0xa1)."-".chr(0xff)."A-Za-z0-9_]+$/",$str)) //GB2312汉字字母数字下划线正则表达式
if(!preg_match("/^[x{4e00}-x{9fa5}A-Za-z0-9_]+$/u",$str)) //UTF-8汉字字母数字下划线正则表达式
{
echo "<font color=red>您输入的[".$str."]含有违法字符</font>";
}
else
{
echo "<font color=green>您输入的[".$str."]完全合法,通过!</font>";
}
}
|
当然如果要想字符串全是汉字的GBK2312编码匹配为:
代码如下 |
复制代码 |
$str = "小小子";
if(preg_match("/^[".chr(0xa1)."-".chr(0xff)."]+$/",$str)){
print($str."确实全是汉字");
} else {
print($str."这个真TMD不全是汉字");
}
|
其实只要了解了各个编码的高位与低位的开始与结束,那么自然就可以写出正则,而且直接是十六位的,有啥困难?呵呵。不过要注意,在php里面,表示十六位是用的x。
所以如上,我们还可以用该正则表达式来判断是否是GB2312的汉字
代码如下 |
复制代码 |
<?php
$str = "小小子";
if(preg_match("/^[xb0-xf7][xa0-xfe]+$/",$str)){
print($str."确实全是汉字");
} else {
print($str."这个真TMD不全是汉字");
}
?>
|
在php结合了preg_match("/^[xb0-xf7][xa0-xfe]+$/",$str) 就可以快速的实现了做法,有需要的同学可以参考一下。