当前位置:  编程技术>php
本页文章导读:
    ▪一个程序下载的管理程序(三)       //后台程序sign.php源代码如下: <?require("../opendata.php");?> <? if($action=="sign") { if($say==""||$title==""||$url==""||$size=="") { header("location:../message.php?message=资料不完整&redirect=download/download.php?page=.........
    ▪计数器详细设计       概述: 此设计可以在本计数器基础之上设计计数分析程序,可以对页面访问、ip访问次数进行分析,并形成报表。 一、数据库设计 数据库采用mysql 相关文件:    createDatabase.sql       .........
    ▪操作Oracle的php类       <? //【警告】:未经许可请勿随便修改 //------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------ //   // .........

[1]一个程序下载的管理程序(三)
    来源: 互联网  发布时间: 2013-11-30
//后台程序sign.php源代码如下:
<?require("../opendata.php");?>
<?
if($action=="sign")
{
if($say==""||$title==""||$url==""||$size=="")
{
header("location:../message.php?message=资料不完整&redirect=download/download.php?page=0%26action=publish");
break;
}       $say=htmlspecialchars($say);
        $title=htmlspecialchars($title);
        $say=str_replace(" ","&nbsp",$say);
        $say=nl2br($say);
        $now_time=getdate();
        $ttime=$now_time["year"]."-".$now_time["mon"]."-".$now_time["mday"]." ".$now_time["hours"].":".$now_time["minutes"].":".$now_time["seconds"];
        $str="insert into download (title,say,click,ttime,url,size,type) values ('".$title."','".$say."',0,'#".$ttime."#','".$url."','".$size."',".$type.")";
        mysql_query($str,$cn);


header("location:download.php?page=0&action=show");
}
if($action=="download")
{
     mysql_query("update download set click=click+1 where id=".$id,$cn);

?>
<?
header("Content-type: text/html");
if(header("location:$url"))
echo "error";
?>
<html>
<p align="center"><a href="/blog_article/</$url/gt;.html">如果你的浏览器没有弹出下载窗口,请点这里</a></p>

<p align="center"><a href="javascript:self.close()">关闭窗口</a></p>
<p> </p>
</html>
<?}?>
<?if($action=="mail")
{
mail("khj99@163.net","该链接有问题,请更正","id=$id;程序名=$title;类别=$type","From:khj99@163.netnReply-To:khj99@163.netn");
header("location:download.php?action=show&type=$type");
}
?> 

    
[2]计数器详细设计
    来源: 互联网  发布时间: 2013-11-30
概述:
此设计可以在本计数器基础之上设计计数分析程序,可以对页面访问、ip访问次数进行分析,并形成报表。
一、数据库设计
数据库采用mysql
相关文件:    createDatabase.sql        创建数据库
            createTblCounter.sql    创建计数器表


表名:tpCounter(table of pages counter)
字段:
名称    类型    意义
id    Int (10) auto_increment    序列号
pagename    varchar(20)    页面标识,缺省为页面文件名
count    Int(10)    计数值

表名:tiCounter(table of ip counter)
字段:
名称    类型    意义
id    Int(10) auto_increment    序列号
ip    varchar(20)    Ip标识
count    Int(10)    该ip访问次数
date    datetime    最近访问时间
pages    text    曾访问过的页面id,用'|'分隔

