php文件上传简单实例

 更新时间:2016年11月25日 16:27  点击:1810
txt,rar,zip,jpg,jpeg,gif,png,swf,wmv,avi,wma,mp3,mid,jar,jad,exe,html,htm,css,js,doc上传,音乐文件等都可以。
 代码如下 复制代码

<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>php文件上传</title>
</head>

<body>
<form action="uploadsir.php" method="post"  enctype="multipart/form-data"><input name="filedata" type="file" id="filedata" />
<input type="submit" name="submit" value="上传" /></form>
<?php
if(!$_post)die();
$state=uploadfile('filedata');
if($state['err']){
die('<script>alert("上传出错:'.$state['msg'].'");history.go(-1);</script>');
}

echo'<object type="application/x-shockwave-flash" data="template/images/copy.swf?u='.weburl.$state['msg'].'" width="100" height="40">
<param name="movie" value="copy.swf?u='.weburl.$state['msg'].'" />';


function uploadfile($inputname)
{
 $immediate=$_get['immediate'];
 $attachdir='../pictures';//上传文件保存路径,结尾不要带/
 $urldir="../pictures";
 $dirtype=2;//1:按天存入目录 2:按月存入目录 3:按扩展名存目录  建议使用按天存
 $maxattachsize=2097152;//最大上传大小,默认是2m
 $upext='txt,rar,zip,jpg,jpeg,gif,png,swf,wmv,avi,wma,mp3,mid,jar,jad,exe,html,htm,css,js,doc';//上传扩展名
 
 $err = "";
 $msg = "";
 $upfile=$_files[$inputname];
 if(!empty($upfile['error']))
 {
  switch($upfile['error'])
  {
   case '1':
    $err = '文件大小超过了php.ini定义的upload_max_filesize值';
    break;
   case '2':
    $err = '文件大小超过了html定义的max_file_size值';
    break;
   case '3':
    $err = '文件上传不完全';
    break;
   case '4':
    $err = '无文件上传';
    break;
   case '6':
    $err = '缺少临时文件夹';
    break;
   case '7':
    $err = '写文件失败';
    break;
   case '8':
    $err = '上传被其它扩展中断';
    break;
   case '999':
   default:
    $err = '无有效错误代码';
  }
 }
 elseif(empty($upfile['tmp_name']) || $upfile['tmp_name'] == 'none')$err = '无文件上传';
 else
 {
   $temppath=$upfile['tmp_name'];
   $fileinfo=pathinfo($upfile['name']);
   $extension=$fileinfo['extension'];
   if(preg_match('/'.str_replace(',','|',$upext).'/i',$extension))
   {
    $filesize=filesize($temppath);
    if($filesize > $maxattachsize)$err='文件大小超过'.$maxattachsize.'字节';
    else
    {
     switch($dirtype)
     {
      case 1: $attach_subdir = 'day_'.date('ymd'); break;
      case 2: $attach_subdir = 'month_'.date('ym'); break;
      case 3: $attach_subdir = 'ext_'.$extension; break;
     }
     $attach_dir = $attachdir.'/'.$attach_subdir;
     if(!is_dir($attach_dir))
     {
      @mkdir($attach_dir, 0777);
      @fclose(fopen($attach_dir.'/index.htm', 'w'));
     }
     php_version < '4.2.0' && mt_srand((double)microtime() * 1000000);
     $filename=date("ymdhis").mt_rand(1000,9999).'.'.$extension;
     $target = $urldir.'/'.$attach_subdir.'/'.$filename;
     
     move_uploaded_file($upfile['tmp_name'],$target);
     if($immediate=='1')$target='!'.$target;
     $msg=str_replace('../',"",$target);
    }
   }
   else $err='上传文件扩展名必需为:'.$upext;

   @unlink($temppath);
 }
 return array('err'=>$err,'msg'=>$msg);
}
?>
</body>
</html>

