php模仿asp Application对象在线人数统计

 更新时间:2016年11月25日 16:27  点击:1654

 

 代码如下 复制代码

用法:
application('key','value'); //设置 key=value
$value = application('key'); //获取 key的值
*/

function application()
{
 $args = func_get_args(); //获取输入参数
 if (count($args) >2 || count($args) < 1) return;
 $ssid = session_id(); //保存当前session_id
 session_write_close(); //结束当前session
 ob_start(); //禁止全局session发送header
 session_id("xxx"); //注册全局session_id
 session_start(); //开启全局session
 $key = $args[0];
 if (count($args) == 2) //如果有第二个参数,那么表示写入全局session
 {
  $re = ($_session[$key] = $args[1]);
 }
 else // 如果只有一个参数,那么返回该参数对应的value
 {
  $re = $_session[$key];
 }
 session_write_close(); //结束全局session
 session_id($ssid); //重新注册上面被中断的非全局session
 session_start(); //重新开启
 ob_end_clean(); //抛弃刚刚由于session_start产生的一些header输出
 return $re;
}

 

这是一款php分页代码是一款经典的可自动判断url参数再进行分页的实例代码,同时自定了上页,下页,首页,尾页哦,同时还支持select下拉框跳转代码。
 代码如下 复制代码

class page{

 var $page_name="page";

 var $next_page='下一页';

 var $pre_page='上一页';

 var $first_page='首页';

 var $last_page='尾页';

 var $pre_bar='<<';

 var $next_bar='>>';

 var $format_left='';

 var $format_right='';

 var $pagebarnum=5;

 var $totalpage=0;

 var $nowindex=1;

 var $url="";

 var $offset=0;

 var $rewrite = array();


 function page($array)

 {

  if(is_array($array)){

     if(!array_key_exists('total',$array))$this->error(__function__,'need a param of total');

     $total=intval($array['total']);

     $perpage=(array_key_exists('perpage',$array))?intval($array['perpage']):10;

     $nowindex=(array_key_exists('nowindex',$array))?intval($array['nowindex']):'';

     $url=(array_key_exists('url',$array))?$array['url']:'';

     $action = (array_key_exists('action', $array)) ? $array['action'] : '';
     $id0 = (array_key_exists('id0', $array)) ? $array['id0'] : '';
  $id1 = (array_key_exists('id1', $array)) ? $array['id1'] : '';
  $id2 = (array_key_exists('id2', $array)) ? $array['id2'] : '';
  $id3 = (array_key_exists('id3', $array)) ? $array['id3'] : '';

  }else{

     $total=$array;

     $perpage=10;

     $nowindex='';

     $url='';

     $action = '';
     $id0 = '';
     $id1 = '';
     $id2 = '';
  $id3 = '';

  }

  if((!is_int($total))||($total<0))$this->error(__function__,$total.' is not a positive integer!');

  if((!is_int($perpage))||($perpage<=0))$this->error(__function__,$perpage.' is not a positive integer!');

  if(!empty($array['page_name']))$this->set('page_name',$array['page_name']);

  $this->_set_nowindex($nowindex);

  $this->_set_url($url);

  $this->totalpage=ceil($total/$perpage);

  $this->offset=($this->nowindex-1)*$perpage;

  $this->action = $action;
  $this->rewrite = array('action'=>$action,'id0'=>$id0, 'id1'=>$id1, 'id2'=>$id2, 'id3'=>$id3);
 }

 function set($var,$value)
 {

  if(in_array($var,get_object_vars($this)))

     $this->$var=$value;

  else {

   $this->error(__function__,$var." does not belong to pb_page!");

  }

 }

 function next_page($style=''){
  if($this->nowindex<$this->totalpage){
  return $this->_get_link($this->_get_url($this->nowindex+1),$this->next_page,$style);
 }
 return '<a class="'.$style.'">'.$this->next_page.'</a>';
 }

 function pre_page($style=''){
  if($this->nowindex>1){
    return $this->_get_link($this->_get_url($this->nowindex-1),$this->pre_page,$style);
  }
  return '<a class="'.$style.'">'.$this->pre_page.'</a>';
 }

