Puock主题已经正式发售,一款颜值在线的多功能WordPress主题,赶快戳我来看看吧

PHP无刷新上传文件(非AJAX)

1,999次阅读
8条评论

前言

在PHP中,我们一般写的form表单都是会进行跳转到另外一个页面进行数据操作的,其中我们也可以用到例如像Ajax一样的技术来让数据进行无刷新的操作,这次就分享一下非Ajax无刷新上传文件的教程。

教程

在这个例子中,会用到一个HTMLiframe标签,该标签介绍请进入:W3C
多余的话就不多说,直接上代码。

index.php

<!DOCTYPE html>
<meta charset="utf-8" />
<title>文件上传</title>
<script type="text/javascript">
        function startUpload() {
             document.getElementById('processing').innerHTML = 'loding...';
            return true;
        }
        function stopUpload(rel){
          var msg = '<img style="width: 300px;height: 200px;" src="'+rel+'" />';
            document.getElementById('processing').innerHTML = msg;
        }
    </script>
<body>
	<div id="processing"></div>
	<form method="post" enctype="multipart/form-data" action="newfile.php" target="form-target" onsubmit="startUpload();">
		<input type="file" name="file" />
		<input type="submit" name="sub" value="上传" />
	</form>
	<iframe style="width:0; height:0; border:0;" name="form-target"></iframe>
</body>

newfile.php

<?php
/*
 * 该代码来自憧憬点滴记忆 https://www.licoy.cn/1863.html
 * 转载请注明出处
 */
require "file.class.php";
$file = new FileUpload;
$file->Uploads();
$code = $file->GetErrorCode();
$dir = $file->GetUploadInfo();
?>
<script type="text/javascript">
window.top.window.stopUpload('<?php echo dirname($_SERVER['REQUEST_URI'])."/".$dir['fileDir'] ?>');
</script>
下面分享一个我写的文件上传类,有获取上传信息,获取上传错误,获取上传错误注释等等功能。

file.class.php

/*
 * 该代码来自憧憬点滴记忆 https://www.licoy.cn/1863.html
 * 转载请注明出处
 */
class FileUpload{
	/*
	 * 文件上传信息
	 */
	private $fileName;	//文件名
	private $fileType;	//文件类型
	private $fileSize;	//文件大小
	private $fileTmpName;	//文件临时存储位置
	private $fileError;	//上传错误信息
	private $otherError; //其他错误信息
	private $fileDir; //最终路径
	/*
	 * 文件上传设置
	 */
	 private $path = 'uploads';	//文件上传位置
	 private $type = array(
	 	'jpg','png','gif','jpeg','zip','mp4'
	 );						//允许上传的文件类型
	 private $size = 20480000; //字节为单位
	 private $randName = TRUE; //随机名,为false关闭
	 /*
	  *构造函数
	  */
	 public function __construct(){
	 	$this->fileName = $_FILES["file"]["name"];
		$this->fileType = $_FILES["file"]["type"];
		$this->fileSize = $_FILES["file"]["size"];
		$this->fileTmpName = $_FILES["file"]["tmp_name"];
		$this->fileError = $_FILES["file"]["error"];
		if($this->randName){
			$this->fileName = date("Y-m-d-H-i-s",time()).".".$this->fileTypeName();
		}
	 }
	 /*
	  * 文件上传
	  */
	 public function Uploads(){
	 		if($this->checkFileSize()){
	 			if($this->checkFileType()){
	 				if($this->checkFileDir()){
	 					$this->fileDir = $this->path."/".$this->fileName;
	 					if(!move_uploaded_file($this->fileTmpName,$this->fileDir)){
	 						$this->otherError = 0;	
	 						return false;
	 					}
						else{
							$this->otherError = 1;
							return true;
						}
	 				}
	 			}
	 		}
	 }
	 /*
	  * 获取文件后缀名
	  */
	 private function fileTypeName(){
	 	$typeArr = explode(".", $this->fileName);
		$count = count($typeArr);
		return $typeArr[$count-1];
	 }
	 /*
	  * 检测文件大小是否符合设置
	  */
	 private function checkFileSize(){
		 	if($this->fileSize < $this->size){
		 		return true;
			}
			else{
				$this->otherError = -1;
				return false;
			}
	 }
	 /*
	  * 检测文件类型是否符合规定
	  */
	 private function checkFileType(){
	 	$typeArr = explode(".", $this->fileName);
		$count = count($typeArr);
	 	if(in_array(strtolower($typeArr[$count-1]), $this->type)) {
	        return true;
	    }else {
	        $this->otherError = -2;
	        return false;
  		}
	 }
	 /*
	  * 检测目录是否存在
	  */
	 private function checkFileDir(){
	 	if(file_exists($this->path)){
	 		return true;
	 	}
		else{
			$this->otherError = -3;
	        return false;
		}
	 }
	 /*
	  * 不存在目录可调用此方法创建文件夹
	  */
	 public function mkdirs(){
	 	mkdir($this->path);
		chmod($this->path,0777);
	 }
	 /*
	  * 获取错误信息
	  */
	public function GetError(){
		switch($this->otherError){
			case -1 : $errorStr = "文件过大!";break;
			case -2 : $errorStr = "文件不符合规定!";break;
			case -3 : $errorStr = "不存在上传目录!";break;
			case 1 : $errorStr = "上传成功!";break;
			case 0 : $errorStr = "上传失败!";break;
			default : $errorStr = '未知';
		}
		return $errorStr;
	}
	/*
	 * 获取错误码
	 */
	 public function GetErrorCode(){
	 	return $this->otherError;
	 }
	/*
	 * 获取文件上传信息
	 */
	 public function GetUploadInfo(){
	 	$infoArr = array (
	 		'fileName' => $this->fileName,
			'fileType' => $this->fileType,
			'fileSize' => $this->fileSize,
			'fileTmpName' => $this->fileTmpName,
			'fileError' => $this->fileError,
			'fileDir' => $this->fileDir
	 	);
		return $infoArr;
	 }
	 

}//FileUploads_Class_End

7
憧憬Licoy
版权声明:本站原创文章,由憧憬Licoy于2016年08月06日发表,共计5218字。
转载提示:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(8条评论)
Loading...
孟子非博客 评论达人LV.2
2016-08-10 18:19:08 回复

好久没更新了啊

小C博客 评论达人LV.1
2016-08-09 20:08:49 回复

一般都是用js+ajax

森云 评论达人LV.2
2016-08-08 21:23:01 回复

都是大神级别了啊

Koolight 评论达人LV.3
2016-08-07 15:26:44 回复

又上升一个层次了,再膜拜下!