作者:mydowns 出处:把握时间网站:http://www.85time.com, http://www.mydowns.com
原贴地址如下:
http://www.mydowns.com/article_show.php?id=32
详细内容如下:
<?php
$DB_Server = "localhost";
$DB_Username = "mydowns";
$DB_Password = "";
$DB_DBName = "mydowns";
$DB_TBLName = "user";
$Connect = @mysql_connect($DB_Server, $DB_Username, $DB_Password)
or die("Couldnt connect.");
$Db = @mysql_select_db($DB_DBName, $Connect)
or die("Couldnt select database.");
$file_type = "vnd.ms-excel";
$file_ending = "xls";
header("Content-Type: application/$file_type");
header("Content-Disposition: attachment; filename=mydowns.$file_ending");
header("Pragma: no-cache");
header("Expires: 0");
$now_date = date(Y-m-d H:i);
$title = "数据库名:$DB_DBName,数据表:$DB_TBLName,备份日期:$now_date";
$sql = "Select * from $DB_TBLName";
$ALT_Db = @mysql_select_db($DB_DBName, $Connect)
or die("Couldnt select database");
$result = @mysql_query($sql,$Connect)
or die(mysql_error());
echo("$title");
$sep = " ";
for ($i = 0; $i < mysql_num_fields($result); $i++) {
echo mysql_field_name($result,$i) . " ";
}
print("");
$i = 0;
while($row = mysql_fetch_row($result))
{
$schema_insert = "";
for($j=0; $j<mysql_num_fields($result);$j++)
{
if(!isset($row[$j]))
$schema_insert .= "NULL".$sep;
elseif ($row[$j] != "")
$schema_insert .= "$row[$j]".$sep;
else
$schema_insert .= "".$sep;
}
$schema_insert = str_replace($sep."$", "", $schema_insert);
$schema_insert .= " ";
print(trim($schema_insert));
print "";
$i++;
}
return (true);
?>
PHP一些常用的正则表达式
匹配中文字符的正则表达式: [u4e00-u9fa5]
匹配双字节字符(包括汉字在内): [^x00-xff]
应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)
匹配空行的正则表达式: [s| ]*
匹配HTML标记的正则表达式: /<(.*)>.*</>|<(.*) />/
匹配首尾空格的正则表达式: (^s*)|(s*$)
应用:javascript中没有像vbscript那样的trim函数,我们就可以利用这个表达式来实现,如下:
return this.replace(/(^s*)|(s*$)/g, );
}
利用正则表达式分解和转换IP地址:
下面是利用正则表达式匹配IP地址,并将IP地址转换成对应数值的javascript程序:
re=/(d ).(d ).(d ).(d )/g //匹配IP地址的正则表达式
if(re.test(ip)) {
return RegExp.*Math.pow(255,3)) RegExp.*Math.pow(255,2)) RegExp.*255 RegExp.*1
}
else {
throw new Error(Not a valid IP address!)
}
}
不过上面的程序如果不用正则表达式,而直接用split函数来分解可能更简单,程序如下:
ip=ip.split(.)
alert(IP值是: (ip[0]*255*255*255 ip[1]*255*255 ip[2]*255 ip[3]*1))
匹配Email地址的正则表达式: w ([- .]w )*@w ([-.]w )*.w ([-.]w )*
匹配网址URL的正则表达式: http://([w-] .) [w-] (/[w- ./?%&=]*)?
利用正则表达式去除字串中重复的字符的算法程序:
var s1=s.replace(/(.).*/g,)
var re=new RegExp([ s1 ],g)
var s2=s.replace(re,)
alert(s1 s2) //结果为:abcefgi
用正则表达式从URL地址中提取文件名的javascript程序,如下结果为page1
s=s.replace(/(.*/)([^.] ).*/ig,)
alert(s)
利用正则表达式限制网页表单里的文本框输入内容:
php的汉字转换:GBK至Unicode(UTF8)
php的汉字转换一直是比较麻烦的事
该类内置了四个函数"htmlHex","htmlDec","escape","u2utf8"
方便用户的使用,同时也可自定义函数进行自己喜欢的操作
qswhGBK.php 从这里下载
http://www.blueidea.com/user/qswh/qswhGBK.zip
如何用php作线形图的函数
很高兴大家对PHP如此的情有独钟!
下面就给大家介绍php作线形图的函数:
/*
函数说明
$data:y轴数据(数组)
$graphdata:y轴数据--百分比(数组)
$label:x轴数据(数组)
$height:图像高度
$width:图像宽度
$font:字号
$dot:决定点的大小
$bg:背景色
$line :线色
$text :文本色
$dotcolor:点色
$file:输出图像文件名
*/
function qximage($data ,
$graphdata,
$label ,
$height,
$width ,
$font,
$dot,
$bg,
$line,
$text,
$dotcolor,
$file)
{
$jc=$height/100;
$fontwidth= imagefontwidth ($font);
$fontheight=imagefontheight($font);
$image= imagecreate ($width,$height+20);
$bg= imagecolorallocate($image ,$bg[0],$bg[1],$bg[2]);
$line=imagecolorallocate($image ,$line[0],$line[1],$line[2]);
$text=imagecolorallocate($image ,$text[0],$text[1],$text[2]);
$dotcolor=imagecolorallocate($image ,$dotcolor[0],$dotcolor[1],$$dotcolor[2]);
imageline ($image,0,0,0,$height,$line);
imageline($image,0,$height,$width,$height,$line);
for ($i=1;$i<11;$i++)
{
imagedashedline($image,0,$height - $jc*$i*10 ,$width ,$height -$jc*$i*10 ,$line );
imagestring ($image,$font,0,$height-$jc*$i*10,$i*10,$text);
}
for ($i=0;$i {
#echo $tmp.
;
$x1=(($width-50)/count($data))*($i)+40;
#echo $x1 .
;
$y1=$height-$graphdata[$i]*$jc;
$x2=$x1;
$y2=$y1+$graphdata[$i]*$jc;
#echo $y1.
;
imagestring($image,$font,$x1,$y1-2*$fontheight,$graphdata[$i].%(.$data[$i].),$text);
imagearc ($image,$x1 ,$y1,$dot,$dot,0,360,$dotcolor);
imagefilltoborder ($image,$x1,$y1,$dotcolor,$dotcolor);
imagestring ($image,$font,$x1,$y2,$label[$i],$text);
if ($i>0)
{
imageline($image,$tmpx1,$tmpy1,$x1,$y1,$line);
}
$tmpx1=$x1;$tmpy1=$y1;
}
imagegif ($image,$file);
}
?>
对页面的源代码进行加密,使源代码变成乱码,没法读取
脚本说明:
第一步:把如下代码加入<head>区域中
<SCRIPT language=javascript>
<!--
var Words;
function SetWords(word)
{
Words = escape(word.value);
}
function SetNewWords(form)
{
var NewWords;
NewWords = Words
form.NewWords.value = NewWords;
}
//-->
</SCRIPT>
第二步:把如下代码加入<body>区域中
<FORM METHOD=POST>
<div align=center>
<div align=center>
<font color=#0066FF>加密页面源代码脚本</font></div>
<p>将你的页面源代码粘贴在下面的框内,要包括所有的标签例如html , head, body等。</p>
</div>
<P align=center>
<TEXTAREA NAME=Word VALUE= ROWS=7 COLS=50 ONCHANGE=SetWords(this)>
</TEXTAREA>
<P align=center>
<INPUT TYPE=BUTTON ONCLICK=SetNewWords(this.form)
VALUE=开始转换>
<P align=center>
<TEXTAREA NAME=NewWords VALUE= ROWS=7 COLS=50>
</TEXTAREA>
</FORM><p align=center> 以上是转换好的代码,将他们加入如下脚本的引号区内,就是加密后的HTML了!
<p>
<font face=Arial, Helvetica, sans-serif><b><HTML><br>
<HEAD><br>
<SCRIPT LANGUAGE=Javascript><br>
<!--<br>
var Words =<font color=red> </font>//put your cripto code there<br>
function SetNewWords()<br>
php的汉字转换:Unicode(UTF8)至GBK
P>秋水无恨 GBK Unicode UTF8 汉字 转换
php的汉字转换一直是比较麻烦的事
该类内置了四个过滤"&#[dec];","&#x[hex];","%u[hex]","utf8转换"
方便用户的使用,同时也可自定义过滤进行自己喜欢的操作
qswhU.php 从这里下载
http://www.blueidea.com/user/qswh/qswhU.zip
class qswhU{
var $qswhData;
function qswhU($filename="qswhU.php"){
$this->qswhData=file($filename);
}
function decode($str,$pattern=0){
$arr=array("/&#(w+);/iU","/((%ww)+)/i","/%u(w{4,5})/iU");
if(is_integer($pattern)){
if($pattern>=count($arr))die("Invalid Function");
$pattern=$arr[$pattern];
}
return preg_replace_callback($pattern,array($this,"u2gb"),$str);
}
function u2gb($arr){
/******(qiushuiwuhen 2002-8-15)******/
$ret="";$str=$arr[1];
if(preg_match_all("/%w{2}/",$str,$matches)){
for($i=0;$i<count($matches[0]);$i++){
$chr1=hexdec(substr($matches[0][$i],1));
$arr=array("f0","e0","c0","0");
for($j=0;$j<count($arr);$j++)if($chr1>hexdec($arr[$j]))break;
$chr=hexdec(substr($matches[0][$i],1))-hexdec($arr[$j]);
while(++$j<count($arr))$chr=$chr*0x40+(hexdec(substr($matches[0][++$i],1))-0x80);
$str=dechex($chr);
if(strlen($str)==4){
$p=hexdec(substr($str,0,2))-0x4d;
$q=hexdec(substr($str,2))*4;
对PHP采集数据提取核心函数的速度的测试与分析
对PHP采集数据提取核心函数的速度的测试与分析
由于程序需要,于是对PHP采集中的字符提取的核心部分进行了执行速度的测试。
测试了三种最常见的提取办法:
方法一:
<?php
require "class.debug.php";
function getContent ( $sourceStr )
{
$content = strstr( $sourceStr, 形 );
$content = substr( $content, 0, strrpos( $content, 言 ) + strlen( 言 ) );
return $content;
}
$sourceStr = 拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论;
$debug = new Debug;
$debug->startTimer();
for( $i = 0; $i < 1000000; $i++ )
{
$returnStr = getContent( $sourceStr );
}
$timeInfo = $debug->endTimer();
echo $timeInfo;
?>
通过比较低级的字符操作函数进行提取.
方法二:
<?php
require "class.debug.php";
function getContent ( $sourceStr )
{
$pattern = "/形(.*?)言/is";
preg_match_all( $pattern, $sourceStr, $result );
return $result[1][0];
}
$sourceStr = 拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论;
$debug = new Debug;
$debug->startTimer();
for( $i = 0; $i < 1000000; $i++ )
{
$returnStr = getContent( $sourceStr );
}
$timeInfo = $debug->endTimer();
echo $timeInfo;
?>
使用一个简单的正则来提取.
方法三:
<?php
require "class.debug.php";
function getContent ( $sourceStr )
{
$content = explode( 形, $sourceStr );
$content = explode( 言, $content[1] );
return $content[0];
}
$sourceStr = 拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论;
$debug = new Debug;
$debug->startTimer();
for( $i = 0; $i < 1000000; $i++ )
{
$returnStr = getContent( $sourceStr );
}
$timeInfo = $debug->endTimer();
echo $timeInfo;
?>
通过两次explode分裂字符串来提取.
测试前我的观点是: 1 > 2 > 3
PHP调用java类的两种方法
Java语言功能强大,因此在许多情况下在php中来调用Java的功能将十分有用。在php中调用Java语言有两种方法,一种是使用php中的Java扩展模块,另一种是使用minij2ee应用服务器提供的SJOP协议实现。下面我们来比较一下这两种方法各自的特点。
1.php的Java模块
php发布版中包含一个Java扩展模块,可以用来调用Java对象,例如:
<?php
$system=new Java("java.lang.System");
print "Java version=".$system->getProperty("java.version")." <br>";
?>
使用这种方法的优点是比较方便,只要用new Java()来创建一个Java对象,就可以同php类一样来调用Java对象。但是这种方法也有以下明显的缺点:
1.由于php的Java模块根据php的数据类型选择最适合的Java方法,因此无法调用Java过载的函数。
2.php的Java模块将在当前Web Server的进程中载入JVM(Java虚拟机),因此系统开销极大,影响Web Server进程的执行效率。
3.在某些操作系统和Web Server环境中,php的Java模块将使Web Server进程僵死。见http://www.php.net/bugs.php?id=6122。
由于这些原因,php的Java模块一直无法应用到实际的的软件系统中。
2.minij2ee应用服务器SJOP协议实现
在介绍minij2ee应用服务器SJOP协议实现之前,先简单介绍一下minij2ee应用服务器。minij2ee应用服务器是第一款支持php的J2EE应用服务器产品,使php能够用于开发企业级应用系统。SJOP全称是Sample Java ORB Protocol(简单Java对象请求代理协议),是一种简单高效的对象请求代理协议。比如:
<?php
$conn=minij2ee_fetch_connection();
print "Java version=".minij2ee_callstatic_javaobj($conn,"java.lang.System","getProperty","java.lang.String","java.version")." <br>";
?>
minij2ee应用服务器实现SJOP协议的主要目的是使php中能够访问EJB企业级组件,因此minij2ee提供了一个EJB-PHP编译器,可以把EJB组件编译成php的类,使php程序中能够方便的调用EJB组件,例如:
<?php
require("Cart.php"); file://Cart.php是编译Cart EJB后生成的Cart EJB的php类定义。
$home=new CartHome(); file://创建EJB的Home接口。
$objref=$home->create($cart_name); file://创建Cart EJB。
$cart=new Cart($objref);
$cart->add("some goods"); file://向购物车中添加一个物品。
?>
使用minij2ee应用服务器的php支持,就可以开发出基于php和J2EE技术的,面向对象的,稳定高效的企业级应用系统。关于更详细的PHP-J2EE技术的介绍,请访问http://www.minij2ee.com/document/document_index_6_0.html。
[PHP]进程篇
最近写了一个 监控在线进程的程序.
目的是为了 能实时监控执行程序是否断线,并及时重启。
用PHP写的,不算难,还成,但对于自己来讲挺有成就感的。
程序部分略省。
#将perl进程指向到一个文本中。
$psfile
ZendCache 使你的站点飞起来
商业应用的网站,其传输效率是十分重要的,通常在一些电子商务的站点上,服务器的反应速度决定了其服务质量,服务器的负载决定了它的最大可提供客户的访问容量。技术人员总是想方设法地尽可能地提高服务器的响应速度。而ZendCache也正是为了提高服务器的响应速度而开发的一个优秀产品。有数据证明,使用ZendCache可以将服务器的响应速度提高到原来的300%以上。
一、ZendCache是什么
先看一下php是如何运行的,一个请求php脚本发到服务器后,服务器从磁盘上查找相应的文件,先编译脚本,然后执行之,最后将结果送出。所花时间由查找文件+打开文件+读文件+编译文件几部分组成。ZendCache是一个php脚本高速Cache,它可以将刚执行的php脚本文件的编译结果存放在Web服务器的内存中,如果下一次有人再请求此页,它就可以很快将其送出。免去了每次用户请求php文件,服务器都编译一次脚本所花的时间。同时,免取了从磁盘上查找、读取php文件所花的时间。所以可以大大提高服务器的相应速度。
目前ZendCache只能运行在Linux (glibc 2.1)、Solaris 2.6以上、FreeBSD 3.4及4.0。很可惜,目前它沿不支持Windows系统。
二、安装及使用ZendCache
在zend.com上注册一个用户,以此用户登录zend.com,然后到以下地址下载http://www.zend.com/store/products/zend-cache.php。由于zendCache是一个要会费的软件,我们这里只能下载一个可供使用30天的一个限制日期的试用版,不过,它是一个全功能的软件包。试试看,你可以体验到它强大的功能。要下载其试用版,直接选择“Test drive available”下载。
整个下载要分三步,第一步,下载ZendCache软件包,直接从“Supported Platforms”中选择相应平台的软件包即可。注意软件适用的平台及相应php的版本、类库的类型。
第二步是 “Request Product License”,即从zend.com取得授权,要求用户提供自己机器的Host ID,也即计算机上网卡的MAC地址,zend.com提供了一个读取主机网卡地址的工具,用户可以从zend.com是下载一个叫lmutil.Z的小程序,解压缩后,执行它,即可获得计算机的网卡地址。执行方法:
# ./lmutil lmhostid
即可获得主机ID。另外,用户也可以从/var/log/messages中找到网卡的MAC地址。
此将此ID号填入申请license的form中,选择“request”,然后耐心等待,Zend.com会在48小时内给你发邮件,通知你可以去下载自己的license了。收到邮件后,直接进入http://www.zend.com/store/pickup.php去下载。License是一个名为zend_cache.dat的文件.
PHP 中英文混合排版中处理字符串常用的函数
/*
我们在处理中文数据时,经常要处理一些情况,下面就是针对
这些情况,我做的一些函数,已经用在了实践中
如果有问题,请与我联系
OICQ: 86804
*/
# 判断某个位置是中文字符的左还是右半部分,或不是中文
# 返回值 -1 左 0 不是中文字符 1 右
# 用法
/*
$a = this is 中文;
print is_chinese($a, 1); // 0
print is_chinese($a,8); // -1
print is_chinese($a,9); // 1
*/
function is_chinese(&$str, $location) {
$ch = true;
$i = $location;
while(ord($str[$i])>0xa0 && $i >= 0) {
$ch = !$ch;
$i --;
}
if($i != $location) {
$f_str = $ch ? 1: -1;
}
else {
$f_str = false;
}
return $f_str;
}
# 中文字符串倒置函数
# 如果一个将一个有中文的字符串用strrev倒过来,就会产生乱码
/*
print cstrrev(this is 中文); // 文中 si siht
*/
function cstrrev(&$str) {
$long = strlen($str);
for($f_str=, $chinese=false, $i=$long-1; $i>=0; $i--) {
if(ord($str[$i]) > 0xa0) {
$chinese = ! $chinese;
if($chinese == false) {
$f_str .= $str[$i].$str[$i+1];
}
}
else {
$f_str .= $str[$i];
}
}
return $f_str;
}
/* 中文字符串截取函数
一些中文字符串截取函数经常有一些问题,例如在一些自动换行程序中
$a=“1中2”;
经两次截取后,
csubstr($str,$a,0,2);
csubstr($str, $a, 2,2)
由于载取位置指向“中”的右字节,可能会是这样的结果
1, 2
用本函数会产生正确的结果
1中, 2
*/
# start 开始位置,从0开始
# long = 0 则从start 一直取到字符串尾
# ltor = true 时从左到右取字符,false 时到右到左取字符
# $cn_len 中文字符按字节取还是字数取,如果按字数取,则一个中文当一个字节计算
function csubstr(&$str, $start=0, $long=0, $ltor=true, $cn_len=2) {
if($long == 0) $long = strlen($str);
if($ltor == false) $str = cstrrev($str);
最新php3层结构开发技术
P> php作为一种流行的web开发语言,以其编写简单,功能强大的特性已经
被广泛的应用。但是,同时php语言的应用范围却又局限在一些诸如BBS,社区,
投票站等简单的系统。造成这种情况的原因是php缺少一种开发大型应用系统的机
制。将业务逻辑代码直接编写在页面中在开发阶段固然方便,但结果缺使整个系
统的可维护性和可扩展性变得极差。常常碰到这样的情况,当用户需要对系统功
能做一个改动时,将需要修改许多相关的php程序。
当然,如果有一个好的设计会使情况变得好一些,通过函数或类将业务
逻辑封装起来将使情况有所改观。但是,php中对类的支持是有限的,php的仅实
现了对属性和方法的封装,而对于C++/Java里使用的面向对象的一些高级均未支
持。总的来说,php开发中存在的问题也正是C/S结构存在的问题,所以C/S结构渐
渐演化成现在的3层结构或n层结构,引入了中间层的概念。
目前流行的J2EE技术正是这样一种3层结构的应用开发模式,JSP作为前
台表示层,EJB作为中间业务逻辑层,数据库为信息层。通过将表示层和业务逻辑
层的隔离,使系统有了良好的伸缩性,可维护性和可扩展性。因此,J2EE技术适
合于需求多变,功能复杂的企业级应用系统的开发。php同样需要这样一种结构,
使php能够应用到更广阔的领域中去。
现在,我们可以使用minij2ee应用服务器来实现这样的目的。minij2ee
应用服务器是目前唯一支持php的J2EE应用服务器产品。php使用基于minij2ee的3
层开发模式,就可以将业务逻辑封装在EJB中,而使用php来快速定制前台界面。
以在线商店应用系统为例( http://www.minij2ee.com/petstore/ ),EJB封装
了货物管理,账号管理,订单处理等核心业务逻辑,而php用来定制商店的界面,
如产品的陈列方式,柜台的样式等等。由于核心业务逻辑封装于EJB中,因此在线
商店的前端界面可以根据客户的需求任意定制而无需改动EJB程序。另外,由于
J2EE技术的灵活性和可扩展性,即使对于业务逻辑的扩展也将变得如果plug&play
一样方便,只需编写新的EJB整合到原有的系统中即可。
对于市场巨大的中小企业软件系统领域来说,需要的不是庞大昂贵的系
统,而是需要够用且实用,高性价比的软件。是用php+minij2ee再加上高效稳定
的Linux系统和MySQL数据库,正是解决这个问题的良好方案。