 function first_page($style=''){
  if($this->nowindex==1){
     return '<a class="'.$style.'">'.$this->first_page.'</a>';
  }
  return $this->_get_link($this->_get_url(1),$this->first_page,$style);
 }

 function last_page($style=''){
  if($this->nowindex==$this->totalpage||$this->totalpage==0){

      return '<a class="'.$style.'">'.$this->last_page.'</a>';

  }

  return $this->_get_link($this->_get_url($this->totalpage),$this->last_page,$style);

 }


 function nowbar($style='',$nowindex_style='')

 {

  $plus=ceil($this->pagebarnum/2);

  if($this->pagebarnum-$plus+$this->nowindex>$this->totalpage)$plus=($this->pagebarnum-$this->totalpage+$this->nowindex);

  $begin=$this->nowindex-$plus+1;

  $begin=($begin>=1)?$begin:1;

  $return='';

  for($i=$begin;$i<$begin+$this->pagebarnum;$i++)

  {

   if($i<=$this->totalpage){

    if($i!=$this->nowindex)

        $return.=$this->_get_text($this->_get_link($this->_get_url($i),$i,$style));

    else

        $return.=$this->_get_text('<a class="'.$nowindex_style.'">'.$i.'</a>');

   }else{

    break;

   }

   $return.=" ";

  }

  unset($begin);

  return $return;

 }

 /**

  * 获取显示跳转按钮的代码

  *

  * @return string

  */

 function select()

 {

   $return='<select name="pb_page_select">';

  for($i=1;$i<=$this->totalpage;$i++)

  {

   if($i==$this->nowindex){

    $return.='<option value="'.$i.'" selected>'.$i.'</option>';

   }else{

    $return.='<option value="'.$i.'">'.$i.'</option>';

   }

  }

  unset($i);


  $return.='</select>';

  return $return;

 }

 

 /**

  * 获取mysql教程 语句中limit需要的值

  *

  * @return string

  */

 function offset()

 {

  return $this->offset;

 }

 

 /**

  * 控制分页显示风格(你可以增加相应的风格)

  *

  * @param int $mode

  * @return string

  */

 function show($mode=1)

 {

  switch ($mode)

  {

   case '1':

    $this->next_page='下一页';

    $this->pre_page='上一页';

    return $this->pre_page().$this->nowbar().$this->next_page().'第'.$this->select().'页';

    break;

   case '2':

    $this->next_page='下一页';

    $this->pre_page='上一页';

    $this->first_page='首页';

    $this->last_page='尾页';

    return $this->first_page().$this->pre_page().'[第'.$this->nowindex.'页]'.$this->next_page().$this->last_page().'第'.$this->select().'页';

    break;

   case '3':

    $this->next_page='下一页';

    $this->pre_page='上一页';

    $this->first_page='首页';

    $this->last_page='尾页';

    return $this->first_page("page_box")."".$this->pre_page("page_box")."".$this->nowbar("page_box_a","page_box_b")."".$this->next_page("page_box")."".$this->last_page("page_box")."<a class="clear"></a>";

    break;

   case '4':

    $this->next_page='下一页';

    $this->pre_page='上一页';

    return $this->pre_page().$this->nowbar().$this->next_page();

    break;

   case '5':

    return $this->pre_bar().$this->pre_page().$this->nowbar().$this->next_page().$this->next_bar();

    break;

  }

 

 }

 function _set_url($url="")

 {

  if(!empty($url)){

   $this->url=$url.((stristr($url,'?'))?'&':'?').$this->page_name."=";

  }else{

   if(empty($_server['query_string'])){

    $this->url=$_server['request_uri']."?".$this->page_name."=";

   }else{

    if(stristr($_server['query_string'],$this->page_name.'=')){

     $this->url=str_replace($this->page_name.'='.$this->nowindex,'',$_server['request_uri']);

     $last=$this->url[strlen($this->url)-1];

     if($last=='?'||$last=='&'){

         $this->url.=$this->page_name."=";

     }else{

         $this->url.='&'.$this->page_name."=";

     }

    }else{

     $this->url=$_server['request_uri'].'&'.$this->page_name.'=';

    }

   }

  }

 }


 function _set_nowindex($nowindex)

