PHP程序员一般都忽略了的几点精华

我发现很多的PHP程序员,尤其是学习还不是很久的,都不知道PHP的精华所在。Perl当年如何在商界出名?其强大的正则表达式。而PHP呢?他是一门从Unix下发展起来的语言,当然也就继续了Perl的很多特点,同时C的优点都有。快速、简洁、明了,尤其是C程序员,PHP是至爱,我就是深爱着“PHP”(都忘了女友了:))。这里,我想来写一篇PHP的变量、数组应用技巧和PHP的正则表达式、PHP的模板应用,以后有时间再写PHP与COM、PHP与XML的完全结合。

阅读全文

php实现文件在线压缩功能


<?php

class ZipAllFloder
{
    var 
$cachelist 
= array();
    var 
$datasec      
= array();  
    var 
$ctrl_dir     
= array();  
    var 
$eof_ctrl_dir "x50x4bx05x06x00x00x00x00"
;  
    var 
$old_offset   0
;  
    
    function 
StartWork($dir
){
        
$result $this->GetList($dir
);
        
$this->ClearCache
();
        return 
$result
;
    } 
    function 
ReadAndExport($filelist,$zipfilename
){  
        if (
count($filelist)>0
){  
            foreach(
$filelist as $filename
){  
                if (
is_file($filename
)){  
                    
$fp fopen ($filename"r"
);  
                    
$content = @fread ($fp,filesize($filename
));  
                    
fclose ($fp
);  
                    
$filename basename($filename
);  
                    
$this -> addFile($content$filename
);  
                }  
            }  
        }else{
            
$this -> addFile("This folder have none a single file!","nofile.log"
);
        }
        
$out $this -> outfile
(); 
        
$this -> IniVars
();
        
$fp fopen($zipfilename,"w"
);  
        
fwrite($fp,$out,strlen($out
));  
        
fclose($fp
);
        
$this -> cachelist[] = $zipfilename

    }
    function 
GetList($dir
){  
        if (
file_exists($dir
)){  
            
$handle opendir($dir
); 
            while(
$files readdir($handle
)){  
                if ((
$files==".")||($files==".."
)) continue; 
                if(
is_dir($dir."/".$files
)){
                    
$this -> GetList($dir."/".$files
);
                }else{
                    
$filelist[] = $dir."/".$files

                } 
            }  
            
closedir($handle
);
            
$zipfilename dirname($dir)."/[FOLDER]".basename($dir).".zip"
;
            
$this -> ReadAndExport($filelist,$zipfilename
);
        }  
        return 
$zipfilename
;  
    }  
    function 
ClearCache
(){
        if(
$num count($this ->cachelist
)){
            for(
$i=0;$i<$num-1;$i
++){
                @
unlink($this ->cachelist[$i
]);
            }
        }
    }
    function 
IniVars
(){
        
$this -> datasec 
= array();
        
$this -> ctrl_dir 
= array();
        
$this -> eof_ctrl_dir "x50x4bx05x06x00x00x00x00"
;
        
$this -> old_offset   0
;
    }
    function 
unix2DosTime($unixtime 0
) {  
        
$timearray = ($unixtime == 0) ? getdate() : getdate($unixtime
);  
        if (
$timearray[year] < 1980
) {  
            
$timearray[year]    = 1980
;  
            
$timearray[mon]     = 1
;  
            
$timearray[mday]    = 1
;  
            
$timearray[hours]   = 0
;  
            
$timearray[minutes] = 0
;  
            
$timearray[seconds] = 0
;  
        }
        return ((
$timearray[year]-1980)<<25)|($timearray[mon]<<21)|($timearray[mday]<<16)|($timearray[hours]<<11)|($timearray[minutes]<<5)|($timearray[seconds]>>1
);  
    }
    function 
addFile($data$name$time 0
){  
        
$name str_replace(/$name
);  
        
$dtime dechex($this->unix2DosTime($time
));  
        
$hexdtime $dtime[6] . $dtime[7
]  
                  . 
$dtime[4] . $dtime[5
]  
                  . 
$dtime[2] . $dtime[3
]  
                  . 
$dtime[0] . $dtime[1
];  
        eval(
$hexdtime = " $hexdtime ";
);  
        
$fr   "x50x4bx03x04"
;  
        
$fr   .= "x14x00"
;
        
$fr   .= "x00x00"
;
        
$fr   .= "x08x00"
;
        
$fr   .= $hexdtime

        
$unc_len strlen($data
);  
        
$crc     crc32($data
);  
        
$zdata   gzcompress($data
);  
        
$c_len   strlen($zdata
);  
        
$zdata   substr(substr($zdata0strlen($zdata) - 4), 2
);
        
$fr      .= pack(V$crc
);
        
$fr      .= pack(V$c_len
);
        
$fr      .= pack(V$unc_len
);
        
$fr      .= pack(vstrlen($name
));
        
$fr      .= pack(v0
);
        
$fr      .= $name
;  
        
$fr .= $zdata
;  
        
$fr .= pack(V$crc
);
        
$fr .= pack(V$c_len
);
        
$fr .= pack(V$unc_len
);
        
$this -> datasec[] = $fr
;  
        
$new_offset        strlen(implode($this->datasec
));  
        
$cdrec "x50x4bx01x02"
;  
        
$cdrec .= "x00x00"
;
        
$cdrec .= "x14x00"
;
        
$cdrec .= "x00x00"
;
        
$cdrec .= "x08x00"
;
        
$cdrec .= $hexdtime
;
        
$cdrec .= pack(V$crc
);
        
$cdrec .= pack(V$c_len
);
        
$cdrec .= pack(V$unc_len
);
        
$cdrec .= pack(vstrlen($name
) );
        
$cdrec .= pack(v
);
        
$cdrec .= pack(v
);
        
$cdrec .= pack(v
);
        
$cdrec .= pack(v
);
        
$cdrec .= pack(V32 
);
        
$cdrec .= pack(V$this -> old_offset 
);
        
$this -> old_offset $new_offset
;  
        
$cdrec .= $name
;  
        
$this -> ctrl_dir[] = $cdrec
;  
    }
    function 
outfile
(){  
        
$data    implode($this -> datasec
);  
        
$ctrldir implode($this -> ctrl_dir
);  
        return  
            
$data 
.  
            
$ctrldir 
.  
            
$this -> eof_ctrl_dir 
.  
            
pack(vsizeof($this -> ctrl_dir
)) .
            
pack(vsizeof($this -> ctrl_dir
)) .
            
pack(Vstrlen($ctrldir
)) .
            
pack(Vstrlen($data
)) .
            
"x00x00"
;
    }
}

