- 对文件上传,不需要使用传统的编码之后上传,所以在
form
的属性要加上enctype = "multipart/form-data"
,即不对文件编码。
默认情况下是
enctype = "application/x-www-form-urlencoded"
使用
enctype = "text/plain"
,只对空格编码,编程
+。
- php使用
$_FILES
来接收文件。 - php端保存的5个信息:
- name:文件在客户端本地的文件名字。
- type:文件的类型。
- tmp_name:文件在服务器端操作系统接收后保存的临时文件名字:默认是操作系统临时文件目录(可以通过php配置文件修改)。
- error:错误代码
- 0:没有错误,上传成功。
- 1:上传的文件超过了
php.ini
中upload_max_filesize选项的值。 - 2:上传的文件超过了HTML表单中MAX_FILE_SIZE的值。
- 3:文件只有部分被上传。
- 4:没有文件被上传。
- 6:找不到临时文件夹。php 4.3.10和php5.0.3引入。
- 7:文件写入失败。php 5.1.0引入。
- size:文件大小。
- 文件从临时目录移动到上传目录
<?php
$file = $_FILES["file"];
if($file["error"] == 0) {
move_upload_file($file["tmp_name"], "目标位置目标文件");
}
?>
- 文件上传函数
<?php
function fileupload($file, $path, &$error, $type = array(), $size = 2000000){
if(!isset($file["error"])) {
$error = "文件无效";
return false;
}
if(!is_dir($path)) {
$error = "存储路径无效";
return false;
}
switch ($file["error"]) {
case 1:
case 2:
$error = "文件超过服务器允许大小";
return false;
case 3:
$error = "文件只有部分上传成功";
return false;
case 4:
$error = "用户没有选择要上传的文件";
return false;
case 6:
case 7:
$error = "服务器操作失败";
return false;
}
if(!empty($type) && !in_array($file["type"], $type)) {
$error = "当前上传类型不符合";
return false;
}
if($file["size"] > $size) {
$error = "文件大小超过当前允许范围当前允许的大小是:".string($size/1000000)."M";
return false;
}
$newfilename = getNewName($file["name"]);
if(move_uploaded_file($file["tmp_name"], $path."".$newfilename)) {
return $newfilename;
} else {
$error = "文件上传失败";
return false;
}
}
function getNewName($filename) {
$newname = date("YmdHis");
$old = array_merge(range("a", "z"), range("A", "Z"));
shuffle($old);
$newname += $old[0].$old[1].$old[2].$old[3].$old[4].$old[5];
return $newname.strstr($filename, ".");
}
?>