php使用静态属性实例化自己

八 15 2010 Published by zdy under 编程技巧

直接上代码了,每次直接使用test::getInstance() 获取对象,可以防止不必要的重复创建对象

class test {
	protected static $handle;
	public function __construct() {}
	public static getInstance() {
		if(empty(self::$hanlde)) {
			self::$hanlde = new test();
		}
		return self::$hanlde;
	}
}

No responses yet

php调试技术手册

八 15 2010 Published by zdy under 编程技巧

值得看看,知道有哪些方法迅速找到问题所在

No responses yet

php中处理html代码的两个常用函数

五 31 2010 Published by zdy under 编程技巧

1.htmlentities()函数:
说明:将html标签转换成特殊字符。例如将'";

//Lets make it safer before we use it
$userInputEntities = htmlentities($userInput);

//Now we can display it
echo $userInputEntities;
由于最近csdn的控件比较垃圾,请将上面的$apos改成单引号。---呼!

上面的语句执行后,将生成下面的结果

I am going to hax0r your site, hahaha!
'
2.html_entity_decode()函数
说明:将htmlentities()函数转义过的字符串转成html标签。

例子:

$orig = "I'll \"walk\" the dog now";

$a = htmlentities($orig);

$b = html_entity_decode($a);

echo $a; // I will "walk" the dog now

echo $b; // I will "walk" the dog now

No responses yet

Discuz 批量添加用户头像

五 17 2010 Published by zdy under 杂七杂八

$dir = './img/'; // 源图片目录
$i = 10; // 开始的导入用户uid
$size = 'big'; // 生成的图片大小 设置大小 (small,middle,big)

$files1 = scandir($dir);
foreach($files1 as $value) {
if($value!='.' && $value!='..' && $value!='Thumbs.db') {
$newdir = get_avatar($i,$size);
copyimage($dir.$value,$newdir,$size);
$i++;
}
}
//echo $i;

function get_avatar($uid, $size = 'middle', $type = '') {
$size = in_array($size, array('big', 'middle', 'small')) ? $size : 'middle';
$uid = abs(intval($uid));
$uid = sprintf("%09d", $uid);
$dir1 = substr($uid, 0, 3);
$dir2 = substr($uid, 3, 2);
$dir3 = substr($uid, 5, 2);
$typeadd = $type == 'real' ? '_real' : '';
if(!is_dir($dir1)) {
mkdir($dir1);
}
if(!is_dir($dir1.'/'.$dir2)) {
mkdir($dir1.'/'.$dir2);
}
if(!is_dir($dir1.'/'.$dir2.'/'.$dir3)) {
mkdir($dir1.'/'.$dir2.'/'.$dir3);
}
return $dir1.'/'.$dir2.'/'.$dir3.'/'.substr($uid, -2).$typeadd."_avatar_$size.jpg";
}

function copyimage($upfile,$newfile,$size = 'middle') {
if($size == 'middle'){$px = 160;}
if($size == 'small'){$px = 48;}
if($size == 'big'){$px = 200;}

$image_path=$upfile;
$image_info=getimagesize($image_path);
if($image_info[2]==2) {
$image2=imagecreatefromjpeg($image_path);
}
$image2_x=imagesx($image2);
$image2_y=imagesy($image2);

if($image2_x > $px) {
$x = $px;
$y = intval($px*$image2_y/$image2_x);
} else {
$y = $image2_y;
$x = $image2_x;
}
$image1=imagecreatetruecolor($x,$y);
imagecopyresized($image1,$image2,0,0,0,0,$x,$y,$image2_x,$image2_y);
$Img = imagejpeg($image1,$newfile);
}
?>

No responses yet

自定义规则比较字符串大小

四 22 2010 Published by zdy under 编程技巧

function compare($data1=0,$data2=0){
 //regle:1<2<3<5<4<6<7<8<10<9
 $tmp    = array(1,2,3,5,4,6,7,8,10,9);
 $cdata1=$cdata2=0;
 foreach($tmp as $key=>$value){
 if($data1==$value){
 $cdata1=$key;
 }
 if($data2==$value){
 $cdata2=$key;
 }
 }
 return ($cdata1>$cdata2)?$data1:$data2;
}

