form.html
<form enctype="multipart/form-data" method="post" target="upload" action="upload.php" > <input type="file" name="uploadfile" /> <input type="submit" /> </form> <iframe name="upload" style="display:none"></iframe> <!--和一般的<form>标签相比多了一个target属性罢了,用于指定标签页在哪里打开以及提交数据。 如果没有设置该属性,就会像平常一样在本页重定向打开action中的url。 而如果设置为iframe的name值,即"upload"的话,就会在该iframe内打开,因为CSS设置为隐藏,因而不会有任何动静。若将display:none去掉,还会看到服务器的返回信息。 -->
upload.php
<?php
header("Content-type:text/html;charset=utf-8");
class upload{
public $_file;
public function __construct(){
if(!isset($_FILES['uploadfile'])){
$name=key($_FILES);
}
if(!isset($_FILES['uploadfile'])){
throw new Exception("并没有文件上传");
}
$this->_file=$_FILES['uploadfile']; //$this->_file一维数组
var_dump($this->_file);
//判断文件是否是通过 HTTP POST 上传的
//如果 filename 所给出的文件是通过 HTTP POST 上传的则返回 TRUE。这可以用来确保恶意的用户无法欺骗脚本去访问本不能访问的文件,例如 /etc/passwd。
if(!is_uploaded_file($this->_file['tmp_name']))
throw new Exception("异常情况");
if($this->_file['error'] !== 0)
throw new Exception("错误代码:".$this->_file['error']);
}
public function moveTo($new_dir){
$real_dir=$this->checkDir($new_dir).'/';
$real_dir=str_replace("\\","/",$real_dir);
if(!move_uploaded_file($this->_file['tmp_name'],$real_dir.$this->_file['name'])){
exit('上传失败');
}
echo "<script type='text/javascript'>alert('上传成功')</script>";
}
public function checkDir($dir){
if(!file_exists($dir)){
mkdir($dir,0777,true);
}
return realpath($dir);
}
}
$upload=new upload();
$new_dir="./a/b";
$upload->moveTo($new_dir);
?>
来源:https://www.cnblogs.com/loveyouyou616/archive/2013/01/07/2848717.html