二、详细说明:
1、    可以对每个页面进行计数,也可以统计每个ip访问的次数,最近访问时间,以及每次访问的页面,需要两个表;
2、    统计网站访问人次:tpCounter中设置一个站标识[建议用pagename='0'标志];
3、    每次打开页面时都先检查session,若不存在该用户的session,说明是刚刚开始访问本网站,此时创建一个此用户的session,对网站计数增1,对所访问页面计数增1;[打开或刷新页面时]如果该用户session已存在,网站计数值不增加,但是页面计数值每刷新一次都要增1;
4、    关闭页面时,检查该用户打开本网站页面数是否为0,是则销毁该用户的session,否则不销毁;[此功能不需编写程序,服务器自动执行]
5、    在访问时如果页面在tpCounter中没有标识,自动在表中插入一条记录;
6、    pages是一个文本类型,记录了浏览者访问的时间和访问的页面,其中包含类似这样格式的字符串:
||2001-5-1 16:00:00|1|12|5||2001-8-3 10:12:5|4|9|
表示此ip在2001-5-1 16:00:00访问了1、12、5页面,在2001-8-3  10:12:5访问了5、4、9页面[页面的号从上一个表中获得];
7、    设计计数的文件(.php),每一个页面都包含这个文件,这个文件中包含以下的功能:
        1>session检查,
        2>连接数据库,
        3>计数[参数为 页面名称、ip、当前时间],
        4>读写数据库,
        5>断开与数据库的连接;
8、对所访问的页面的记录采用如下方式:
        用户打开一个新的页面时,如果用户session不存在,写入时间并记录当前页面,若存在,写入当前页面。写入采用附加的方式。
9、    网站计数在此头文件中,对页面计数在所计页面中。
10、每一个页面在包含本文件时,如果要对页面计数,一定要在包含之前使用变量$page_name,并赋值为页面的名称,页面名称不能有重复。

三、接口描述:
相关文件:counter.php

1/Boolean check_session()
功能描述:session检查,原来存在返回true;原来不存在返回false,并创建,并注册布尔型变量existing
入口参数:无
    出口参数:布尔型
2/site_count($content)
    功能描述:网站访问计数
    入口参数:数据库连接
    出口参数:计数值

3/page_count($connect,$page_name,$flag=true)
    功能描述:网页计数,返回页面访问次数,整型,$flag是是否增加计数的标志,缺省true
    入口参数:$connect:数据库连接,$page_name:网页名称
    出口参数:页面访问次数


4/show_site_count(int type)
功能描述:显示计数
入口参数:    type==1采用图形计数
type==2采用文本计数

四、流程
    0/检查进入页面的权限
        由于头文件需要通过引用才可以编译,因此必须检查是通过引用还是直接浏览
1/链接数据库
2/检查session,若不存在,创建session,进行网站计数
3/显示计数
4/进行页面计数
5/断开与数据库的连接[自动实现]

五、使用方法
所有的函数都包含在一个头文件中,在使用时,包含此头文件即可。
六、附源程序
/**    counter.php v1.0
*    by Amio 2001-5-1
*    描述:计数器文件,可以对整个网站计数,
*        可以对所有页面计数,可以对每个ip计数
*/
/**    接口实现功能:
*    1>session 检查
*    2>连接数据库
*    3>计数
*    4>读写数据库
*    5>链接部分的表格输出
*/
/**    使用方法:
*    此文件必须是包含在其他的php文件之中使用,
*    在引用之前需要对$inc变量进行配置
*    e.g.:
*     *    $inc="inc";
*    include("include.php");  
*     
*    ?>
*/
?>
//session检查,返回布尔型
//true--此用户session存在
//false--此用户session不存在
function check_session(){
    $existing=true;
    session_start();
    if (!session_is_registered("existing")){
        session_register("existing");
        return false;     
    } else  return true;     
}