$zip = new ZipAllFloder
();
$str $zip->StartWork("./baby"
);
echo 
$str
;
?>

阅读全文

php+ajax剪切图片

<style>
#image{background-image:url(http://pic1.phprm.com/2013/09/05/test1.jpg);width:1000px;height:200px;border:1px solid #000}
/*绝对定位很重要*/
#helper{position:absolute;width:100px;height:100px;border:1px solid #a9b53f;cursor:pointer;display:none;background-color:#999;top:30px;left:30px}
</style>
<script>
//目标源
var target;
//拖拽辅助容器
var helper;
//鼠标默认状态(false=没有按下)
var iMouseDown=false;
//当前的目标源
var ctar;
//鼠标偏移量
var mouseOff;
//ajax相关
var ajax;
//继承number类的NANA0,用途为:如果一个数为100px会返回100。
Number.prototype.NaN0=function(){return isNaN(this)?0:this;}
//初始化AJAX
function createRequest(){
var ajax;
if(window.ActiveXObject){
  try{
   ajax = new ActiveXObject("Microsoft.XMLHTTP");
  }catch(e){
   ajax = false;
  }
}else{
  try{
   ajax = new XMLHttpRequest();
  }catch(e){
   ajax = false;
  }
}
if(!ajax){
  alert("Error creating the XMLHttpRequest object.");
}else{
  return ajax;
}
}
//反送AJAX请求
function cutp(cutC){
ajax=createRequest();
ajax.onreadystatechange = action;
//发送请求的URL
url = "path=./test1.jpg&x="+parseInt(cutC.style.left)+"&y="+parseInt(cutC.style.top)+"&width="+parseInt(cutC.offsetWidth)+"&height="+parseInt
(cutC.offsetHeight);
window.status = url;
ajax.open("GET", "image.php?"+url, true);
ajax.send(null);
}
function action(){
var show = document.getElementById("show");
//如果SHOW这个容器原先有子节点,就清楚子节点
if(show.hasChildNodes()){
  show.removeChild(show.childNodes[0]);
}
//状态为4&200的时候返回信息
if(ajax.readyState==4&&ajax.status==200){
  show.innerHTML = ajax.responseText;
}
}
//创建可拖拽容器
function createContainer(arg){
helper = document.getElementById(helper);
//设置属性
helper.setAttribute("cut",1);
arg.onmouseover = function(){
  helper.style.display="block";
}
arg.onmouseout = function(){
  helper.style.display="none";
}
helper.ondblclick = function(){
  cutp(helper);
}
}
//获取鼠标位置
function mouseCoords(ev){
if(ev.pageX || ev.pageY){
  return {x:ev.pageX, y:ev.pageY};
}
return {
  x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
  y:ev.clientY + document.body.scrollTop  - document.body.clientTop
};
}