 {

  if(empty($nowindex)){

   if(isset($_get[$this->page_name])){

    $this->nowindex=intval($_get[$this->page_name]);

   }

  }else{

   $this->nowindex=intval($nowindex);

  }

 }

 function _get_url($pageno=1)
 {
  global $_cfg;
  $arr = $this->rewrite;
 //print_r($arr);
 //print_r($this->url.$pageno);
  if($_cfg['urlrewrite'] && !empty($arr['action'])){
   return url_rewrite($arr['action'], array('id0'=>$arr['id0'],'id1'=>$arr['id1'],'id2'=>$arr['id2'],'id3'=>$arr['id3'],'page'=>$pageno));
  }else{
   return $this->url.$pageno;
  }

 }

 function _get_text($str)

 {

  return $this->format_left.$str.$this->format_right;

 }

 function _get_link($url,$text,$style=''){

  $style=(empty($style))?'':'class="'.$style.'"';

  return '<a '.$style.' href="'.$url.'">'.$text.'</a>';

 }


 function error($function,$errormsg)

 {

     die('error in file <b>'.__file__.'</b> ,function <b>'.$function.'()</b> :'.$errormsg);

 }

}
?>

下面这二款函数是二款双字节字符串截取函数,那就是针对中文字符串截取了,好了第一款汉字中文截取函数是越级简洁了,后一款复杂但考虑更多一些。

<?
//php教程 中文字符串截取函数
/*

*/

 代码如下 复制代码
function substr($str = '', $offset = 0, $len = 0){
    $len || ($len = strlen($str));
    preg_match_all('/./us', $str, $result);
    return implode('', array_slice($result[0], $offset, $len));
}

//方法二

 代码如下 复制代码

if (!function_exists('mb_substr')) {
function mb_substr($str, $start, $len = '', $encoding="utf-8"){
  $limit = strlen($str);

  for ($s = 0; $start > 0;--$start) {// found the real start
    if ($s >= $limit)
      break;

    if ($str[$s] <= "")
      ++$s;
    else {
      ++$s; // skip length

      while ($str[$s] >= "€" && $str[$s] <= "�")
        ++$s;
    }
  }

  if ($len == '')
    return substr($str, $s);
  else
    for ($e = $s; $len > 0; --$len) {//found the real end
      if ($e >= $limit)
        break;

      if ($str[$e] <= "")
        ++$e;
      else {
        ++$e;//skip length

        while ($str[$e] >= "€" && $str[$e] <= "�" && $e < $limit)
          ++$e;
      }
    }

  return substr($str, $s, $e - $s);
}
}

?>

这二款文件上传程序是非常简单的,很适合初学者的学习php时的文件上传实例教程哦。
 代码如下 复制代码

if(!$uploadaction):
?>

<html>
<head>
<title>文件上载界面</title>
</head>
<body>

<table>
<tr align="center">
<td><form enctype="multipart/form-data" name="submitform" action="upload.php" method="post">
<input type="hidden" name="max_file_size" value="1000000"><input type="hidden" name="uploadaction" value="1">
</td></tr>
<tr align="center">
<td><input name="uploadfile" type="file" size="30"></td>
</tr>
<tr align="center">
<td><input name="submit" value="提交" type="submit"></td>
<td><input name="reset" value="重置" type="reset"></td>
</tr>
</form>
</table>
</center>
</body>
</html>

<?
else:
?>

<html>
<head>
<title>文件上载代码</title>
</head>
<body>

<?
$uploadaction=0;
echo "good!";
$timelimit=60; /*设置超时限制时间 缺省时间为30秒 设置为0时为不限时 */
set_time_limit($timelimit);

if(($uploadfile !="none" ))
{  
    $uploadpath=addslashes(dirname($path_translated))."\upload\"; //上载文件存放路径

    $filename=$uploadpath.$uploadfile_name; //上载文件名

    if($uploadfile_size < 1024) //上载文件大小
    {
  $filesize=(string)$uploadfile_size." 字节"; 
 }
     elseif ($uploadfile_size <(1024 * 1024))
     {
  $filesize=number_format((double)($uploadfile_size/1024), 1) . " kb";
     }
  else{
  $filesize=number_format((double)($uploadfile_size / (1024 * 1024)), 1) . " mb";
     }
   
    if(!file_exists($filename))
    {
         if(copy($uploadfile,$filename))
         {  echo "文件 $uploadfile_name ($filesize)上载成功!"; }
         else
         { echo "文件 $uploadfile_name上载失败!"; }

         unlink($uploadfile);
    }
    else
    { echo "文件 $uploadfile_name已经存在!"; }
}
else
{ echo "你没有选择任何文件上载!"; }