//网页计数,返回页面访问次数,整型
//$flag是是否增加计数的标志,缺省true
function page_count($connect,$page_name,$flag=true){
    $ip = getenv("REMOTE_ADDR");
    $query=@mysql_query("select id,count from tpcounter where pagename='$page_name'",$connect) or die("invalid page query!");
    if (!(mysql_num_rows($query))){
        mysql_query("insert into tpcounter (pagename,count) values('$page_name',1)",$connect)or die("insert page failed");
        $pidquery=@mysql_query("select id from tpcounter where pagename='$page_name'",$connect) or die ("select page id failed");
        $pidarray=mysql_fetch_array($pidquery);
        $pid=$pidarray[id];         
        $return_num=1;
    }else {  
        $array=mysql_fetch_array($query);
        $num=$array[count];         
        $pid=$array[id];         
        if ($flag)
            $num++;
        mysql_query("update tpcounter set count=$num where pagename='$page_name'",$connect)or die("update page failed");
        $return_num=$num;
    }     
    $pquery=@mysql_query("select pages from ticounter where ip='$ip'",$connect) or die ("invalid pages query!");
    if (($flag)&&(mysql_num_rows($pquery))){
        $parray=mysql_fetch_array($pquery);
        $ps="$parray[pages]";
        $pstr="$parray[pages]"."$pid"."|";
        mysql_query("update ticounter set pages='$pstr' where ip='$ip'",$connect)or die ("update ip  failed");
    }  
    return $return_num;  
}

//ip计数,返回ip访问次数,整型
//功能除了计数还有时间更新
//$flag是是否增加计数的标志,缺省true
//注意:ip_count的调用必须在page_count之前!!!
function ip_count($connect){

    $ip = getenv("REMOTE_ADDR");

    $visit_time=date("Y:m:d:H:i");
    $visit_pages="||"."$visit_time"."|";
    $ipquery=@mysql_query("select count,pages from ticounter where ip='$ip'",$connect) or die ("invalid ip query!");

    if (!(mysql_num_rows($ipquery))){//新的ip
        $pageStr="|"."$visit_pages";         
        mysql_query("insert into ticounter (ip,count,date,pages) values ('$ip',1,'$visit_time','$pageStr')",$connect)or die("insert ip failed");
        return 1;
    }else{                //旧的ip
        $parray=mysql_fetch_array($ipquery);
        $ipnum=$parray[count];
        $pageStr="$parray[pages]"."$visit_pages";
        $ipnum++;
        mysql_query("update ticounter set count=$ipnum,date='$visit_time',pages='$pageStr' where ip='$ip'",$connect)or die("update ip failed");
        return $ipnum;
    }

}

//网站计数,返回整型,网站访问次数
function site_count($connect){
    if (!check_session()){    //session不存在
        $ipnum=ip_count($connect);
        $num=page_count($connect,"website",true);
    }else{            //session存在
        $num=page_count($connect,"website",false);
    }     
    return $num;     
}

function displayCount($num){
    $fileurl="countpng.php?count=".$num;
    return $fileurl;
}

//显示计数值,type为显示类型,length为显示的长度,缺省6
//type=1图形形式
//type=2文本形式(缺省)
function show_site_count($num,$length=6,$type=2){

    $outStr=strval($num);
    for ($i=strlen($outStr)+1;$i<=$length;$i++){
        $outStr="0"."$outStr";
    }
    switch ($type){
        case 1:
            echo " echo displayCount($outStr);
            echo "\">";
            break;
        case 2:
        default:     
            echo "$outStr";     
    }     
}
?>

if (!isset($inc))exit;
$connect=mysql_connect('localhost','root','');//connect to server
mysql_select_db("damio",$connect); //select database ,database name is damio

$sitecount=site_count($connect);
if (isset($page_name))
    page_count($connect,$page_name);
?>

    
[3]操作Oracle的php类
    来源: 互联网  发布时间: 2013-11-30
<?
//【警告】:未经许可请勿随便修改
//------------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------------
//   
// 【文件名】:                c_ora_db.inc
// 【作  用】:                Oracle公用函数类
// 【作  者】:                天灰
//  
// 【最后修改日期】:        2001/05/11[cxx]      
// 【变量定义规则】:‘C_'=字符型,‘I_'=整型,‘N_'=数字型,‘L_'=布尔型,‘A_'=数组型
//------------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------------
//    ※db_logon()                    开启数据库连接     
//    ※db_query()                    通用select             
//    ※db_change()                    数据库改变的通用函数(insert,delete,update)
//    ※db_insert()                    insert,直接调用db_change()
//    ※db_delete()                    delete,直接调用db_change()
//    ※db_update()                    update,直接调用db_change()                 
//    ※db_commit()                    事务递交
//    ※db_rollback()                    事务回退
//    ※db_logoff()                    断开数据库连接
//------------------------------------------------------------------------------------------