//获取鼠标在当前容器的偏移量
function getMouseOffset(target, ev){
ev = ev || window.event;
var docPos    = getPosition(target);
var mousePos  = mouseCoords(ev);
return {x:mousePos.x - docPos.x, y:mousePos.y - docPos.y};
}
//获取鼠标相对父节点的偏移量
function getPosition(e){
var left = 0;
var top  = 0;
while (e.offsetParent){
  left += e.offsetLeft + (e.currentStyle?(parseInt(e.currentStyle.borderLeftWidth)).NaN0():0);
  top  += e.offsetTop  + (e.currentStyle?(parseInt(e.currentStyle.borderTopWidth)).NaN0():0);
  e     = e.offsetParent;
}
left += e.offsetLeft + (e.currentStyle?(parseInt(e.currentStyle.borderLeftWidth)).NaN0():0);
top  += e.offsetTop  + (e.currentStyle?(parseInt(e.currentStyle.borderTopWidth)).NaN0():0);
return {x:left, y:top};
}
//鼠标移动处罚的函数
function mouseMove(ev){
ev = ev||window.event;
var tar = ev.target||ev.srcElement;
var mousePos = mouseCoords(ev);
var rootar = tar.parentNode;
var mouseOf = getPosition(rootar);
//判断状态
if(iMouseDown&&mouseOff){
  var limLefX=mouseOf.x+rootar.offsetWidth-tar.offsetWidth;
  var limBottomY =mouseOf.y+rootar.offsetHeight-tar.offsetHeight;
  var conLeft = mousePos.x-mouseOff.x;
  var conTop = mousePos.y-mouseOff.y;
  if(conLeft>=mouseOf.x&&conLeft<=limLefX){
   helper.style.left = mousePos.x-mouseOff.x;
  }
  if(conTop>=mouseOf.y&&conTop<=limBottomY){
   helper.style.top = mousePos.y-mouseOff.y;
  }
}
}

//鼠标按键起来的函数
function mouseUp(){
iMouseDown = false;
}

//按下鼠标按键的函数
function mouseDown(ev){
iMouseDown = true;
ev = ev||window.event;
var tar = ev.target||ev.srcElement;
if(tar.getAttribute("cut")){
  var hmouseOff = getPosition(tar);
  helper.style.left = hmouseOff.x;
  helper.style.top = hmouseOff.y;
  mouseOff = getMouseOffset(tar,ev);
}
}
//监听事件
document.onmouseup = mouseUp;
document.onmousemove = mouseMove;
document.onmousedown = mouseDown;
window.onload=function(){
target = document.getElementById("image");
createContainer(target);
}
</script>
<div id="image" class="im"><div id="helper" class="drag">#dragHelper</div></div>
<div id="show"></div>

阅读全文

生成缩略图保存数据库

<?php
# Constants
define("IMAGE_BASE", ./);
define("MAX_WIDTH", 150);
define("MAX_HEIGHT", 150);

# Get image locationstr_replace(.., , $_SERVER[QUERY_STRING]);
$image_file = t.jpg;
$image_path = IMAGE_BASE . "$image_file";

阅读全文

PHP制作图型计数器的例子

以前在奥索看见过很多这样的例子,各各方法复杂,请看如下例子实现图形计数器。在网页中使用请用 <script src="http://文件地址"></script>