No responses yet

sql两表联查并批量更新其中一表

四 21 2010 Published by zdy under 编程技巧

简要情况如下
tableA(id,price)
tableB(pid,sid,shuliang)
其中tableA.id=tableB.pid,tableA.id=tableB.sid
大致意思是,
一个A可能由几个A元素组成,元素A有价格,组合A需要通过计算(每个元素A的价格x数量)得到价格
下面是目前想到的用法,使用了一个临时表,应该还有更好的解法

$list=array();
$bundle_id=ARRAY();
$sql="SELECT pb.bundle_id, sum(p.products_price*pb.subproduct_qty) as cout, sum(p.products_price_fournisseur*pb.subproduct_qty) as coutf FROM products p,products_bundles pb WHERE p.products_id=pb.subproduct_id GROUP BY pb.bundle_id";
$query=tep_db_query($sql);
while($value=tep_db_fetch_array($query)){
 $list[]=$value;
}
if($list){
 //clean the table
 tep_db_query("DELETE FROM products_calculer_ensemble");
 $insert="INSERT INTO products_calculer_ensemble VALUES";
 $link='';
 foreach($list as $value){
 $insert.=$link."($value[bundle_id],$value[cout],$value[coutf])";
 $link=',';
 }
 tep_db_query($insert);
 tep_db_query("UPDATE products_calculer_ensemble SET coutf=0 WHERE coutf>0 AND pid IN (SELECT pb.bundle_id FROM products p,products_bundles pb WHERE p.products_id=pb.subproduct_id AND p.products_price_fournisseur=0)");
 tep_db_query("UPDATE products p,products_calculer_ensemble pce SET p.products_price=pce.cout, p.products_price_fournisseur=pce.coutf WHERE p.products_id=pce.pid");
}

No responses yet

php字符串处理函数

四 01 2010 Published by zdy under 编程技巧

AddSlashes: 字符串加入斜线。
bin2hex: 二进位转成十六进位。
Chop: 去除连续空白。
Chr: 返回序数值的字符。
chunk_split: 将字符串分成小段。
convert_cyr_string: 转换古斯拉夫字符串成其它字符串。
crypt: 将字符串用 DES 编码加密。
echo: 输出字符串。
explode: 切开字符串。
flush: 清出输出缓冲区。
get_meta_tags: 抽出文件所有 meta 标记的资料。
htmlspecialchars:将特殊字符转成 HTML 格式。
htmlentities: 将所有的字符都转成 HTML 字符串。
implode: 将数组变成字符串。
join: 将数组变成字符串。
ltrim: 去除连续空白。
md5: 计算字符串的 MD5 哈稀。
nl2br: 将换行字符转成 <br>。
Ord: 返回字符的序数值。
parse_str: 解析 query 字符串成变量。
print: 输出字符串。
printf: 输出格式化字符串。
quoted_printable_decode: 将 qp 编码字符串转成 8 位字符串。
QuoteMeta: 加入引用符号。
rawurldecode: 从 URL 专用格式字符串还原成普通字符串。
rawurlencode: 将字符串编码成 URL 专用格式。
setlocale: 配置地域化信息。
similar_text: 计算字符串相似度。
soundex: 计算字符串的读音值
sprintf: 将字符串格式化。
strchr: 寻找第一个出现的字符。
strcmp: 字符串比较。
strcspn: 不同字符串的长度。
strip_tags: 去掉 HTML 及 PHP 的标记。
StripSlashes: 去掉反斜线字符。
strlen: 取得字符串长度。
strrpos: 寻找字符串中某字符最后出现处。
strpos: 寻找字符串中某字符最先出现处。
strrchr: 取得某字符最后出现处起的字符串。
strrev: 颠倒字符串。
strspn: 找出某字符串落在另一字符串遮罩的数目。
strstr: 返回字符串中某字符串开始处至结束的字符串。
strtok: 切开字符串。
strtolower: 字符串全转为小写。
strtoupper: 字符串全转为大写。
str_replace: 字符串取代。
strtr: 转换某些字符。
substr: 取部份字符串。
trim: 截去字符串首尾的空格。
ucfirst: 将字符串第一个字符改大写。
ucwords: 将字符串每个字第一个字母改大写。

