格式问题:

设置成:   multipart/form-data    才能完整的传递文件数据

<form enctype="multipart/form-data" method="post" name="upform">    <!-- 格式设置 -->

<input name="upfile" type="file">    

PHP上传文件_php



是预定义超级全局数组中唯一的二维数组,用于存储与上传文件相关的各种信息)

$_FILES['myFile']['name']   客户端文件的原名称。 

$_FILES['myFile']['type']   文件的 MIME 类型,例如"image"。 

$_FILES['myFile']['size']   已上传文件的大小,单位为字节。 

$_FILES['myFile']['tmp_name']   储存的临时文件名,一般是系统默认。 

$_FILES['myFile']['error']   该文件上传相关的错误代码。 

关于$_FILES['myFile']['error']:

0:文件上传成功。 

1:超过了php.ini中限制的文件大小。 

2:超过了文件大小       MAX_FILE_SIZE 选项指定的值。 

文件只有部分被上传。 

4:没有文件被上传。 

5:上传文件大小为0。


move_uploaded_file用于移动文件:

move_uploaded_file(临时文件,目标位置和文件名);  


判断是否上传成功:

is_uploaded_file 函数 

<?php
print_r($_FILES["upfile"]);
?>
<form enctype="multipart/form-data" method="post" name="upform">
上传:<input name="upfile" type="file">
<input type="submit" value="上传">
<!--
Array ( [name] => 捕获.JPG [type] => image/jpeg [tmp_name] => D:\wamp\tmp\php6491.tmp [error] => 0 [size] => 14061 )
-->

遇到的问题及解决:

Undefined index: upfile

没有上传文件,所以会出现这样的提示,用@屏蔽之

move_uploaded_file(up/matrix.JPG): failed to open stream: No such file or directory

不用相对路径,使用绝对路径:

例如:

move_uploaded_file($file['tmp_name'],'up/'.$file['name']);

改成:

move_uploaded_file($file['tmp_name'],'D:/wamp/www/up/'.$file['name']);

本想做一个图片预览,但是却显示不出来。查了查,现在很多浏览器 不支持预览本地图片,实现预览服务器上的文件是可以的。

<title>upfile</title>  
<?php
function check($type,$size){
$ok=1;
$tag1=0;
$tag2=0;
$sizeLimit=2000000; // 200W B '=' 2M
switch($type){ //限制上传类型
case 'image/jpeg':
$tag1=1;
break;
case 'image/jpg':
$tag1=1;
break;
case 'image/png':
$tag1=1;
break;
}
if($size<=$sizeLimit) $tag2=1;
if($tag1==0&&$tag2==0) return -3; // type 和 size 两个条件均不符合
if($tag1==0) return -1;
if($tag2==0) return -2;
return 0; // OK
}
if(@is_uploaded_file($_FILES['upfile']['tmp_name'])==true){
$file=$_FILES['upfile'];
$type=$file['type'];
$ok=check($type,$file['size']);
if($ok==-3) {
echo "<script> alert('Image type is wrong and size > 2M.') </script>"; // javascript
}
else if($ok==-1){
echo "<script> alert('Image type is wrong.') </script>";
}
else if($ok==-2){
echo "<script> alert('Image size > 2M.') </script>";
}
else {
if($file['error']==0){
$dest='D:/wamp/www/up/';
$r=move_uploaded_file($file['tmp_name'],"".$dest.$file['name']);
if($r) echo "<script> alert('上传成功') </script>";
}
else echo $file['error'];
}
}
?>
<form enctype="multipart/form-data" method="post" name="upform">
上传:<input name="upfile" type="file">
<input type="submit" value="上传">

效果:

合格文件:

PHP上传文件_上传_02


type不对:

PHP上传文件_php_03



type和size都不对:

PHP上传文件_上传文件_04