set_time_limit(30); //恢复缺省超时设置

?>

<br><a href = "upload.php">返回</a>

</body>
</html>

<?
endif;
?>

方法二

<html>
<head>
<title>文件上传</title>
</head>
<body>
<table>
<form enctype="multipart/form-data" name=myform method="post">
<tr><td>文件上传</td><td><input name="myfile" type="file"></td></tr>
<tr><td colspan="2"><input name="submit" value="上传" type="submit">
</form>
<?php
if(isset($submit)){
 if($myfile != "none") {
  $upload_dir = "c:winnt emp";
  $up=copy($myfile,$upload_dir);
  if($up==1) {
   print("文件上传成功!");
  }
  else {
   print ("文件上传失败.");
  }
  unlink ($myfile);
 }
 else {
  print("你没有上传任何文件");   
 }
}
?>
</td></tr>
</table>
</body>
</html>

本文章提供的三款文件下载代码有二款是支持本地服务器文件下载的,另一款支持下载远程服务器上的文件下载到本地哦。
 代码如下 复制代码

function download($file_dir,$file_name)
//参数说明:
//file_dir:文件所在目录
//file_name:文件名
{
    $file_dir = chop($file_dir);//去掉路径中多余的空格
    //得出要下载的文件的路径
    if($file_dir != '')
    {
        $file_path = $file_dir;
        if(substr($file_dir,strlen($file_dir)-1,strlen($file_dir)) != '/')
            $file_path .= '/';
        $file_path .= $file_name;
    }           
    else
        $file_path = $file_name;   
   
    //判断要下载的文件是否存在
    if(!file_exists($file_path))
    {
        echo '对不起,你要下载的文件不存在。';
        return false;
    }

    $file_size = filesize($file_path);
 
    header("content-type: application/octet-stream");
    header("accept-ranges: bytes");
    header("accept-length: $file_size");
    header("content-disposition: attachment; filename=".$file_name);
   
    $fp = fopen($file_path,"r");
    $buffer_size = 1024;
    $cur_pos = 0;
   
    while(!feof($fp)&&$file_size-$cur_pos>$buffer_size)
    {
        $buffer = fread($fp,$buffer_size);
        echo $buffer;
        $cur_pos += $buffer_size;
    }
   
    $buffer = fread($fp,$file_size-$cur_pos);
    echo $buffer;
    fclose($fp);
    return true;

}

?>

<?php 
   

 代码如下 复制代码
$file_name = "info_check.exe";
    $file_dir = "/public/www/download/";
    if (!file_exists($file_dir . $file_name)) { //检查文件是否存在
    echo "文件找不到";
    exit;
    } else {
    $file = fopen($file_dir . $file_name,"r"); // 打开文件
    // 输入文件标签
    header("content-type: application/octet-stream");
    header("accept-ranges: bytes");
    header("accept-length: ".filesize($file_dir . $file_name));
    header("content-disposition: attachment; filename=" . $file_name);
    // 输出文件内容
    echo fread($file,filesize($file_dir . $file_name));
    fclose($file);
    exit;}

?>


<?
// 如果文件路径是http和ftp,下载代码如下:

   

 代码如下 复制代码

$file_name = "info_check.exe";
    $file_dir = " http://www.111cn.net/"; 
    $file = @ fopen($file_dir . $file_name,"r");
    if (!$file) {
    echo "文件找不到";
    } else {
    header("content-type: application/octet-stream");
    header("content-disposition: attachment; filename=" . $file_name);
    while (!feof ($file)) {
    echo fread($file,50000);
    }
    fclose ($file);
    }

    ?>

[!--infotagslink--]

