当前位置:  编程技术>php
本页文章导读:
    ▪一棵php的类树(支持无限分类)       最近问无限分类的类树问题比较多,所以一高兴自己写了一个,我刚写完的,大家用用看,看看怎么实现起来更快,更简单,把你的树也贴出来(要只查询一次数据库的)<.........
    ▪基于PHP+MySQL的聊天室设计       笔者在网站开发中,采用PHP4.0+MySQL3.23.38建立了多种应用。下面,以一个简单的聊天室设计为例,介绍PHP+MySQL在网页开发中的应用。   1、总体设计   1. 1 构思与规划:   聊天室的基.........
    ▪Win9x/ME下Apache+PHP安装配置         Apache Server是众多的WEB服务器软件中的一种,已经成为目前Internet上最流行的web服务器软件之一。比起其它web服务器软件(如PWS、IIS、UNIX),Apache有安装方便,配置简单,便于管理等优点.........

[1]一棵php的类树(支持无限分类)
    来源: 互联网  发布时间: 2013-11-30

最近问无限分类的类树问题比较多,所以一高兴自己写了一个,我刚写完的,大家用用看,看看怎么实现起来更快,更简单,把你的树也贴出来(要只查询一次数据库的)<br> 

这是一棵分类列表的类树,  支持无限分类<br> 
一个分类下面可以同时有"包含子类的分类"和"最终分类";<br> 

唯一的优点是*****只需要进行一次的数据库*****查询.<br> 

样子不是很好看,不过可以自定义修改,可以自己定义css加里面<br> 

缓存方面还没有作,可以自己补上 

下面例子的目录结构是这样的。 
¦--Catagory.php                                        <br> 
¦--images----tree.jsp                            <br> 
¦--images----treeopen.gif                    <br> 
¦--images----treeclose.gif                  <br> 
¦--images----line.gif                            <br> 

