fileupload.php:
/**
* php上传文件时的配置:
* 1.file_uploads = on|off :确定服务器上的php脚本是否可以接受上传文件
* 2.max_execution_time = integer :php脚本在注册一个致命错误之前可以执行的最长时间,以秒为单位
* 3.memory_limit = integer :设置脚本可以分配到的最大内存,以MB为单位。这可以防止失控的脚本独占服务器内存
* 4.upload_max_filesize = integer :设置上传文件的大小,以MB为单位,此指令必须小于post_max_size的值
* 5.upload_tmp_dir = string :设置上传文件在处理之前必须存放在服务器的一个临时位置,直到文件移动到最终目的为止
* 6.post_max_size = integer :确定通过post方法可以接受的信息大小,以MB为单位
*/
//要上传文件,必须要表单.详细解析如下;
/**
* ENCTYPE="mult ipart/form-data" ,这里是固定写法,否则文件上传失败
ACTION="upload.php" ,定义要处理上传的程序文件路径
METHOD="post" ,定义传输方式为 POST ,一般情况下 Form 提交数据都设置为 POST
< input type="hidden" name="MAX_FILE_SIZE" value="10000000" >,这是一个隐藏域, value的值(以字节B为单位)定
义了上传文件的大小上限,超过这个值时,上传失败。它必须定义在文件上传域的前面 .
而且这里定义的值不 能超过在 php.ini 文件中 upload_max_filesize 设置的值 , 否则没有意
义了 . (注意: MAX_FILE_SIZE 的值只是对浏览器的一个建议,实际上它可以被简单 的
绕过。因此不要把对浏览器的限制寄希望于该值。实际上, PHP.ini 设置中的上传文件最
大值,是不会 失效的。但是最好还是在表单中加上 MAX_FILE_SIZE ,因为它可以避
免用户在花时间等待上传大文件之后才发现该文件太大了的麻烦。)
1MB=1024KB,1KB=1024B,B是byte。
, 这是文件上传域 ,Type 属性必须设置为 file, 但 Name属性
可以自定义 , 这个值会在代码文件中使用 .
*
*/
?>
上传文件:
upload.php:
/**
* 接受上传文件
* $_FILES 超级全局变量,它储存各种与上传有关的信息,这些信息对于通过 PHP 脚本
上传到服务器的文件至关重要。
1. 存储在 $_FILES["userfile"]["tmp_name"] 变量中的值就是文件在 Web 服务器中临时存
储的位置。
2. 存储在 $_FILES["userfile"]["name"] 变量中的值就是用户系统中的文件名称。
3. 存储在 $_FILES["userfile"]["size"] 变量中的值就是文件的字节大小。
4. 存储在 $_FILES["userfile"]["type"] 变量中的值就是文件的 MIME 类型,例如: text/plain
或 image/gif 。
5. 存储在 $_FILES["userfile"]["error"] 变量中的值将是任何与文件上载相关的错误代码。
这是在 PHP4.2.0 中增加的新特性。 error 分别提供了一些数组常量: 0: 表示没有发生错误, 1:
表示上载文件的大小超出了约定值。文件大小的最大值是 PHP 配置文件中指定的,该指令
是 upload_max_filesize 。 2: 表示上载文件大小超出了 HTML 表单的 MAX_FILE_SIZE 元素 所
指定的最大值。 3: 表示文件只被部分上载。 4: 表示没有上载任何文件。
*/
//[userfile][name]表示上传的文件名
//[userfile][type]表示文件的类型
//[userfile][tmp_name]表示上传文件的临时存放位置
//[userfile][error]表示上传文件的错误类型,0表示没有错误
//[userfile][size]表示上传文件的字节大小
print_r($_FILES);
echo '
';
define('MAX_SIZE', 20000000);//定义MAX_SIZE常量的值为20M
$fileMimes = array('image/jpeg','image/pjpeg','image/png','image/x-png','image/gif');
//is_uploaded_file():判断文件是否通过HTTP POST上传的。
//通过HTTP POST上传后,文件会存放在临时文件夹下
//第二个问题,只能充许jpg类型文件上传.下面的代码在ie下会有bug。因为在ie中上传的.jpg文件,后缀会变成jpeg。
/*if($_FILES['userfile']['type']!='image/jpeg'){
echo "";
exit;
}*/
//所以,为了兼容ie与firefox下导致上传的.jpg文件能正确执行。需要采用如下的代码。
/*if($_FILES['userfile']['type']!='image/jpeg' && $_FILES['userfile']['type']!= 'image/pjpeg'){
echo "";
exit;
}*/
switch ($_FILES['userfile']['type']) {
case 'image/jpeg': //火狐支持的
;
break;
case 'image/pjpeg': //ie 支持的
break;
case 'image/gif':
break;
case 'image/png': //火狐支持的
break;
case 'image/x-png'://ie支持的
break;
default:echo "";
exit;
}
//将上面的switch代码再进行改进。在上面定义一个数组变量$fileMimes.用in_array()函数来判断类型是否为数组中的一种。如下:
//先判断数组变量是否存在
if (is_array($fileMimes)){
//如果数组变量存在,则判断文件的后缀名是否在定义的数组变量中
if (!in_array($_FILES['userfile']['type'], $fileMimes)){
echo "";
exit;
}
}
//如果需要允许.png,.gif格式的文件上传,用上面的格式写的话,会很复杂。可以考虑采用下面的方式实现
//先判断文件名比先判断文件大小,性能更高
//第一个问题:如果上传错误,怎么办?
if ($_FILES['userfile']['effor']>0){
switch ($_FILES['userfile']['error']){
case 1:echo "";
break;
case 2:echo "
指定的最大值。');history.back();";
break;
case 3:echo "";
break;
case 4:echo "";
break;
}
exit;
}
//下面这句最后用来判断上传的文件是否超过20M。自定义的。如果在表单中没有指定value的值,则需要在此做判断
if ($_FILES['userfile']['size']>MAX_SIZE){
echo "";
}
if(is_uploaded_file($_FILES['userfile']['tmp_name'])) {
//如果找到临时文件,则在这里进行用代码实现移动文件到目的地。函数:move_uploded_file(),返回布尔值
//第一个参数写上临是文件地址,第二个参数写上需要存文件的目的地址(需要先判断目录是否存在)
//如果想屏蔽页面的上警告信息,则需要在代码前加上@符号即可.@move_uploaded_file($_FILES['userfile']['tmp_name'], 'uploads/'.$_FILES['userfile']['name'])
if (!move_uploaded_file($_FILES['userfile']['tmp_name'], 'uploads/'.$_FILES['userfile']['name'])){
//移动失败,则执行内部代码
//echo '移动失败!';
echo "";
exit; //后面的代码就不执行
}
//echo '上传的临时文件已找到,等待移动中......';
}else {
echo "";
exit;
}
//全部通过就上传成功
//必须传一个值给(文件上传的地址)uploadseccess.php.
echo "";
?>
uploadsuccess.php:
//接收upload.php以链接形式传递过来的参数。是get方式
$url = $_GET['url'];
echo '';
?>