浏览器缓存,就完全不是那么回事了,缓存内容存储在浏览器本地,而内容却由web服务器生成,任何一方都不可能独立完成这一系统过程,所以它们之间必须有一种沟通机制,这就是http中的“缓存协商”。
我们先来看一个通常的http请求:
host         www.111cn.net
user-agent         mozilla/5.0 (windows; u; windows nt 6.1; zh-cn; rv:1.9.2.9) gecko/20100824 firefox/3.6.9        firephp教程/0.4
accept         text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
accept-language         zh-cn,zh;q=0.5
accept-encoding         gzip,deflate
accept-charset         gb2312,utf-8;q=0.7,*;q=0.7
keep-alive         115
connection         keep-alive
上面就是一个普通的http请求,为了实现在浏览器缓存控制,我们需要了解http响应头中的四种标记:
last-modified:最后修改gmt时间
etag:通过一串编码来标记内容是否更改过
expires:指定一个过期gmt时间
cache-control:mag-age=相对于浏览器本地的过期秒数(可避免服务器时间不正确的情况下同样起作用)

http返回的状态代码:
200——请求成功
304——客户端已经执行了get,但文件未变化
400——错误请求,如语法错误
500——服务器产生内部错误
501——服务器不支持请求的函数

以下代码使用了以上四种方法来控制浏览器内容缓存一个小时,如果在一小时之内则立即返回304状态码通知浏览器使用本地的内容。这将节省服务器程序执行时间,网络传输时间(仅返回一个头文件)
$modified_time = $_server['http_if_modified_since'];
if (strtotime($modified_time) + 3600 > time()) {
header("http/1.1 304");
exit(0);
}
header("last-modified:" . gmdate("d, d m y h:i:s") . "gmt");
header("expires:" . gmdate("d, d m y h:i:s", time() + 3600) . "gmt");
header("cache-control: max-age=3600");

特别需要说明一下的是:expires需要服务器商支持expires模块默认情况下是不会开启,使用以下命令即可:
a2enmod expires         //启用expires模块
/etc/init.d/apache2 restart        //重启apache服务
我们还可以通过修改http.conf配置中:
expiresactive        on expiresbytype image/gif “access plus 1 month” expiresbytype text/css教程 “now plus 2 day” expiresdefault         “now plus 1 day”
以上是针对静态内容的mime类型来设置过期时间,因为我们无法给静态文件直接指定一个绝对到期时间,所以采用”access plus”式的语法,由web服务器在该内容被请求的时候动态计算一个绝对到期时间,作为expires标记的内容。
值得一提的是,对于常见的静态文件格式,即便是web服务器返回http响应头中没有expires标记,浏览器也会根据一些其它线索猜测一个过期时间,比如ie在某种缓存模式下,对于gif图片设置为永不过期,除非我们配置expires为马上过期,也就是将过期时间设置为当前时间或者0。