Class c_ora_db
{

     
//------------------------------------------------------------------------------------------
//        变量定义
//------------------------------------------------------------------------------------------
    var $C_user          = "";              //数据库用户名
    var $C_passwd        = "";            //数据库口令
    var $C_db            = "";                    //数据库名
    var $I_linkID        = 0;                          //连线句柄
    var $I_stmtID        = 0;                          //查询句柄
    var $color             ="";                    //全局颜色
//------------------------------------------------------------------------------------------



//------------------------------------------------------------------------------------------
//        函数名:db_logon()
//        作  用:开启数据库连接
//        参  数:无
//        返回值:连线句柄(整型)
//        备  注:无
//------------------------------------------------------------------------------------------
    function  db_logon()    
    {    
        $this->I_linkID =  @OCILogon($this->C_user,$this->C_passwd,$this->C_db);
        if ($this->I_linkID == 0){AlertExit('数据库链接失败,请与DBA联系!');}
        return  $this->I_linkID;    
    }
//------------------------------------------------------------------------------------------

       
//------------------------------------------------------------------------------------------
//        函数名:db_query($C_sql,$A_define="",$I_start=-1,$I_end=-1)
//        作  用:select
//        参  数:$C_sql                    sql语句
//                $A_define                需绑定的字段。数组型         
//                $I_start                开始取记录 -1则取出查询的所有记录
//                $I_end                    结束取纪录
//        返回值:二维数组($A_rs)
//        备  注:通过数字0,1,2....可访问对应字段的值; 或通过查询字段名也可访问对应字段的值
//                如通过$A_rs[0][0]或$A_rs[0]['NAME']或$A_rs[0]['name']都可访问首条记录NAME字段
//                $I_start,$I_end是配合分页使用的参数。
//------------------------------------------------------------------------------------------
    function  db_query($C_sql,$A_define="",$I_start=-1,$I_end=-1)
    {    
       if (!$C_sql){AlertExit("参数不全!");}//检查参数

       //连接检测
       if ($this->I_linkID == 0){AlertExit('数据库链接失败,请与DBA联系!');}

       //格式检测
       $this -> I_stmtID = OCIParse($this -> I_linkID,$C_sql);     
       if (!$this -> I_stmtID){AlertExit(' sql格式出错!请与程序员联系');}

       //如果没指定绑定的字段,则从SQL语句中去取
       if($A_define=="")
       {
            $A_Cur = explode("select",$C_sql);
            $A_Cur = explode("from",$A_Cur[1]);
            $A_define = explode(",",$A_Cur[0]);
       }

           //绑定数据库表字段
        if(gettype($A_define) == "array")            //查询列是数组
        {
            for($i=0;$i<count($A_define);$i++)
            {
                $A_define_up[$i] = trim(strtoupper($A_define[$i]));    //大写并去除空格
            }
            for($i=0;$i<count($A_define_up);$i++)
            {
                OCIDefineByName($this -> I_stmtID,"$A_define_up[$i]",&$$A_define[$i]);    //绑定
            }
        }
        elseif(trim($A_define) <> "")                //查询列只有一个
        {
            $A_define_up = trim(strtoupper($A_define));
            OCIDefineByName($this -> I_stmtID,"$A_define_up",&$$A_define);
        }

        //执行绑定好的SQL语句
        if(!OCIExecute($this -> I_stmtID))
        {
            echo "<font color=red><b>执行出错:</b></font>SQL Error:<font color=red>$C_sql</font><br>";
            return false;
        }

        $lower = 0;                    //返回二维数组的第一维下标控制变量
        $cnt = 0;                    //开始取数标识

        //取记录
        while (OCIFetchInto($this -> I_stmtID,&$cur,OCI_ASSOC))
        {
            //取查询出来的所有记录
            if ($I_start == -1)
            {
                if (gettype($A_define) == "array")        //查询列是数组
                {
                    for ($i=0;$i<count($A_define);$i++)
                    {
                        if ($cur[$A_define_up[$i]] <> $$A_define[$i])
                        {
                            $$A_define[$i] = $cur[$A_define_up[$i]];     
                        }
                        $A_rs[$lower][$i] = $$A_define[$i];                    //用数字访问
                        $A_rs[$lower][$A_define[$i]] = $$A_define[$i];        //用小些访问
                        $A_rs[$lower][$A_define_up[$i]] = $$A_define[$i];    //用大写访问
                    }         
                }
                elseif (trim($A_define) <> "")            //查询列只有一个
                {

                    if ($cur[$A_define_up] <> $$A_define)
                    {
                        $$A_define = $cur[$A_define_up];     
                    }
                    $A_rs[$lower][0] = $$A_define;                    //用数字访问
                    $A_rs[$lower][$A_define] = $$A_define;        //用小写访问
                    $A_rs[$lower][$A_define_up] = $$A_define;    //用大些访问
                }
                $lower++;            //下标加一
            }

            //取出指定记录(配合分页使用)
            if ($I_start <> -1)
            {
                if ($cnt >= $I_start)
                {
                    $cnt++;
                    if ($I_end - $I_start <> 0)
                    {
                        $I_end--;
                            if (gettype($A_define) == "array")
                            {
                                for($i=0;$i<count($A_define_up);$i++)
                                {
                                    if ($cur[$A_define_up[$i]] <> $$A_define[$i])
                                    {
                                        $$A_define[$i] = $cur[$A_define_up[$i]];     
                                    }
                                    $A_rs[$lower][$i] = $$A_define[$i];                    //用数字访问
                                    $A_rs[$lower][$A_define[$i]] = $$A_define[$i];        //用小些访问
                                    $A_rs[$lower][$A_define_up[$i]] = $$A_define[$i];    //用大写访问
                                }
                            }elseif(trim($A_define) <> "")
                            {
                                if ($cur[$A_define_up] <> $$A_define)
                                {
                                    $$A_define = $cur[$A_define_up];     
                                }
                                $A_rs[$lower][0] = $$A_define;                    //用数字访问
                                $A_rs[$lower][$A_define] = $$A_define;        //用小些访问
                                $A_rs[$lower][$A_define_up] = $$A_define;    //用大写访问                     
                            }
                        $lower++;
                    }else
                    {
                        break;        //如果$I_end-$I_start=0  表示取完记录并跳出while循环
                    }     
                }else
                {
                    $cnt++;        //如果$cnt<$I_start,$cnt++
                }                 
            }

        }     //while的结束

        //释放句柄并返回查询数据(一个二维数组)
        OCIFreestatement($this -> I_stmtID);
        return $A_rs;      

    } //function的结束
//------------------------------------------------------------------------------------------


//------------------------------------------------------------------------------------------
//        函数名:db_change($C_sql,$A_bind)
//        作  用:db change
//        参  数:$C_sql                        sql语句
//                $A_bind                        需绑定的字段。数组型         
//        返回值:布尔值
//        备  注:insert,delete,update通用
//------------------------------------------------------------------------------------------
    function db_change($C_sql,$A_bind="")
    {
        if (!$C_sql){AlertExit("参数不全!");}//检查参数

        //连接检测
        if($this -> I_linkID==""){    AlertExit("我们的数据库正忙,请稍后再连接!");}     

        //格式检测
        $this -> I_stmtID = OCIParse($this -> I_linkID,$C_sql);     
        if (!$this -> I_stmtID){AlertExit(' sql格式出错!请与程序员联系');}

        //绑定
        if(gettype($A_bind) == "array")
        {
            for($i=0;$i<count($A_bind);$i++)
            {
                global $$A_bind[$i];
                $$A_bind[$i] = StripSlashes($$A_bind[$i]);            //去掉反斜线字元
                $$A_bind[$i] = str_replace("<?","< ?",$$A_bind[$i]);    //过滤掉PHP标示
            }
            for($i=0;$i<count($A_bind);$i++){
                OCIBindByName($this -> I_stmtID, ":$A_bind[$i]", &$$A_bind[$i], -1);  //绑定
            }
        }
        elseif(trim($A_bind) <> "")                                //不是数组,是字符
        {
            global $$A_bind;
            $$A_bind = StripSlashes($$A_bind);
            $$A_bind = str_replace("<?","< ?",$$A_bind);                //过滤掉PHP标示
            OCIBindByName($this -> I_stmtID, ":$arrBind", &$$A_bind, -1);                 
        }

        //执行并检测是否成功
        if(!OCIExecute($this -> I_stmtID,OCI_DEFAULT))
        {
            echo "<font color=red><b>执行出错:</b></font>SQL Error:<font color=red>$C_sql</font><br>";
            return false;
        }

        /*//传回受影响的行数
        global $I_changenum;
        $I_changenum = OCINumrows($this -> I_stmtID);*/

        //释放句柄,传回值
        OCIFreeStatement($this -> I_stmtID);
        return true;
    }
//------------------------------------------------------------------------------------------


//------------------------------------------------------------------------------------------
//        函数名:db_delete($C_sql)
//        作  用:delete
//        参  数:C_sql                    sql语句
//        返回值:布尔值
//        备  注:该函数只是为了使用直观,本质调用db_change()
//------------------------------------------------------------------------------------------
    function db_delete($C_sql)
    {
        return $this -> db_change($C_sql);
    }
//------------------------------------------------------------------------------------------


//------------------------------------------------------------------------------------------
//        函数名:db_insert($C_sql,A_bind)
//        作  用:insert
//        参  数:C_sql                    sql语句
//                A_bind                    绑定
//        返回值:布尔值
//        备  注:该函数只是为了使用直观,本质调用db_change()
//------------------------------------------------------------------------------------------
    function db_insert($C_sql,$A_bind="")
    {
        return $this -> db_change($C_sql,$A_bind);
    }
//------------------------------------------------------------------------------------------


//------------------------------------------------------------------------------------------
//        函数名:db_update($C_sql,A_bind)
//        作  用:update
//        参  数:C_sql                    sql语句
//                A_bind                    绑定
//        返回值:布尔值
//        备  注:该函数只是为了使用直观,本质调用db_change()
//------------------------------------------------------------------------------------------
    function db_update($C_sql,$A_bind="")
    {
        return $this -> db_change($C_sql,$A_bind);
    }
//------------------------------------------------------------------------------------------



//------------------------------------------------------------------------------------------
//        函数名:db_commit()
//        作  用:事务递交
//        参  数:无
//        返回值:布尔值
//        备  注:无
//------------------------------------------------------------------------------------------     
    function db_commit()
    {
        return    (OCICommit($this->I_linkID));
    }     
//------------------------------------------------------------------------------------------


//------------------------------------------------------------------------------------------
//        函数名:db_rollback()
//        作  用:事务回退
//        参  数:无
//        返回值:布尔值
//        备  注:无
//------------------------------------------------------------------------------------------     
    function db_rollback()
    {
        return  (OCIRollback($this->I_linkID));
    }     
//------------------------------------------------------------------------------------------

     
//------------------------------------------------------------------------------------------
//        函数名:db_logoff()
//        作  用:断开数据库连接
//        参  数:无
//        返回值:布尔值
//        备  注:无
//------------------------------------------------------------------------------------------     
    function db_logoff()
    {
        return (OCILogoff($this->I_linkID));
    }
//------------------------------------------------------------------------------------------

     
//------------------------------------------------------------------------------------------
}
?> 

    
最新技术文章:
▪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