No responses yet

php中常用的正则表达式的总结和实例

三 31 2010 Published by zdy under 编程技巧

用了这么就的php,但是对正则的用法一直掌握得模模糊糊,下面是一些技巧收集,对于那些不明白/ie和/is之类的可以看下面的具体例子
作用:分割,匹配,查找,替换

1,php中两个常用的正则函数

preg_match(mode,string subject,array matches);
mode —模块,正则的语法
subject —正则内容
matches —正则的结果
ereg(mode,string subject,array regs);
以上两个函数返回的为true或flase。

2,正则表达式包含的元素

一,原子(普通字符:a-z,A-Z,0-9,原子表,转义符)
二,元字符(有特殊功能的字符)
三,模式修政符(系统内置部分字符i,m,S,U…)

3,正则表达式中的“原子”

一,a-z A-Z_0-9 //最常见的字符
二,(bfw)(sda) //用圆括号包含起来的单元符号,一个括号表示一个整体
三,[sdwe][^mjnb] //用方括号包含起来的原子表,原子表中^代表排除或相反内容
四,转义字符
\d 包含所有的数字[0-9]
\D 除所有数字外[^0-9]
\w 包含所有英文字符[a-zA-Z_0-9]
\W 除所有英文字符外[^a-zA-Z_0-9] —–匹配特殊字符
\s 包含空白区域 如回车,换行,分页等[\f\n\r]

4,正则表达式元字符

* 匹配前一个内容的0次或多次
. 匹配内容的0次或多次,但不包含回车换行
+ 匹配前一个内容的1次或多次
? 匹配前一个内容的0次或1次
| 选择匹配,类似php中||的用法
^ 匹配字符串首部的内容
$ 匹配字符串尾部内容
\b 匹配单词边界,边界可以是空格或者特殊符号
\B 匹配除带单词边界的意外内容
{m} 匹配前一个内容的重复次数为m次
{m,} 匹配前一个内容的重复次数大于等于m次
{m,n} 匹配前一个内容的重复次数m次到n次
() 合并整体匹配,并放入内存,可使用\\1\\2依次获取调用

5,正则表达式中的 模式修正符

(1)运算顺序
遵循从左到右的的运算规则
()圆括号是最高的 第一优先级
* ? + {} 重复匹配内容 为第二优先级
^ $ \b 边界处理 为第三优先级
| 条件处理 为第四
最后按照运算顺序计算匹配
(2)模式修正符
是为正则表达式增强和补充的一个功能,使用在正则之外
例子:/正则/U U就表示一个模式修正符
一下几个为php中常用的:(注意:区分大小写)
i 正则内容在匹配时候不区分大小写(默认是区分的)
m 在匹配首内容或者尾内容时候采用多行识别匹配
s 将转义回车取消是为单位匹配如.匹配的时候
x 忽略正则中的空白
A 强制从头开始匹配
D 强制$匹配尾部任何内容\n
U 禁止贪mei匹配,只跟踪到最近的一个匹配符并结束,常用在采集程序的正则表达式
例子:
</div>
<div id="_mcePaste"><?php</div>
<div id="_mcePaste">$pot="/\d{1,4}(.*)\d{1,2}\\1\d{1,2}/";</div>
<div id="_mcePaste">$cont="2010-12-08";</div>
<div id="_mcePaste">if(preg_match($pot,$cont,$arr)){</div>
<div id="_mcePaste"><span style="white-space: pre;"> </span>echo "匹配成功".$arr[0];</div>
<div id="_mcePaste">}else{</div>
<div id="_mcePaste"><span style="white-space: pre;"> </span>echo "匹配不成功";</div>
<div id="_mcePaste">}</div>
<div id="_mcePaste">?></div>
<div id="_mcePaste">

6,全局匹配函数