/****************tree.jsp********************/ 
function  expand(id){ 
           node  =  document.all('node'+id); 
           if(node.style.display==''){ 
                       node.style.display  =  'none'; 
                       document.images('img'+id).src  =  imgopen; 
           }else{ 
                       node.style.display  =  ''; 
                       document.images('img'+id).src  =  imgclose; 
           } 


/****************Catagory.php********************/ 
<?php 

define('CATAGORY_TREE_EXPEND_NONE',0); 
define('CATAGORY_TREE_EXPEND_ALL',1); 

class  Catagory{ 
       //基础分类数据 
           var  $treeData  =  array(); 
       //分类的等级结构数组,以分类的id值作为数组的关键字 
       var  $treePList  =  array(); 
       //自分类对应上级类的关系 
       var  $treeCList  =  array(); 
  /* 
         *  这个是大分类的模板 
         * 
         *  __id__          分类的编号 
         *  __name__      分类的名称 
         *  __image__    分类前面显示的图像名称  $imgOpen  or  $imgClose 
         *  __open__      分类当前是否是展开的 
         *  __inner__    子分类显示的位置   *  样式可以根据自己的需要任意修改  ,但是不能删除现有的元素 
       */ 
       var  $blockTpl  =  ' 
   <table  border="0"  cellpadding="0"  cellspacing="0"> 
<tr> 
  <td  colspan="2"><a  onclick="expand(__id__);  return  false;"  href="#"> 
    <img  src="/blog_article/__image__/index.html"  border="0"  width="15"  height="15"  id="img__id__"></a> 
     <a  onclick="expand(__id__);  return  false;"  href="#"> 
   __name__</a></td> 
   </tr> 
   <tr  id="node__id__"  > 
                               <td  width="20"></td><td>__inner__</td> 
       </tr> 
  </table>'; 
       /* 
         *  这个是小分类的模板 
         * 
         *  see  $blockTpl 
       */ 
       var  $elementTpl  =  '<img  src="/blog_article/images/line.gif"  width="15"  height="15"><a  href="/blog_article/id/__id__.html"><font  color="white">__name__</font></a><br/>'; 
       /* 
         *  这个是当前位置显示模板 
         * 
         *  see  $blockTpl 
       */ 
       var  $currentTpl  =  '<a  href="/blog_article/id/__id__.html"><font  color="white">__name__</font></a>'; 
       var  $js  =  "images/tree.js"; 

       var  $imgOpen  =  'images/treeopen.gif'; 
       var  $imgClose  =  'images/treeclose.gif'; 
       var  $imgLine  =  'images/line.gif'; 

       var  $cachFile  =  ''; 
       var  $expand  =  0; 

       var  $result  =  array(); 
       var  $treeStr  =  ''; 
       var  $currentStr  =  ''; 
       /* 
         *  用来初始化,传入分类数据 
         * 
         *param  $data  array() 
       */ 
           function  Catagory(&$data){ 
               $this->_init($data); 
       } 

       function  _init($tmpData){ 
               $plevel  =  $clevel  =  $treeData  =  array();  foreach($tmpData  as  $value){ 
                           $treeData[$value['id']]  =  $value; 
                           $plevel[$value['pid']][$value['id']]  =  'END'; 
                       $clevel[$value['id']]  =  $value['pid']; 
                   } 
               $this->treeData  =  &$treeData; 
               $this->treePList  =  &$plevel; 
               $this->treeCList  =  &$clevel; 
           } 
       /* 
         *  解析分类列表 
         * 
         *param  $cataId  int  要解析的主分类的编号 
       */ 
       function  parseNode($cataId=0){ 
               $this->result  =  $this->treePList[$cataId]; 
               if($this->result==null)  die("Catagory  id  error"); 
                   $this->treeStr  =    $this->_doNode($this->result); 
               $this->treeStr  .=  $this->_jsParse(); 
       } 

           function  &_doNode(&$result){ 
                   $nstr  =  $estr  =  ''; 
                   foreach($result  as  $key=>$value){ 
                           if(isset($this->treePList[$key])){ 
                                   $result[$key]  =  $this->treePList[$key]; 
                                   $inner  =  $this->_doNode($result[$key]); 
                               $nstr  .=  $this->_parseNodeTpl($key,  $inner); 
                           }else{ 
                               $estr  .=  $this->_parseElementTpl($key); 
                       } 
               } 
               return  $nstr.$estr; 
           } 

       function  &_parseNodeTpl($cataId,  $inner){ 
               $data  =  $this->treeData[$cataId]; 
               $str  =  preg_replace('  ¦__id__  ¦',  $data['id'],  $this->blockTpl); 
               $str  =  preg_replace('  ¦__name__  ¦',  $data['name'],  $str); 
               $str  =  preg_replace('  ¦__image__  ¦',  ($this->expand?  $this->imgClose:$this->imgOpen),  $str); 
               $str  =  preg_replace('  ¦__open__  ¦',  ($this->expand?'':'none'),  $str); 
               $str  =  preg_replace('  ¦__inner__  ¦',  $inner,  $str); 
               return  $str; 
       } 

       function  _parseElementTpl($cataId){ 
               $data  =  $this->treeData[$cataId]; 
               $str  =  preg_replace('  ¦__id__  ¦',  $data['id'],  $this->elementTpl); 
               $str  =  preg_replace('  ¦__name__  ¦',  $data['name'],  $str); 
               $str  =  preg_replace('  ¦__image__  ¦',  $this->imgLine,  $str); 
               return  $str; 
       }   function  _jsParse(){ 
                   $str  =  "<script  language=\"javascript\"> 
                               imgopen  =  \"$this->imgOpen\"; 
                                   imgclose  =  \"$this->imgClose\"; 
                                   </script><script  src=/index.html"$this->js\"  language=\"javascript\"></script>"; 
               return  $str; 
       } 
       /* 
         *  展开分类$cataId 
         * 
         *param  $cataId  int  要展开的分类的编号 
       */ 
       function  parseCurrent($cataId){ 
               $str  =  ''; 
               $str  .=  $this->_parseCurrentTpl($cataId); 
               while(isset($this->treeCList[$cataId])  &&  $this->treeCList[$cataId]!=0){ 
                       $cataId  =  $this->treeCList[$cataId]; 
                       $str  =  $this->_parseCurrentTpl($cataId).'->'.$str; 
               } 
               $this->currentStr  =  &$str; 
       } 

       function  _parseCurrentTpl($cataId){ 
               $data  =  $this->treeData[$cataId]; 
               $str  =  preg_replace('  ¦__id__  ¦',  $data['id'],  $this->currentTpl); 
               $str  =  preg_replace('  ¦__name__  ¦',  $data['name'],  $str); 
               return  $str; 
       } 
       /* 
         *  解析当前分类的路径 
         * 
         *param  $cataId  int  要解析的主分类的编号 
       */ 
       function  expand($cataId){ 
                   if($this->expand>0)  return  ; 
                   $str  =  ''; 
               if(isset($this->treePList[$cataId]))  $str  .=  "expand($cataId);"; 
               while(isset($this->treeCList[$cataId])  &&  $this->treeCList[$cataId]!=0){ 
                       $str  .=  "expand(".$this->treeCList[$cataId].");"; 
                       $cataId  =  $this->treeCList[$cataId]; 
               } 
               $this->treeStr  .=  "<script  language=\"javascript\">$str</script>"; 
       } 
       /* 
         *  返回当前分类的路径 
       */ 
       function  getCurrentStr(){   return  $this->currentStr; 
       } 
       /* 
         *  返回分类的类树 
       */ 
       function  getTreeStr(){ 
               return  $this->treeStr; 
       } 

       function  setTpl($blockTpl,  $elementTpl,  $currentTpl,  $js){ 
               $this->blockTpl  =  $blockTpl; 
               $this->elementTpl  =  $elementTpl; 
               $this->currentTpl  =  $currentTpl; 
               $this->js  =  $js; 
       } 

       function  setImage($open,  $close,  $line){ 
               $this->imgOpen    =  $open; 
                   $this->imgClose  =  $close; 
                   $this->imgLine    =  $line; 
       } 

       function  setExpend($expand){ 
               $this->expand  =  $expand; 
       } 



//分类的基础数据的样子如下: 
$data  =  array(array('id'=>1,  'name'=>'name1',  'pid'=>0,  'order'=>1), 
                           array('id'=>2,  'name'=>'name2',  'pid'=>1,  'order'=>1), 
                           array('id'=>3,  'name'=>'name3',  'pid'=>0,  'order'=>1), 
                           array('id'=>4,  'name'=>'name4',  'pid'=>3,  'order'=>1), 
                           array('id'=>5,  'name'=>'name5',  'pid'=>6,  'order'=>1), 
                           array('id'=>6,  'name'=>'name6',  'pid'=>2,  'order'=>1), 
                           array('id'=>7,  'name'=>'name7',  'pid'=>6,  'order'=>1), 
                           array('id'=>8,  'name'=>'name8',  'pid'=>3,  'order'=>1), 
                           array('id'=>9,  'name'=>'name9',  'pid'=>6,  'order'=>1), 
                           array('id'=>10,  'name'=>'name10',  'pid'=>0,  'order'=>1),
                           array('id'=>11, 'name'=>'name11', 'pid'=>10, 'order'=>1),
                          array('id'=>12, 'name'=>'name12', 'pid'=>10, 'order'=>1),
                          array('id'=>13, 'name'=>'name13', 'pid'=>10, 'order'=>1),
                          array('id'=>14, 'name'=>'name14', 'pid'=>12, 'order'=>1),
                          array('id'=>15, 'name'=>'name15', 'pid'=>12, 'order'=>4),
                  ); echo "<body bgcolor=\"blue\">";
$tree = new Catagory($data);
echo "<hr>下面是当前分类的类树<hr>";
//$tree->setExpend(1);
$tree->parseNode(0);
//$tree->parseNode(1);
//$tree->expand(9);
echo $tree->getTreeStr();

echo "<hr>下面是当前分类(分类的编号是9)的路径<hr>";
$tree->parseCurrent(9);
echo $tree->getCurrentStr();

    
[2]基于PHP+MySQL的聊天室设计
    来源: 互联网  发布时间: 2013-11-30

笔者在网站开发中,采用PHP4.0+MySQL3.23.38建立了多种应用。下面,以一个简单的聊天室设计为例,介绍PHP+MySQL在网页开发中的应用。

  1、总体设计

  1. 1 构思与规划:

  聊天室的基本原理,就是把每个连上同一网页的用户传送的发言数据储存起来,然后将所有的发言数据传给每一用户。也就是说,用数据库汇集每个人的发言,并将数据库中的数据传给每一个人就实现了聊天室的功能。

  1.2 表设计

  首先使用MySQL建立表chat用来储存用户的发言:

代码如下:

mysql> CREATE TABLE chat
-> (chtime DATATIME,
-> nick CHAR(10) NOT NULL,
->words CHAR(150));

  表中只设定了三个域,chtime是发言的时间,nick为发言者的昵称,words是发言的内容,发言最多150个字符

  1.3 网页设计

  一个最简单的聊天室通常需要两个页框:一个页框是用户输入发言的表单,另一个用来显示大家的发言。所以代码段通常至少需要如下几段:

  建立页框的结构(main.php)

  显示大家发言的程序段(cdisplay.php)

  传送用户发言的程序段(speak.php)

  用户登录进入聊天室程序段(login.php)

  2 、代码设计

  以上规划完成后,就可以着手代码设计了,采用php可以非常简明实现以上的功能。

  2.1 用户登录login.php,本段代码是一个完全HTML网页

代码如下:

<html>
<head>
<title>用户登录</title>
</head>
<body>请输入您的昵称<br>
<form action="/blog_article/main.html" method="post" target="_self">
<input type="text" name="nick" cols="20">
<input type="submit" value="登录">
</body>
</html>

  用户提交自己的昵称后,就进入到聊天室,以下的处理交由main.php处理。

  2.2 页框主体代码段main.php:

代码如下:

<?
setcookie("nick",$nick) //用cookie记录用户昵称,是常用的传递变量方法
?>
<html>
<title>山西铝厂聊天室试用版ver1.0</title>
<frameset rows="80%,*">
<frame src="/blog_article/cdisplay.html" name="chatdisplay">
<frame src="/blog_article/speak.html" name="speak">
</frameset>
</html>

  2.3 显示发言cdisplay.php

  本代码段的任务是将表chat中的数据取出,显示在页框中。每次刷新时,取数据库中最近的15条发言。同时,为防止数据库无限增大,需设计删除陈旧数据的功能。代码如下

代码如下:

<html>
<head>
<title>显示用户发言</title>
<meta http-equiv="refresh" content="5;url=cdisplay.php">
</head>
<body>
<?
$link_ID=mysql_connect("main","root");
//链接Mysql服务器 服务器名为main,管理员名为root
mysql_select_db("abc"); //选择数据库
$str="select * from chat ORDER BY chtime;" ; //查询字符串
$result=mysql_query($str, $link_ID); //送出查询
$rows=mysql_num_rows($result); //取得查询结果的记录笔数
//取得最后15笔发言,并显示
@mysql_data_seek($resut,$rows-15); //移动记录指针到前15笔记录
if ($rows<15) $l=$rows; else $l=15; //记录总数小于15,则最多为该记录数
for ($i=1;$i<=$l;$i++) {
list($chtime,$nick,$words)=mysql_fetch_row($result);
echo $chtime; echo " ";echo $nick; echo":" ; echo $words; echo "<BR>";
}
//清除库中过时的数据
@mysql_data_seek($result,$rows-20); //移动记录指针到前20笔记录
list($limtime)=mysql_fetch_row($result);
$str="DELETE FROM chat WHERE chtime<'$limtime' ;" ;
$result=mysql_query($str,$link_ID); //送出查询字符串,库中只留前20个记录
mysql_close($link_ID);
?>
</body>
</html>

  2.4 送出发言到数据库speak.php

代码如下:

<html>
<head>
<title>发言</title>
</head>
<body>
<?
If ($words)
{ $link_ID=mysql_connect("main","root");
mysql_select_db("abc"); //数据库名为abc
$time=date(y).date(m).date(d).date(h).date(i).(date(s); //取得当前时间
$str="INSERT INTO chat(chtime,nick,words) values
('$time','$nick','$words');" ;
mysql_query($str,$link_ID); //送出发言到数据库
mysql_close($link_ID);
}
?>
//输入发言的表单
<form action="/blog_article/speak.html" method="post" target=" _self">
<input type="text" name="words" cols="20">
<input type="submit" value="发言">
</form>
</body>
</html>

  完成以上工作后,一个简单的聊天室制作就完成了。当然,设计者可以根据个人爱好做一些个性化设计,如增加一个页框,显示当前聊天室人员名单、增加发言表情、取得发言者IP、进一步美化页面等等。

    
[3]Win9x/ME下Apache+PHP安装配置
    来源: 互联网  发布时间: 2013-11-30

  Apache Server是众多的WEB服务器软件中的一种,已经成为目前Internet上最流行的web服务器软件之一。比起其它web服务器软件(如PWS、IIS、UNIX),Apache有安装方便,配置简单,便于管理等优点。更重要的是它和PHP一样是完全免费的!所以受到了众多朋友的青睐,下面我就来讲讲如何安装及配置Apache和PHP,来吧,跟我STEP BY STEP!

  第一步:下载Apache Server。Apache Server的最新版在Apache的官方网站(http://www.apache.org)可以找到,其实我们不需要去国外下载,国内有好几个网站,如http://phpuser.com、http://www.php.com.cn、http://www.phpchina.com都有,下载速度相当快!下载后一般文件名为apache_1_3_x_win32_r2.exe的自解压安装文件。其中1_3_x是apache的版本号,我们这里使用的是目前最新1.3.14版。

  第二步:安装Apache Server。和一般的软件一样,安装过程非常简单,一路[next]下去,只是要将它的安装目录改为[C:\Apache](图1),安装完毕后在win98的[开始]-〉[程序]中就会多出[Apache Web Server]一个项目。这时候Apache Server安装成功,可以下一步了!!


图1

  第三步:配置Apache Server。Apache Server的配置稍稍有一点麻烦,因为Apache Server最初是运行于UNIX上的,还带有许多UNIX的特性,如它的配置就需要专门的配置文件(后缀名为conf)来完成。Apache Server较早的版本有三个文件:httpd.conf、srm.conf和access.conf需要用户自己配置。现在我们用的版本就不需要对这三个文件都进行配置了,只要配置httpd.conf就行了!下面就是最关键的配置了。用WIN98自带的[记事本]打开C盘根目录下[Apache]目录下[CONF]中的httpd.conf文件(C:\Apache\conf\httpd.conf)。这个文件很长,但我们需要改动的地方不是很多,而且仔细看看这个文件的结构也不复杂,它是由说明语句和项目配置语句组成的。前面有“#”是对此句的注释,是说明语句,不起作用,其它的就是配置语句。在配置语句中,要进行如下改动:

  1:找到ServerType(服务器类型),有两个为[standalone]和[inetd],[standalone]是用自己的进程来监听每一个连接,而[inetd]是在连接到达时启动Apache进程。一般都设为standalone,即此行改为:ServerType standalone

  2:找到ServerRoot(服务器根目录),ServerRoot也就是Apache Server的安装目录,此行改为:
ServerRoot "C:\Apache"

  3:找到port(服务器端口),一般默认情况下是80,如果你的pc上还装有其它的Web Server ,那必须将两者分开,如一个为80,一个为8080就可以了!!改为:port 80

  4:找到ServerAdmin(服务器管理),这是应该填的是服务器管理员的E-mail。如果服务器产生错误,则会自动在错误页面上加上这个地址,你可以向他求救!在这里也可以不改动。

  5:找到ServerName(服务器名),这个设置很重要,她也就是你的计算机的网络标识,一般为localhost。当然也可以自定,但一定要和你在win98的网络标识中写的一样(图2),这里改为:
ServerName localhost

图2

  6:找到DocumentRoot(文档根目录),这里填的是默认的主目录地址,即在IE浏览器的地址栏中输入http://localhost/时IE就会自动到此目录下面去找index.html文件。改为:

    DocumentRoot "C:/Apache/htdocs"(注意路径一定要加上引号)

  7:找到DirectoryIndex(默认页面),这个默认页面就是在IE浏览器的地址栏中输入localhost时出现的画面。可以设多个文件后缀名,如.htm、.html、.php、.ph3。这里改为:

    DirectoryIndex index.html index.htm index.php3 index.php(注意要用空格间隔),改完后在将C:\Apache\htdocs下的文件index.html.en改为index.html,让IE浏览器识别。

  8:找到ScriptAlias(脚本别名),这里是指定CGI程序的目录,改为:

    ScriptAlias /cgi-bin/ "C:/Apache/cgi-bin/"(注意路径一定要加上引号)

  到此为止,Apache Server的配置基本上就完成了,可以检查一下配置的对不对。先运行Apache Server([开始]-)[程序]-)[Apache Web Server]-)[Start Apache])。运行成功后会弹出一个dos窗口(图3),如果弹出后马上就消失或者dos窗口内容不是图3,那么很有可能是你的第5条(ServerName)没设置对。运行成功后,在IE浏览器的地址栏中输入http://localhost/,如果没错应该出现图4画面。这就代表你已成功的配置了Apache服务器。

图3


图4
  第四步:安装并配置PHP。PHP可以去http://www.php.com.cn下载得到最新版。我们这里使用的是4.04版,下载后文件为php-4.0.4-Win32.zip,大小为2.7MB。把它解压到C:\PHP4,安装就结束了。

  第五步:配置PHP。把C:\PHP4目录下的文件php.ini-inst改名为php.ini并作如下改动:

  1:找到DOC_ROOT=。它是服务器的根目录,改为:

      DOC_ROOT=C:\Apache\htdocs

  2:找到extension_dir=./改为:

      extension_dir=C:\php4

  存盘退出后再将C:\php4\目录下的文件php.ini复制到C:\windows目录下。

  第六步:Apache Server和php都能工作了。还用最后一步,就是让它们同时工作。打开C:\apache\conf目录下的配置文件httpd.conf,并作如下改动:

  1:找到[DocumentRoot "C:/Apache/htdocs"]下面第一次出现[<Directory >]......</Directory>]的地方,将其改为:

    <Directory "c:/php4">
     Options FollowSymLinks
     AllowOverride None
    </Directory>

  2:在此文件的最后加入一下几句,这几句的意思是让Apache Server能够识别php应用程序。增加如下:
 ScriptAlias /php3/ "c:/php4/" AddType application/x-httpd-php .php3 .php .phtml .php4