本函数php自定义函数是一款建立文件夹的路径并且支持多级目录实例函数哦。
 代码如下 复制代码

 * create_dir(建立文件夹的路径,支持多级目录);
 */
 function create_dir($dir_adds='') {
  $falg = true;
  $dir_adds  = trim($dir_adds);
  if($dir_adds!=''){
   $dir_adds = str_replace(array('//','\','\\'),'/',$dir_adds);
   if (!is_dir($dir_adds)) {
    $temp = explode('/',$dir_adds);
    $cur_dir = '';
    for($i=0;$i<count($temp);$i++){
     $cur_dir .= $temp[$i].'/';
     if (!@is_dir($cur_dir)) {
      if(!@mkdir($cur_dir,0777))
       $falg = false;
     }
    }
   }
   return $falg;
  }
 }
 
 //看一款目录检测并写文件函数
 
 function htm_w(
    $w_dir = '',
    $w_filename = '',
    $w_content = ''
   ){

  $dvs  = '';
  if($w_dir && $w_filename && $w_content){
   //目录检测数量
   $w_dir_ex  = explode('/',$w_dir);
   $w_new_dir = ''; //处理后的写入目录
   unset($dvs,$fdk,$fdv,$w_dir_len);
   foreach((array)$w_dir_ex as $dvs){
    if(trim($dvs) && $dvs!='..'){
     $w_dir_len .= '../';
     $w_new_dir .= $dvs.'/';
     if (!@is_dir($w_new_dir)) @mkdir($w_new_dir, 0777);
    }
   }


   //获得需要更改的目录数
   foreach((array)$this->filedir as $fdk=>$fdv){
    $w_content = str_replace($fdv,$w_dir_len.str_replace('../','',$fdv),$w_content);
   }
   $this->writer($w_dir.$w_filename,$w_content);
  }
 }
 ?>

php 文章内容分页代码,是根据由编辑器插入的分页符来操作了,我们可以分出超漂亮的偏移效果的分页。

 * author:陈凯
 * data:2010-09-15
 * 文章分页类
 */

 代码如下 复制代码

class contentpage
{
 private $content;  //文章内容
 private $pagesize;    //每页最少字节数
 private $breakflag;  //分页符(可以自定义,默认为)
 private $pageurl;  //url地址
 private $pagevar;  //分页参数
 public  $pagecount;  //总页数
 public  $page;   //当前页码
 public  $pagebreak;  //每页起始位置

 function __construct($content = "",$pagesize = 10,$breakflag =" ",$pageurl = '',$pagevar = 'p')
 {
  $this->content   = $content;
  $this->pagesize  = $pagesize;
  $this->breakflag = $breakflag;
  $this->pageurl   = $pageurl;
  $this->pagevar   = $pagevar;
  $this->getpages();
 }

 //总页数,每页的起始位置和结束位置
 public function getpages()
 {
  $contentlen   = strlen($this->content); //文章总字节数
  $this->pagebreak[0] = 0;
  $i = 0;
  $offset = $this->pagesize;
  
  for ($k=0;$k<$contentlen/$this->pagesize;$k++)
  {
   if($offset > $contentlen)
   {
    $i++;
    $this->pagebreak[$i] = $contentlen;
    break;
   }
   //查找$this->pagevar出现的位置
   $where = strpos($this->content,$this->breakflag,$offset);
   if($where > $contentlen or intval($where) < 1)
   {
    $i++;
    $this->pagebreak[$i] = $contentlen;
    break;
   }
   else
   {
    $i++;
    $this->pagebreak[$i] = $where;
    $offset = $where + $this->pagesize;
   }
  }
  $this->pagecount = $i;
  if(isset($_get[$this->pagevar]) && $_get[$this->pagevar] >1 && $_get[$this->pagevar] <= $this->pagecount)
  {
   $this->page = $_get[$this->pagevar];
  }
  else
  {
   $this->page = 1;
  }
 }

 //每页内容
 function getpage()
 {
  //截取当前页码的数据
  if($this->page > 1)
  {
   return substr($this->content,$this->pagebreak[$this->page-1]+1,$this->pagebreak[$this->page] - $this->pagebreak[$this->page-1]);
  }
  else
  {
   return substr($this->content,$this->pagebreak[$this->page-1],$this->pagebreak[$this->page] - $this->pagebreak[$this->page-1]);
  }

 }

 //分页条
 public function getpagenav()
 {
  if($this->page > 1)
  {
   $pagenav = "<a href='".$this->geturl()."=".($this->page-1)."' class='div'>上一页</a>&nbsp;&nbsp;";
  }

  //输出数字页码
  for($j=1;$j<=$this->pagecount;$j++)
  {
   if($j == $this->page)
   {
    $pagenav .= "<span class='divsi'>".$j."</span>&nbsp;&nbsp;";
   }
   else
   {
    $pagenav .= "<a href='".$this->geturl()."=".$j."' class='div'>".$j."</a>&nbsp;&nbsp;";
   }
  }
  //下一页
  if($this->page < $this->pagecount && $this->pagecount >1)
  {
   $pagenav .= "<a href='".$this->geturl()."=".($this->page+1)."' class='div'>下一页</a>&nbsp;&nbsp;";
  }
  return $pagenav;
 }
 //获取url地址
 public function geturl()
 {
  $url = $_server['request_uri'];
  $parse_url = parse_url($url);
  $query_url = $parse_url['query'];
  
  if($query_url)
  {
   $query_url = ereg_replace("(^|&)".$this->pagevar."=".$this->page,"",$query_url);
   $url = str_replace($parse_url['query'],$query_url,$url);
   if($query_url)
   {
    $url .= "&".$this->pagevar;
   }
   else
   {
    $url .= $this->pagevar;
   }
  }
  else
  {
   $url .= "?".$this->pagevar;
  }
  return $url;
 }
}

$content = "第一页:文章内容分页阿斯顿浪费空间阿斯顿来看福建省地方吉林省福建路口附近大手拉飞机上浪费的说浪费监理费
第二页:阿斯顿房间阿双方了解啊对萨拉开发记得谁来付款将令对方空间的来福建阿里是否
第三页:欧文炯诶哦生地拉开方面来看就继续超文章内容分页滤机蓝卡
第四页:欧文日据拉萨及发动四分啊就双方的将爱是发觉是文章内容分页否了。";
$model = new contentpage($content);
echo $model->getpage();  //输出分页内容
echo $model->getpagenav(); //输出页码
?>

<style type="text/css教程">
<!--
body {
 width:800px;
 margin:0 auto;
 margin-top:50px;
 font-size:12px;
}
a {
 color:#014ccc;
 text-decoration:none;
}
.div {
 float:left;
 cursor:pointer;
 font-weight:bold;
 margin-right:5px;
 display: block;
 padding:3px 7px;
 text-align:center;
 border:#bbdded solid 1px;
}
.divs {
 float:left;
 font-weight:bold;
 margin-right:5px;
 display: block;
 padding:3px 7px;
 text-align:center;
 border:#cccccc solid 1px;
}
.divsi {
 float:left;
 font-weight:bold;
 margin-right:5px;
 display: block;
 padding:3px 7px;
 text-align:center;
 background:#3399ff;
 color:#ffffff;
 border:#cccccc solid 1px;
}
.div:hover {
 background:#3399ff;
 color:#ffffff;
}
.divsi:hover {
 background:#3399ff;
 color:#ffffff;
}

-->
</style>

本文章提供一款php目录管理程序,他可以对目录下的文件,文件夹,等各种文件进行管理删除操作,可以支持无限级目录的管理哦。
 代码如下 复制代码

include("class.php");
$path = $_get['path'];
if($path == ""){
 $path = "dir"; 
}else{
 if(!strstr($path,"dir")){
  $path = "dir/".$path;
 }else{
  $path = $path; 
 }
}

$newdir = new dirver();
$newdir -> setpath($path);
$newdir -> dirdata();
$files = $newdir -> getfiles();
$dirs = $newdir -> getdirs();
//print_r($files);
//print_r($dirs);

echo('<link href="style.css教程" rel="stylesheet" type="text/css" />');
$max = 3;
$j = 0;
if(count($dirs) == 2){
echo'<table width="800" border="0" cellpadding="5" cellspacing="5"><tr>';
 print("<td width='33%'><img src='type/dir.png'/>");
 print('<a href="test.php?path='.$path."/".$dirs[0].'">');
 print($dirs[0]);
 print('</a>');
 print("</td>");
 print("<td width='33%'><img src='type/dir.png'/>");
 print('<a href="test.php?path='.$path."/".$dirs[1].'">');
 print($dirs[1]);
 print('</a>');
 print("</td>");
 print("<td width='33%'>");
 print("&nbsp;&nbsp;");
 print("</td>");
 echo '</tr></table>';
}else{
echo'<table width="800" border="0" cellpadding="5" cellspacing="5"><tr>';
while($j <= (count($dirs) -1)){
 print("<td ><img src='type/dir.png'/>");
 print('<a href="test.php?path='.$path."/".$dirs[$j].'">');
 print($dirs[$j]);
 print('</a>');
 print("</td>");
 if(($j + 1) % $max == 0){
   echo '</tr>';
   if(($j + 1) != count($dirs)){
    echo '<tr>';
     }
  }
  $j++;
 }
 echo '</tr></table>';
}
$i = 0;
if(count($files) == 2){
echo'<table width="800" border="0" cellpadding="5" cellspacing="5"><tr>';
 print("<td width='33%'><img src='type/".$newdir -> getfiletype($files[0]).".png'/>&nbsp;");
 print($newdir -> change2line($files[0]));
 print("</td>");
 print("<td width='33%'><img src='type/".$newdir -> getfiletype($files[1]).".png'/>&nbsp;");
 print($newdir -> change2line($files[1]));
 print("</td>");
 print("<td width='33%'>");
 print("&nbsp;&nbsp;");
 print("</td>");
 echo '</tr></table>';
}else{
echo'<table width="800" border="0" cellpadding="5" cellspacing="5"><tr>';
while($i <= (count($files) -1)){
 print("<td width=100><img src='type/".$newdir -> getfiletype($files[$i]).".png'/>&nbsp;");
 print($newdir -> change2line($files[$i])); 
 print("</td>");
 if(($i + 1) % 3 == 0){
   echo '</tr>';
   if(($i + 1) != count($files)){
    echo '<tr>';
    }
 }
 
 $i++;
}
 echo '</tr></table>';
}
?>


class.php

<?php
  class for php4.x
 class  dirver{
  /class var/
  var $path;
  var $flies;
  var $dirs;
  /
  function dirver(){
   $this -> path = ""; 
   $this -> files = array();
   $this -> dirs = array();
  }
  
  function dirdata(){
   if(isset($this -> path)){
    $handle = dir($this -> path);
    while(false !== ($data = $handle -> read())){
     if(is_dir($this -> connectname($this -> path,$data)) && $data != "." && $data != ".."){
       $this -> dirs[] = $data;
       continue;
      }
      
     if($data != "." && $data != ".." && is_file($this -> connectname($this -> path,$data))){
       $this -> files[] = $data;
       continue;
      }
     
    }
    $handle -> close(); 
   }else{
    return false; 
   }
  }
  
 function setpath($src){
   if($src != ""){
    $this -> path = $src; 
   }else{
    return false; 
   }
  }
 /
 function connectname($path,$name){
  return $path."/".$name;
 }
 /
 function change2line($name){
  $basename = explode(".",$name);
  $basename = $basename[0];
  $tmp = $this -> path."/".$name;
  $tmp = '<a href="'.$tmp.'" target="_blank">'.$basename.'</a>';
  return $tmp; 
 }
 
 function getfiletype($file){
  if($file != ""){
   $tmp = explode(".",$file);
   $type = $tmp[count($tmp)-1];
   return $type; 
  }
 }
 
 
 function getfiles(){
  return $this -> files;
  }
 
 function getdirs(){
  return $this -> dirs; 
  }
 //
 }

?>

[!--infotagslink--]

相关文章

  • php读取zip文件(删除文件,提取文件,增加文件)实例

    下面小编来给大家演示几个php操作zip文件的实例,我们可以读取zip包中指定文件与删除zip包中指定文件,下面来给大这介绍一下。 从zip压缩文件中提取文件 代...2016-11-25
  • Jupyter Notebook读取csv文件出现的问题及解决

    这篇文章主要介绍了JupyterNotebook读取csv文件出现的问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2023-01-06
  • Photoshop打开PSD文件空白怎么解决

    有时我们接受或下载到的PSD文件打开是空白的,那么我们要如何来解决这个 问题了,下面一聚教程小伙伴就为各位介绍Photoshop打开PSD文件空白解决办法。 1、如我们打开...2016-09-14
  • 解决python 使用openpyxl读写大文件的坑

    这篇文章主要介绍了解决python 使用openpyxl读写大文件的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-13
  • C#实现HTTP下载文件的方法

    这篇文章主要介绍了C#实现HTTP下载文件的方法,包括了HTTP通信的创建、本地文件的写入等,非常具有实用价值,需要的朋友可以参考下...2020-06-25
  • SpringBoot实现excel文件生成和下载

    这篇文章主要为大家详细介绍了SpringBoot实现excel文件生成和下载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-09
  • C#操作本地文件及保存文件到数据库的基本方法总结

    C#使用System.IO中的文件操作方法在Windows系统中处理本地文件相当顺手,这里我们还总结了在Oracle中保存文件的方法,嗯,接下来就来看看整理的C#操作本地文件及保存文件到数据库的基本方法总结...2020-06-25
  • php无刷新利用iframe实现页面无刷新上传文件(1/2)

    利用form表单的target属性和iframe 一、上传文件的一个php教程方法。 该方法接受一个$file参数,该参数为从客户端获取的$_files变量,返回重新命名后的文件名,如果上传失...2016-11-25
  • Php文件上传类class.upload.php用法示例

    本文章来人大家介绍一个php文件上传类的使用方法,期望此实例对各位php入门者会有不小帮助哦。 简介 Class.upload.php是用于管理上传文件的php文件上传类, 它可以帮...2016-11-25
  • php批量替换内容或指定目录下所有文件内容

    要替换字符串中的内容我们只要利用php相关函数,如strstr,str_replace,正则表达式了,那么我们要替换目录所有文件的内容就需要先遍历目录再打开文件再利用上面讲的函数替...2016-11-25
  • PHP文件上传一些小收获

    又码了一个周末的代码,这次在做一些关于文件上传的东西。(PHP UPLOAD)小有收获项目是一个BT种子列表,用户有权限上传自己的种子,然后配合BT TRACK服务器把种子的信息写出来...2016-11-25
  • jQuery实现简单的文件上传进度条效果

    本文实例讲述了jQuery实现文件上传进度条效果的代码。分享给大家供大家参考。具体如下: 运行效果截图如下:具体代码如下:<!DOCTYPE html><html><head><meta charset="utf-8"><title>upload</title><link rel="stylesheet...2015-11-24
  • Zend studio文件注释模板设置方法

    步骤:Window -> PHP -> Editor -> Templates,这里可以设置(增、删、改、导入等)管理你的模板。新建文件注释、函数注释、代码块等模板的实例新建模板,分别输入Name、Description、Patterna)文件注释Name: 3cfileDescriptio...2013-10-04
  • AI源文件转photoshop图像变模糊问题解决教程

    今天小编在这里就来给photoshop的这一款软件的使用者们来说下AI源文件转photoshop图像变模糊问题的解决教程,各位想知道具体解决方法的使用者们,那么下面就快来跟着小编...2016-09-14
  • C++万能库头文件在vs中的安装步骤(图文)

    这篇文章主要介绍了C++万能库头文件在vs中的安装步骤(图文),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-23
  • php文件上传你必须知道的几点

    本篇文章主要说明的是与php文件上传的相关配置的知识点。PHP文件上传功能配置主要涉及php.ini配置文件中的upload_tmp_dir、upload_max_filesize、post_max_size等选项,下面一一说明。打开php.ini配置文件找到File Upl...2015-10-21
  • ant design中upload组件上传大文件,显示进度条进度的实例

    这篇文章主要介绍了ant design中upload组件上传大文件,显示进度条进度的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-10-29
  • C#使用StreamWriter写入文件的方法

    这篇文章主要介绍了C#使用StreamWriter写入文件的方法,涉及C#中StreamWriter类操作文件的相关技巧,需要的朋友可以参考下...2020-06-25
  • php实现文件下载实例分享

    举一个案例:复制代码 代码如下:<?phpclass Downfile { function downserver($file_name){$file_path = "./img/".$file_name;//转码,文件名转为gb2312解决中文乱码$file_name = iconv("utf-8","gb2312",$file_name...2014-06-07
  • EXCEL数据上传到SQL SERVER中的简单实现方法

    EXCEL数据上传到SQL SERVER中的方法需要注意到三点!注意点一:要把EXCEL数据上传到SQL SERVER中必须提前把EXCEL传到服务器上.做法: 在ASP.NET环境中,添加一个FileUpload上传控件后台代码的E.X: 复制代码 代码如下: if...2013-09-23