通过 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 | 可以通过单个请求上载的最大文件数 |