通过 PHP把文件上传到服务器。
index.php文件
<!DOCTYPE >
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>上传文件-炫代码</title>
</head>
<body>
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="myfile" size="20" />
<input class="two" type="submit" name="sub" value="上传" />
</form>
<?php
//点击按钮时
if(isset($_POST['sub'])){
if($_FILES['myfile']['error']>0){ //判断文件是否可以上传到服务器
echo "上传错误:";
switch($_FILES['myfile']['error']){
case 1:
echo "上传文件大小超出配置文件规定值";
break;
case 2:
echo "上传文件大小超出表单中约定值";
break;
case 3:
echo "上传文件不全";
break;
case 4:
echo "没有上传文件";
break;
}
}else{
$type=$_FILES['myfile']['name'];
$types=strstr($type,'.');//截取字符串
if($types==".txt"){
//1024字节等于1KB 1024KB等于1MB 1024MB等于1GB
if($_FILES["myfile"]['size'] > 0 && $_FILES["myfile"]['size'] < 1024 * 2000){//自定义限制大小
$dir = 'myfiles/'; //上传目录
$name = $_FILES["myfile"]['name'];
$rand = rand(0,10000);//随机生成数
$name = $rand.@date('YmdHis').$name;//重新命名防止文件名重复
$path = 'myfiles/'.$name;
if(!is_dir($dir)){//如果目录不存在
mkdir($dir);//新建目录
}
$move = move_uploaded_file($_FILES["myfile"]['tmp_name'],$path);
if($move == true){
echo "<script>alert('上传文件成功');</script>";
echo "上传文件明: " . $_FILES["myfile"]["name"] . "<br />";
echo "上传类型: " . $_FILES["myfile"]["type"] . "<br />";
echo "文件大小: " . ($_FILES["myfile"]["size"]) . " b(字节)<br />";
echo "副本的名称: " . $_FILES["myfile"]["tmp_name"];
}
}else{
echo "<script>alert('上传文件过大');</script>";
}
}else{
echo "上传文件".$_FILES['myfile']['name']."类型不正确!";
}
}
}
?>
</body>
</html><form> 标签的 enctype 属性规定了在提交表单时要使用哪种内容类型。在表单需要二进制数据时,比如文件内容,请使用 "multipart/form-data"。
| 参数名 | 描述 |
|---|---|
| $_FILES['myFile']['name'] | 客户端文件的原名称 |
| $_FILES['myFile']['type'] | 文件的 MIME 类型,需要浏览器提供该信息的支持,例如"image/gif"。 |
| $_FILES['myFile']['size'] | 已上传文件的大小,单位为字节。 |
| $_FILES['myFile']['tmp_name'] | 文件被上传后在服务端储存的临时文件名。 |
| $_FILES['myFile']['error'] | 和该文件上传相关的错误代码。此项目是在 PHP 4.2.0 版本中增加的。 |
$_FILES['myFile']的"myFile"是from表单的file元素的name属性名称。
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,没有文件被上传。
UPLOAD_ERR_NO_TMP_DIR
其值为 6,找不到临时文件夹。PHP 4.3.10 和 PHP 5.0.3 引进。
UPLOAD_ERR_CANT_WRITE
其值为 7,文件写入失败。PHP 5.1.0 引进。
文件被上传后,默认地会被储存到服务端的默认临时目录中,除非 php.ini 中的 upload_tmp_dir 设置为其它的路径。服务端的默认临时目录可以通过更改 PHP 运行环境的环境变量 TMPDIR 来重新设置,但是在 PHP 脚本内部通过运行 putenv() 函数来设置是不起作用的。该环境变量也可以用来确认其它的操作也是在上传的文件上进行的。所以用move_uploaded_file()函数将它复制到其它位置,此时,才算完成了上传文件过程。
move_uploaded_file()函数将文件上传到服务器中指定的位置。如果成功返回TRUE,否则返回FALSE。
语法:
bool move_uploaded_file ( string $filename , string $destination ) move_uploaded_file("临时文件名","新路径和名称") |
| 参数名 | 默认值 | 描述 |
|---|---|---|
| file_uploads | on | 是否允许HTTP文件上载,如果值是off,为否,如果是on,则为是 |
| max_execution_time | 30 | 每个脚本的最大执行时间(以秒为单位),如果上传时间大于最大执行时间则无法上传。 |
| memory_limit | 128 M | 脚本可能消耗的最大内存量。单位为MB,其大小会影响文件上传。 |
| upload_tmp_dir | NULL | HTTP上传文件的临时目录,多数使用系统的默认目录,也可以自行设置。 |
| upload_max_filesize | 2M | 上传文件的最大允许文件的大小,以MB为单位。如果要上传大于文件最大值,就要修改这个值。 |
| max_file_uploads | 20 | 可以通过单个请求上载的最大文件数 |