相关文章

  • java8如何用Stream查List对象某属性是否有重复

    这篇文章主要介绍了java8如何用Stream查List对象某属性是否有重复的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-11
  • R语言 如何删除指定变量或对象

    这篇文章主要介绍了R语言删除指定变量或对象的操作方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-06
  • JavaScript预解析,对象详解

    这篇文章主要介绍了JavaScript预解析,对象的的相关资料,小编觉得这篇文章写的还不错,需要的朋友可以参考下,希望能够给你带来帮助...2021-11-10
  • 如何在Spring WebFlux的任何地方获取Request对象

    这篇文章主要介绍了如何在Spring WebFlux的任何地方获取Request对象,帮助大家更好的理解和使用springboot框架,感兴趣的朋友可以了解下...2021-01-26
  • 牛叉的Jquery――Jquery与DOM对象的互相转换及DOM的三种操作

    只有jQuery对象才能调用jQuery类库的各种函数,同样有些dom对象的属性和方法在jQuery上也是无法调用的,不过基本上jQuery类库提供的函数包含了所有的dom操作。这就需要我们知道如何将jQuery对象和DOM的相互转换的方法。1...2015-10-30
  • php精确的统计在线人数的方法

    这是一个非常精确的,通过php实现统计在线人数的方法,想知道怎么实现的请耐心阅读。<&#63;php $filename='online.txt';//数据文件 $cookiename='VGOTCN_OnLineCount';//cookie名称 $onlinetime=600;//在线有效时间,单位:...2015-10-23
  • js如何打印object对象

    js调试中经常会碰到输出的内容是对象而无法打印的时候,光靠alert只能打印出object标示,却不能打印出来里面的内容,甚是不方便,于是各方面整理总结了如下一个函数,能够将数组或者对象这类的结果一一打印出来,具体代码如下: fu...2015-10-21
  • 替换json对象中的key最佳方案

    本文给大家介绍如何替换json对象中的key,通过实例代码给大家介绍key的替换方法,代码也很简单,需要的朋友参考下吧...2021-06-02
  • javascript self对象使用详解

    这篇文章主要介绍了javascript self对象使用详解的相关资料,需要的朋友可以参考下...2016-10-20
  • ActiveX部件不能创建对象:dm.dmsoft代码:800A01AD

    vbs调用插件报:ActiveX部件不能创建对象,代码:800A01AD,一般是因为病毒导致dll文件丢失或者64系统问题导致,需要的朋友可以参考下...2020-06-30
  • 理解JavaScript事件对象

    这篇文章主要为大家介绍了JavaScript事件对象,了解JavaScript事件...2016-01-26
  • Xml中使用foreach遍历对象实现代码

    这篇文章主要介绍了Xml中使用foreach遍历对象实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-12-04
  • 解决SpringCloud Feign传对象参数调用失败的问题

    这篇文章主要介绍了解决SpringCloud Feign传对象参数调用失败的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-06-24
  • JS实现简单面向对象的颜色选择器实例

    这篇文章主要介绍了JS实现简单面向对象的颜色选择器,以完整实例形式分析了JavaScript基于面向对象实现颜色选择器的具体步骤与实现技巧,需要的朋友可以参考下...2016-04-23
  • vue - props 声明数组和对象操作

    这篇文章主要介绍了vue - props 声明数组和对象操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-30
  • 对象题目的一个坑 理解Javascript对象

    这篇文章主要介绍了Javascript对象,特别为大家分享了对象题目的一个坑,提供了解题思路,感兴趣的小伙伴们可以参考一下...2015-12-24
  • JavaScript Blob对象原理及用法详解

    这篇文章主要介绍了JavaScript Blob对象原理及用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-10-14
  • Bootstrap媒体对象的实现

    在web页面中,图片居左,内容居右排列,是非常常见的效果,它也就是媒体对象,它是一种抽象的样式,可以用来构建不同类型的组件。本文给大家介绍Bootstrap媒体对象的实现,感兴趣的朋友一起学习吧...2016-05-04
  • HTML5 FileReader对象的具体使用方法

    这篇文章主要介绍了HTML5 FileReader对象的具体使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-30
  • javascript创建对象的几种模式介绍

    下面小编就为大家带来一篇javascript创建对象的几种模式介绍。小编觉得挺不错的,现在分享给大家,也给大家做个参考...2016-05-09