今天想完成文件上传的功能,说干就干。
首先,我先看了一下网上的视频教程,大致了解一下步骤,
1.首先是要为需要上传的文件创建一个目录,这个目录的路径可以自己设定,但是为了方便管理,一般情况下是以当天日期来作为当天上传的文件的目录。
上传的文件会存为一个临时文件,这个文件的信息会保存在$_FILES超全局变量里,$_FILES数组的内容如下:
$_FILES['myFile']['name'] 客户端文件的原名称。
$_FILES['myFile']['type'] 文件的 MIME 类型,需要浏览器提供该信息的支持,例如"image/gif"。
$_FILES['myFile']['size'] 已上传文件的大小,单位为字节。
$_FILES['myFile']['tmp_name'] 文件被上传后在服务端储存的临时文件名,一般是系统默认。可以在php.ini的upload_tmp_dir 指定,但 用 putenv() 函数设置是不起作用的。
$_FILES['myFile']['error'] 和该文件上传相关的错误代码。['error'] 是在 PHP 4.2.0 版本中增加的。下面是它的说明:(它们在PHP3.0以后成了常量)
UPLOAD_ERR_OK //值:0; 没有错误发生,文件上传成功。
UPLOAD_ERR_INI_SIZE //值:1; 上传的文件超过了 php.ini 中
// upload_max_filesize 选项限制的值。
UPLOAD_ERR_FORM_SIZE //值:2; 上传文件的大小超过了 HTML 表
// 单中 MAX_FILE_SIZE 选项指
// 定的值。
UPLOAD_ERR_PARTIAL //值:3; 文件只有部分被上传。
UPLOAD_ERR_NO_FILE //值:4; 没有文件被上传。
//值:5; 上传文件大小为0.
当error的值除了1和2外,为3是也有可能会是PHPini文件的upload_max_filesize配置项给的数据空间大小的问题。
这个临时文件是有有效期的,我们必须在此脚本结束之前将该临时文件移至我们自己的创建目录里面,同时我们有需要给文件重命名,这里会使用到下面这些字符串函数:
strrchr() -----查找指定字符在字符串中最后一次出现(用来获取文件的后缀);
substr() -----返回字符串的子串,
str_shuffle() ----随机打乱一个字符串
下面这三个函数分别是创建路径、计算随机字符串、截取后缀;
function createDir(){
$path = '/upload/'.date('Y/m/d');
$absPath = ROOT.$path;
if (is_dir($absPath)||mkdir($absPath,0777,true)) {
return $path;
}else{
return false;
}
}
function randStr($num = 6){
$str = str_shuffle('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789');
return substr($str, 0 ,$num);
}
/**
* [getExt description] 获取文件后缀名;
* @return [type] [description] string;
*/
function getExt($name){
return strrchr($name, '.');
}
至此、前面的准备工作算是做完了、接下来就是将上面这些东西用起来.
添加图片的html代码:
<form action="" method="post" enctype="mutipart/form-data">
<div class="">
<label>图片:</label>
<p>
<input type="file" name="pic">
</p>
<button type="submit">提交</button>
</div>
服务器端处理代码:
if (!empty($_FILES)&&$_FILES['pic']['error'] == 0) {
$des = createDir().'/'.randStr().getExt($_FILES['pic']['name']);
if(move_uploaded_file($_FILES['pic']['tmp_name'], ROOT.$des)){
echo "上传成功";
}else{
echo "上传失败"
}
}
此时就在服务器根目录里看一下创建的文件夹里面有没有上传的文件上来,如果有,那么恭喜你,成功了。
到此为止,文件上传的部分算是完成了,接下来有需要的话我们要将上传文件的路径存放在数据库中,这样就可以通过访问此路径而访问到该文件。
小结:
文件上传需要注意的地方:
1.html代码的form表头的enctype属性;
2.几个PHP的ini文件里的配置项要写对;
3.生成的路径要正确,否则无法保存;
4.上的文件大小要在允许范围之内。
----2018.7.5
网友评论