<?
//存放计数的文本文件
$count="count.txt";
//计数器的位数,假如不填则默认为6位
$wei="";
//图像的URL路径
$tu="/tcount/images";
?>
<?
if ($wei=="") { $wei=6; }
if (!file_exists($count)) { $fp=fopen($count,"w "); fputs($fp,0,100); fclose($fp); }
if ($REMOTE_ADDR!=$ip) {
$fp=fopen($count,"r ");
$cc=fgets($fp,100);
$cc=trim($cc);
if ($cc=="") { $cou=1; }
else { $cou=$cc 1; }
rewind($fp);
fputs($fp,$cou,100);
fclose($fp);
}
setcookie("ip",$REMOTE_ADDR,time() 86400);
$fp=fopen($count,"r ");
$cou=fgets($fp,100);
$cou=trim($cou);
fclose($fp);
$w=strlen($cou);
while($w<$wei) {
$cou="0".$cou;
$w ;
}
$www=strlen($cou);
$i=0;
echo "document.write("<p align=center>");n";
while($i<$www) {
$ym=substr($cou,$i,1);
echo "document.write("<img src=$tu/$ym.gif>");n";
$i ;
}
?>

阅读全文

用PHP实现小型站点广告管理

图片链接广告大概是最为常用的网络广告模式,但是多条广告的动态随机显示可不是那么简单的事情。PHP的文件上传函数提供了在这块468x60像素的区域(网页广告的标准尺寸)实现能够根据权值大小而随机显示广告的解决方案,从而避免了开发FTP程序或是ASP和Perl CAI中需要外挂扩展才能实现此项功能的弊端。

  本例在PHP4 MySQL Apache for Win9x/2000下调试通过,共包括两部分:用来增加新广告的程序AddNewAd.php3以及显示广告的程序ShowAd.php3,都存放在服务器PHP文件目录下的“test/guanggao/”目录中。在guanggao目录中建立一个存放广告链接图片的子目录“adbanner/”。下面我们按步骤进行分析。

1.首先,建立MySQL数据库:guanggao

  在Windows环境下,建立一个MySQL空数据库很简单,因为每个数据库都是存在于mysql/data/目录下的一个子目录,所以只要在该目录下新建子目录guanggao就可以了,这时数据库内还没有任何表和数据。

2.建立新增广告程序:AddNewAd.php3

  设计思路:其中先用表单得到用户的新广告信息;然后用PHP函数copy()将链接图片(banner)文件上传到服务器adbanner目录下;最后将图片文件名、广告网址、说明、加权信息等写入建立的MySQL数据表ad中。该程序代码如下:

  # AddNewAd.php3

阅读全文

用PHP编写PDF文档生成器

PHP一个最大的优点就是它对新技术的支持非常轻易,这种语言的可扩展性使得开发人员能够很方便地添加新的模块,而且遍布世界的技术团体的支持和众多扩展模块的支持使得PHP已经成为功能最齐全的Web编程语言之 一。目前可得到的扩展模块已经能够使开发人员执行IMAP和POP3操作,可以动态产生图象和Shockwave Flash动画,进行信用卡验证,敏感数据的加密解密,还能够解析XML格式的数据。但这还不是全部,现在,又有一个新的模块可以与PHP进行绑定了,那就是PDFLib扩展模块,它能够让开发人员动态产生PDF(Adobe Portable Document Format)格式的文件,下面就先看看如何在PHP里使用这个模块。

为了能够使PHP具有操作PDF格式文档的能力,你必须先在你的系统里安装PDFLib扩展库,假如你使用的是Lunix系统,你可以从 http://www.pdflib.com/pdflib/index.html下载一个并进行编译,假如你使用的是Windows系统,那就更简单了,只需要下载一个编译好的PDFLib库,然后在PHP的配置文件里把相应的行的注释去掉即可。


extension=php_pdf.dll


假如是动态装载,也可以是参照下面的命令:


dl("php_pdf.dll");


此外,你还必须有一个Adobe Acrobat PDF阅读器,用来浏览PDF格式,假如你没有,你可以从http://www.adobe.com/免费下载。

一旦你做好了前期预备,就可以创建PDF文件了,下面就是一个简单的例子:



<?php

// 创建一个新的PDF文档句柄

$pdf = PDF_new();


// 打开一个文件

PDF_open_file($pdf, "PDFTest.pdf");


// 开始一个新页面(A4)

PDF_begin_page($pdf, 595, 842);


// 得到并使用字体对象