preg_match_all(string pattern,string subject,array matches[,int flags])
主要功能:截取比较详细的内容,采集网页,分析文本
例子:
</div>
<div id="_mcePaste"><?php</div>
<div id="_mcePaste">$str="aaa<bbb>ccc<dddd>eee";</div>
<div id="_mcePaste">$mode="/<.*>/U";</div>
<div id="_mcePaste">if(preg_match_all($mode,$str,$arr)){</div>
<div id="_mcePaste"><span style="white-space: pre;"> </span>echo "匹配成功".print_r($arr);</div>
<div id="_mcePaste">}else{</div>
<div id="_mcePaste"><span style="white-space: pre;"> </span>echo "匹配不成功";</div>
<div id="_mcePaste">}</div>
<div id="_mcePaste">?></div>
<div id="_mcePaste">

7,替换函数

preg_replace(mixed pattern,mixed replacement,mixed subject[,int limit])
与str_replace字符串替换相比,功能更加强大
注意:1,替换内容可以是一个正则也可以是一个数组正则
2,替换内容可以通过修正符e来解决替换执行内容
用途:替换一些比较复杂的内容上,也可以用于内容的转换上
例子:
</div>
<div id="_mcePaste"><?php</div>
<div id="_mcePaste">$str="aaa<bbb>ccc<dddd>eee";</div>
<div id="_mcePaste">$mode="/<.*>/U";</div>
<div id="_mcePaste">echo preg_replace($mode,"替换内容",$str);</div>
<div id="_mcePaste">?></div>
<div id="_mcePaste">
例2:数组正则替换
</div>
<div id="_mcePaste"><?php</div>
<div id="_mcePaste">$str="aaa<bbb>ccc<dddd>eee";</div>
<div id="_mcePaste">$mode=array("/<bbb>/","/<dddd>/");</div>
<div id="_mcePaste">$m=array("/<yyy>/","/<mmmm>/");</div>
<div id="_mcePaste">echo preg_replace($mode,$m,$str);</div>
<div id="_mcePaste">?></div>
<div id="_mcePaste">
例3:md5正则替换
</div>
<div id="_mcePaste"><?php</div>
<div id="_mcePaste">$str="密码1:bbb\n密码2:BBB";</div>
<div id="_mcePaste">$mode="/(bbb)/ie";</div>
<div id="_mcePaste">//参数1为正则替换一次,如过2,这连后面的大写b也正则匹配了</div>
<div id="_mcePaste">//preg_replace($mode,"md5(\\1)",$str,1);</div>
<div id="_mcePaste">echo preg_replace($mode,"md5(\\1)",$str);</div>
<div id="_mcePaste">?></div>
<div id="_mcePaste">

8,正则切割函数

preg_split(string pattern,string subject[,int limit[,int flags]])
通过正则表达式来切割相关内容,类似之前学过的explode切割函数,但explode只能按照一种方式切割有局限性
例子:
</div>
<div id="_mcePaste"><?php</div>
<div id="_mcePaste">$str="asd,sdsa,efsd,we。dce,sec";</div>
<div id="_mcePaste">$mode="/[,.。]/";</div>
<div id="_mcePaste">$arr=preg_split($mode,$str);</div>
<div id="_mcePaste">for($i=0;$i<count($arr);$i++){</div>
<div id="_mcePaste"><span style="white-space: pre;"> </span>echo $arr[$i]."<br>";</div>
<div id="_mcePaste">}</div>
<div id="_mcePaste">?></div>
<div id="_mcePaste">

No responses yet

phpbb批量添加用户

三 26 2010 Published by zdy under 编程技巧

虽然国内建站在论坛方面首先考虑discuz(php),phpwind(php)和dvbbs(asp)。但是在国外使用phpbb还是比较多。

虽然以前前一直没用过也没听过phpbb,自然也没什么兴趣去看他的代码。但是前天的CMS课上,老师给我们4个小时的时间做一个给phpbb批量添加用户的脚本。

使用方法,修改相应的数据库连接代码,然后把这个文件方上服务器就可以了。上传文件用excel另存csv就可以了

添加单个用户

