<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>上传v0.1 - 紫游</title>
</head>
<body align = "center">
上传默认2M (100M=104857600) <br />
根据大小命名+原始名称,覆盖文件。<br />
类型"jpg","png","ico","bmp","gif","psd",<br />
"tif","tga","txt","zip","rar","7z","gz",<br />
"mp3","wav","m4a","mp4","3gp"<br />
<br />
<form enctype="multipart/form-data" method="post">
<label for="file">请选择上传的文件</label><br />
<input type="file" name="file" size="40" />
<input type="submit" name="submit" value="确定" />
</form><br />
</body>
<?php
//例子说明:
//该例子只是简单演示了文件上传的流程,请勿直接用于实际项目
//该例子中缺少对用户权限的检查
//如果上传后的文件没有做重命名,则需要做文件重名时的逻辑处理
//写入数据表文件信息由于涉及到数据库操作,暂略。写入数据表的信息应该包括文件上传的时间,上传的用户ID以及存储的位置,以便清理上传无效的文件以及文件过期管理等
//无提交校验,要防止远程提交,可以在表单生成页面产生一个会话ID,然后在upload.php页面做校验以防止远程提交
//配置php.ini文件(以20M以下大小的文件为例)
//查找以下选项并修改->
//file_uploads = On ;
//打开文件上传选项
//upload_max_filesize = 20M ;
//上传文件上限
//如果要上传比较大的文件,必须把服务器缓存上限调大,把脚本最大执行时间变长
//post_max_size = 20M ;post上限
//max_execution_time = 1800 ; 脚本最大执行时间
//max_input_time = 1800 ; 脚本请求解析的最大时间
//memory_limit = 128M ;(128MB)内存上限
//
//'访问者端口:'.0.0.0.0:00000
$VisitorPort = $_SERVER['REMOTE_ADDR'].':'.$_SERVER['REMOTE_PORT'];
echo $VisitorPort.'</br>';
//127.0.0.1:2016/u/uploads
$addrPorturl = 'http://'.$_SERVER['SERVER_NAME'].':2016'.$_SERVER['SCRIPT_NAME'];
$urllujingaddrPorturl = pathinfo($addrPorturl,PATHINFO_DIRNAME);
//只取路径 http://127.0.0.1//u/uploads
$urllujing = 'http://'.$_SERVER['SERVER_NAME'].$_SERVER["REQUEST_URI"];
//$urllujing1 = dirname($urllujing);
$urllujingDIRNAME = pathinfo($urllujing,PATHINFO_DIRNAME);
$urllujingBASENAME = pathinfo($urllujing,PATHINFO_BASENAME);
$urllujingEXTENSION = pathinfo($urllujing,PATHINFO_EXTENSION);
$urllujingFILENAME = pathinfo($urllujing,PATHINFO_FILENAME);
//echo '路径:'.$urllujingDIRNAME.'<br />';
//echo '文件名:'.$urllujingBASENAME.'<br />';
//echo '后缀:'.$urllujingEXTENSION.'<br />';
//echo '名称:'.$urllujingFILENAME.'<br />';
//取服务器IP端口 127.0.0.1:80
$SERVERIPport = $_SERVER["SERVER_ADDR"].':'.$_SERVER["SERVER_PORT"];
//文件存储路径
$file_path="upload/";
//664权限为文件属主和属组用户可读和写,其他用户只读。
if(is_dir($file_path)!=TRUE) mkdir($file_path,0664) ;
//定义允许上传的文件扩展名
$ext_arr = array("jpg","png","ico","bmp","gif","psd","tif","tga","txt","zip","rar","7z","gz","mp3","wav","m4a","mp4","3gp","e");
if (empty($_FILES) === false) {
//判断检查
if($_FILES['file']['size'] > 2097152){
exit("对不起,您上传的照片超过了2M=2097152");
}
if($_FILES["file"]["error"] > 0){
exit("错误:".$_FILES["file"]["error"]);
//值:0; 没有错误发生,文件上传成功。
//值:1; 上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。
//值:2; 上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。
//值:3; 文件只有部分被上传。
//值:4; 没有文件被上传。
}
//检测是否包含字符串同时替换多个关键词
$neirong = $_FILES["file"]["name"];
$nrchazhao = array('?','?','#','@','<','=','>','&','^',' (',')',' ','-','__','——'); //数组 被替换的 ,'《','》'
$nrtihuan = array('_','_','_','_','_','_','_','_','_','(',')','_','_','_','_'); //数组 替换后的
$nrjieguo = str_replace($nrchazhao,$nrtihuan,$neirong,$ii); //字符串 替换后的名称
//---结束检测是否包含字符串同时替换多个关键词
//上传的文件名名称
$FILESname = $nrjieguo;
//文件字节大小
$FILESsize = $_FILES['file']['size'];
//echo "名称: " . $_FILES["file"]["name"] . "<br />";
//echo "类型: " . $_FILES["file"]["type"] . "<br />";
//echo "大小: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
//echo "临时名称: " . $_FILES["file"]["tmp_name"]."<br /> ";
//获得文件扩展名
$temp_arr = explode(".", $FILESname);
$file_ext = array_pop($temp_arr);
$file_ext = trim($file_ext);
$file_ext = strtolower($file_ext);
//echo $FILESsize."<br /> ";
//echo $file_ext."<br /> ";
//检查扩展名
if (in_array($file_ext, $ext_arr) === false) {
exit("上传的文件类型不支持。");
}
//1.以时间戳重命名文件
$new_name = time().".".$file_ext;
//2.根据文件字节大小加名称
$size_name = $FILESsize."_".$FILESname;
//将命名文件移动到存储目录下
//move_uploaded_file($_FILES["file"]["tmp_name"],"$file_path" . $new_name);
move_uploaded_file($_FILES["file"]["tmp_name"],"$file_path" . $size_name);
//向数据表写入文件存储信息以便管理
echo "\n文件上传成功!","<br /> \n";
//完整路径
$Geaddress = $urllujingaddrPorturl.'/'.$file_path.$size_name;
echo 'URL:<a href="'.$Geaddress.'" target="_blank">'.$Geaddress.'</a><br />';
exit;
} else {
echo "上传文件不正确,请检查。";
}
?>