$arial = PDF_findfont($pdf, "Arial", "host", 1);

PDF_setfont($pdf, $arial, 10);


// 输出文字

PDF_show_xy($pdf, "This is an exam of PDF Documents, It is a good Lib,",50, 750);

PDF_show_xy($pdf, "If you like,please try yourself!", 50, 730);


// 结束一页

PDF_end_page($pdf);


// 关闭并保存文件

PDF_close($pdf);

?>



然后保存成PHP文件,在浏览器里进行浏览,PHP就会执行上面的代码,它产生一个新的PDF文件,并保存到指定的位置。

现在我们分析一下什么的代码,要使用PHP创建PDF文件,有四个步骤:1,创建文档句柄;2,注册文档的字体和颜色;3,用PDFLib提供的函数向文件句柄写文字或画图;4,保存文档。

阅读全文

用PHP编写的网上调查投票系统

这是一个简单的投票程序,对于刚学PHP和朋友来说是一个很不错的入门程序。在这里给大家介绍一下,希望能对朋友们有所帮助。

该系统是由以下四个文件组成的:有HTML调查表单的survey.htm,实现调查功能的survey.php,记录调查项目的data.txt 和记录调查结果的survey.txt.其中data.txt和survey.txt我们可以用NOTEPAD分别创建之,并传到程序目录下。 文件 data.txt中存的是要进行调查的项目,注重每个项目应占一行;而survey.txt则可以是一个什么内容也没有的空文件。

Survey.htm的代码可以如如下所示:

<html>
<head>
<title>survey</title>
</head>
<body>
<form method="POST" action="survey.php">
<p><input type="radio" value="0" name="vote">调查项目一</p>
<p><input type="radio" name="vote" value="1">调查项目二</p>
<p><input type="radio" name="vote" value="2">调查项目三</p>
<p><input type="radio" name="vote" value="3">调查项目四</p>
<p><input type="radio" name="vote" value="4">调查项目五</p>
<p><input type="hidden" name="go" value="1">
<p><input type="submit" value="提交" name="B1"></p>
<a href="survey.php?result=1">查看结果</a>
</form>
</body>
</html>

注重文件data.txt中的调查项目与上面的调查项目在个数和排列顺序必须保持一致,否则会出错或调查的结果不准确。同时为了将调查结果显示成条形图形式,应该预备若干种不同颜色的条形图片。如:0.gif,1.gif,2.gif,3.gif,4.gif等.

以下是实现调查功能的survey.php代码:

<?
$data="data.txt";
$votes="survey.txt";
$dataf=file($data); /*读出调查项目文件中的项目*/
$file_votes=fopen($votes, "r");
$line_votes=fgets($file_votes, 255); /*读出已经记录的调查结果*/
fclose($file_votes);
$single_vote=explode("|", $line_votes); /* 并将数据按指定的字串切开,再将字串传回到数组变量中 */
if ($result!=1) /*假如已经接受了调查*/
{
$file_votes=file($votes, "r");
if ($REMOTE_ADDR == $file_votes[1]) /*检查是不是同一个人*/
{
echo "<center><font color=red>您已投过票了,谢谢您的参与!</font></center>";
exit;
}
/*假如IP不重复,则执行以下程序*/

阅读全文

删除无限级目录与文件代码共享

<?
//删除目录

class del_path
{
function wm_chief_delpath($del_path)
{
if(!file_exists($del_path))//目标目录不存在则建立
{echo"目录不存在";return false;}
$hand=opendir($del_path);
$i=0;
while($file=readdir($hand))
{$i ;
if($i==1||$i==2)
{continue;}
if(!(strchr($file,".")))
{
$del_s_path=$del_path."/".$file;
$this->wm_chief_delpath($del_s_path);
}
else
{
$del_file=$del_path."/".$file;
$this->wm_chief_file($del_file);
}
}
closedir($hand);
$this->wm_chief_path($del_path);
return true;
}
//删除文件
function wm_chief_file($del_file)
{
unlink($del_file);
}
//删除目录
function wm_chief_path($del_path)
{
rmdir($del_path);
}
}
$DelPath="DelPath";//要删除的目录
$wm_chief=new del_path();
$wm_chief_ok=$wm_chief->wm_chief_delpath($DelPath);
if($wm_chief_ok)
{
echo"删除完毕";
}

?>

阅读全文