<div id="_mcePaste"><?php
$username	= $_POST['username'];
$password	= $_POST['password'];
$email		= $_POST['email'];
if($username&&$password&&$email){
	$bd = mysql_connect("localhost", "root", "root") or die('Connessione fallita' . mysql_error());
	mysql_select_db('phpbb') or die('Selezione Database' . mysql_error());
	$pass	= md5($password);
	$now	= time();
	$check=mysql_query("SELECT * FROM users WHERE username='$username' OR user_email='$email'") or die(mysql_error());
	if(!mysql_fetch_array($check)){
		$sql	= "INSERT INTO `users` (`user_type`, `group_id`, `user_permissions`, `user_perm_from`, `user_ip`, `user_regdate`, `username`, `username_clean`, `user_password`, `user_passchg`, `user_pass_convert`, `user_email`, `user_email_hash`, `user_birthday`, `user_lastvisit`, `user_lastmark`, `user_lastpost_time`, `user_lastpage`, `user_last_confirm_key`, `user_last_search`, `user_warnings`, `user_last_warning`, `user_login_attempts`, `user_inactive_reason`, `user_inactive_time`, `user_posts`, `user_lang`, `user_timezone`, `user_dst`, `user_dateformat`, `user_style`, `user_rank`, `user_colour`, `user_new_privmsg`, `user_unread_privmsg`, `user_last_privmsg`, `user_message_rules`, `user_full_folder`, `user_emailtime`, `user_topic_show_days`, `user_topic_sortby_type`, `user_topic_sortby_dir`, `user_post_show_days`, `user_post_sortby_type`, `user_post_sortby_dir`, `user_notify`, `user_notify_pm`, `user_notify_type`, `user_allow_pm`, `user_allow_viewonline`, `user_allow_viewemail`, `user_allow_massemail`, `user_options`, `user_avatar`, `user_avatar_type`, `user_avatar_width`, `user_avatar_height`, `user_sig`, `user_sig_bbcode_uid`, `user_sig_bbcode_bitfield`, `user_from`, `user_icq`, `user_aim`, `user_yim`, `user_msnm`, `user_jabber`, `user_website`, `user_occ`, `user_interests`, `user_actkey`, `user_newpasswd`, `user_form_salt`, `user_new`, `user_reminded`, `user_reminded_time`) VALUES
	(0, 2, 0x3030303030303030303036787271656977770a6931636a796f3030303030300a716c61713532303030303030, 0, '127.0.0.1', $now, '$username', '$username', '$pass', $now, 0, '$email', 282589336312, '', $now, $now, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 'en', 1.00, 0, 'D M d, Y g:i a', 1, 0, '', 0, 0, 0, 0, -3, 0, 0, 't', 'd', 0, 't', 'a', 0, 1, 0, 1, 1, 1, 1, 230271, '', 0, 0, 0, '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'b3926a7717a7ca0d', 1, 0, 0);";
		mysql_query($sql);
		echo "Success<br/>";
	}else{
		echo "Failed! username or email used<br/>";
	}
}
?>
<html>
	<head>
		<title>Add user</title>
	</head>
<body>
<form action="#" method="post">
<label>username:<input name="username"/></label>
<label>password:<input type="password" name="password"/></label>
<label>email:<input name="email"/></label>
<input type="submit" value="submit"/>
</form>
<a href="adduser.php">Ajouter un compte</a>
<a href="addusers.php">Ajouter multi comptes</a>
</body>
</html></div>

使用csv文件批量添加用户

<?php
$csv=$_FILES["csv"];
if($csv&&$csv["type"]=="text/csv"){
	$list=file($csv["tmp_name"]);
	if($list){
		$bd = mysql_connect("localhost", "root", "root") or die('Connessione fallita' . mysql_error());
		mysql_select_db('phpbb') or die('Selezione Database' . mysql_error());
		foreach($list as $value){
			list($username,$password,$email)=explode(";",$value);
			if($username&&$password&&$email){
				addusers($username,$password,$email);
			}
			unset($username,$password,$email);
		}
		echo "success";
	}
}

function addusers($username,$password,$email){
	$pass	= md5($password);
	$now	= time();
	$check=mysql_query("SELECT * FROM users WHERE username='$username' OR user_email='$email'") or die(mysql_error());
	if(!mysql_fetch_array($check)){
		mysql_query("INSERT INTO `users` (`user_type`, `group_id`, `user_permissions`, `user_perm_from`, `user_ip`, `user_regdate`, `username`, `username_clean`, `user_password`, `user_passchg`, `user_pass_convert`, `user_email`, `user_email_hash`, `user_birthday`, `user_lastvisit`, `user_lastmark`, `user_lastpost_time`, `user_lastpage`, `user_last_confirm_key`, `user_last_search`, `user_warnings`, `user_last_warning`, `user_login_attempts`, `user_inactive_reason`, `user_inactive_time`, `user_posts`, `user_lang`, `user_timezone`, `user_dst`, `user_dateformat`, `user_style`, `user_rank`, `user_colour`, `user_new_privmsg`, `user_unread_privmsg`, `user_last_privmsg`, `user_message_rules`, `user_full_folder`, `user_emailtime`, `user_topic_show_days`, `user_topic_sortby_type`, `user_topic_sortby_dir`, `user_post_show_days`, `user_post_sortby_type`, `user_post_sortby_dir`, `user_notify`, `user_notify_pm`, `user_notify_type`, `user_allow_pm`, `user_allow_viewonline`, `user_allow_viewemail`, `user_allow_massemail`, `user_options`, `user_avatar`, `user_avatar_type`, `user_avatar_width`, `user_avatar_height`, `user_sig`, `user_sig_bbcode_uid`, `user_sig_bbcode_bitfield`, `user_from`, `user_icq`, `user_aim`, `user_yim`, `user_msnm`, `user_jabber`, `user_website`, `user_occ`, `user_interests`, `user_actkey`, `user_newpasswd`, `user_form_salt`, `user_new`, `user_reminded`, `user_reminded_time`) VALUES
	(0, 2, 0x3030303030303030303036787271656977770a6931636a796f3030303030300a716c61713532303030303030, 0, '127.0.0.1', $now, '$username', '$username', '$pass', $now, 0, '$email', 282589336312, '', $now, $now, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 'en', 1.00, 0, 'D M d, Y g:i a', 1, 0, '', 0, 0, 0, 0, -3, 0, 0, 't', 'd', 0, 't', 'a', 0, 1, 0, 1, 1, 1, 1, 230271, '', 0, 0, 0, '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'b3926a7717a7ca0d', 1, 0, 0);");
	}
}

?>
<html>
	<head>
		<title>Ajouter multi comptes</title>
	</head>
<body>
<form action="#" method="post" enctype="multipart/form-data">
<label>csv:<input type="file" name="csv"/></label>
<input type="submit" value="submit"/>
</form>
<a href="adduser.php">Ajouter un compte</a>
<a href="addusers.php">Ajouter multi comptes</a>
</body>
</html>

No responses yet

PHP中对汉字进行UNICODE编码和解码

三 18 2010 Published by zdy under 编程技巧

UNICODE编码在PHP中使用UCS-2编码

直接上代码了


//将内容进行UNICODE编码,编码后的内容格式:YOKA\u738b (原始:YOKA王)
 function unicode_encode($name)
 {
 $name = iconv('UTF-8', 'UCS-2', $name);
 $len = strlen($name);
 $str = '';
 for ($i = 0; $i &lt; $len - 1; $i = $i + 2)
 {
 $c = $name[$i];
 $c2 = $name[$i + 1];
 if (ord($c) &gt; 0)
 {    // 两个字节的文字
 $str .= '\u'.base_convert(ord($c), 10, 16).base_convert(ord($c2), 10, 16);
 }
 else
 {
 $str .= $c2;
 }
 }
 return $str;
 }

// 将UNICODE编码后的内容进行解码,编码后的内容格式:YOKA\u738b (原始:YOKA王)
 function unicode_decode($name)
 {
 // 转换编码,将Unicode编码转换成可以浏览的utf-8编码
 $pattern = '/([\w]+)|(\\\u([\w]{4}))/i';
 preg_match_all($pattern, $name, $matches);
 if (!empty($matches))
 {
 $name = '';
 for ($j = 0; $j &lt; count($matches[0]); $j++)
 {
 $str = $matches[0][$j];
 if (strpos($str, '\\u') === 0)
 {
 $code = base_convert(substr($str, 2, 2), 16, 10);
 $code2 = base_convert(substr($str, 4), 16, 10);
 $c = chr($code).chr($code2);
 $c = iconv('UCS-2', 'UTF-8', $c);
 $name .= $c;
 }
 else
 {
 $name .= $str;
 }
 }
 }
 return $name;
 }

No responses yet