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> ";
}
//输出数字页码
for($j=1;$j<=$this->pagecount;$j++)
{
if($j == $this->page)
{
$pagenav .= "<span class='divsi'>".$j."</span> ";
}
else
{
$pagenav .= "<a href='".$this->geturl()."=".$j."' class='div'>".$j."</a> ";
}
}
//下一页
if($this->page < $this->pagecount && $this->pagecount >1)
{
$pagenav .= "<a href='".$this->geturl()."=".($this->page+1)."' class='div'>下一页</a> ";
}
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(" ");
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'/> ");
print($newdir -> change2line($files[0]));
print("</td>");
print("<td width='33%'><img src='type/".$newdir -> getfiletype($files[1]).".png'/> ");
print($newdir -> change2line($files[1]));
print("</td>");
print("<td width='33%'>");
print(" ");
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'/> ");
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;
}
//
}
|
?>