Action application/x-httpd-php "/php4/php.exe"

  好了,到此为止,所有的配置工作都完成了!回头看看也不太难。不是吗?最后在检查一下是否成功了!

  随便编一个php程序如下:

<?
 print("在win9X/me下我成功的配置了Apache+php!!!");
?>

  将这个程序命名为test.php并保存在C:\apache\htdocs目录下,然后打开IE,在地址栏中输入http://locahost/test,如出现图5画面则大功告成!!

  图5


    
最新技术文章:
▪PHP函数microtime()时间戳的定义与用法
▪PHP单一入口之apache配置内容
▪PHP数组排序方法总结(收藏)
▪php数组排序方法大全(脚本学堂整理奉献)
▪php数组排序的几个函数(附实例)
▪php二维数组排序(实例)
▪php根据键值对二维数组排序的小例子
▪php验证码(附截图)
▪php数组长度的获取方法(三个实例)
▪php获取数组长度的方法举例
▪判断php数组维度(php数组长度)的方法
▪php获取图片的exif信息的示例代码
▪PHP 数组key长度对性能的影响实例分析
▪php函数指定默认值的方法示例
▪php提交表单到当前页面、提交表单后页面重定...
▪php四舍五入的三种实现方法
▪php获得数组长度(元素个数)的方法
▪php日期函数的简单示例代码
▪php数学函数的简单示例代码
▪php字符串函数的简单示例代码
▪php文件下载代码(多浏览器兼容、支持中文文...
▪php实现文件下载、支持中文文件名的示例代码...
▪php文件下载(防止中文文件名乱码)的示例代码
▪解决PHP文件下载时中文文件名乱码的问题
▪php数组去重(一维、二维数组去重)的简单示例
▪php小数点后取两位的三种实现方法
▪php Redis 队列服务的简单示例
▪PHP导出excel时数字变为科学计数的解决方法
▪PHP数组根据值获取Key的简单示例
▪php数组去重的函数代码示例
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3