forget and forget

能吃能睡是福;能忘是大福......

posts - 39, comments - 26, trackbacks - 0, articles - 10
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

php上传单个文件

Posted on 2006-06-08 22:09 橘子 阅读(1014) 评论(0)  编辑  收藏 所属分类: WEB开发

    PHP上传文件的问题:
一:1、上传单个文件的时候。在表单页面设置文件输入域,<input name="userfile" type="file" />然后表单要加入<form enctype="multipart/form-data" action="post.php" method="post">这个属性,这是告诉浏览器我要上传文件的属性,一定要加上。
    2、设置好了表单,接下来的事就是读取表单的变量,如果你还定义了其他的变量,那么php使用$_POST来读出,如:$uservar=$_POST["uservar"],然而文件是存在$_FILES中,具体见下面:
 
  * $_FILES['userfile']['name'] 客户端机器文件的原名称。
   * $_FILES['userfile']['type'] 文件的 MIME 类型,需要浏览器提供该信息的支持,例如“image/gif”。
   * $_FILES['userfile']['size'] 已上传文件的大小,单位为字节。
   * $_FILES['userfile']['tmp_name'] 文件被上传后在服务端储存的临时文件名。
   * $_FILES['userfile']['error'] 和该文件上传相关的错误代码

  1. 值:0; 没有错误发生,文件上传成功。
  2. 值:1; 上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。
  3. 值:2; 上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。
  4. 值:3; 文件只有部分被上传。
  5. 值:4; 没有文件被上传。
3、完成上传过程。示例代码:
(1)
<?php
$upload_file=$_FILES['userfile']['tmp_name'];
$upload_file_name=$_FILES['userfile']['name'];
if($upload_file){
 $file_size_max = 20000000;// 1M限制文件上传最大容量(bytes)
 $store_dir = "attfile/";// 上传文件的储存位置
 $accept_overwrite = 1;//是否允许覆盖相同文件
 // 检查文件大小
 if ($upload_file_size > $file_size_max) {
  echo "对不起,你的文件容量大于规定";
  exit;
 }
 // 检查读写文件
 if (file_exists($store_dir . $upload_file_name) && !$accept_overwrite) {
  echo   "存在相同文件名的文件";
  exit;
 }
 //复制文件到指定目录
 if (!move_uploaded_file($upload_file,$store_dir.$upload_file_name)) {
  echo "复制文件失败";
  exit;
 }
}
echo   "<p>你上传了文件:";
echo $_FILES['userfile']['name'];
echo "<br>";
//客户端机器文件的原名称。
Echo   "文件的 MIME 类型为:";
echo $_FILES['userfile']['type'];
//文件的 MIME 类型,需要浏览器提供该信息的支持,例如“image/gif”。
echo "<br>";

Echo   "上传文件大小:";
echo $_FILES['userfile']['size'];
//已上传文件的大小,单位为字节。
echo "<br>";

Echo   "文件上传后被临时储存为:";
echo $_FILES['userfile']['tmp_name'];
//文件被上传后在服务端储存的临时文件名。
echo "<br>";

$Erroe=$_FILES['userfile']['error'];
switch($Erroe){
 case 0:
 Echo   "上传成功"; break;
 case 1:
 Echo   "上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值."; break;
 case 2:
 Echo   "上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。";   break;
 case 3:
 Echo   "文件只有部分被上传";break;
 case 4:
 Echo   "没有文件被上传";break;
}
?>
(2)<?php
$uploaddir= '../attfile/';//设置上传的文件夹地址
$FILES_EXT=array('.gif','.jpg','.bmp');//设置允许上传文件的类型
$MAX_SIZE = 20000000;//设置文件上传限制20000000byte=2M
for ($i=0;$i<count($userfile);$i++){
 $FILES_NAME=$_FILES['userfile']['name'][$i];//客户端文件名
}
//echo $FILES_NAME;
//取出文件后缀名,strrpos()从标记开始前字节个数(不算标记),substr()显示从第strrpos()之后的字符
$file_ext=substr($FILES_NAME,strrpos($FILES_NAME,"."));
//echo $file_ext;
//检查文件大小
if($_FILES['userfile']['size']>$MAX_SIZE){
 echo "文件大小超程序允许范围!";
 exit;
}
//检查文件类型
if(in_array($file_ext, $FILES_EXT)){
 $_FILES['userfile']['name']=date("YmdHis").rand().$file_ext;
 $uploadfile = $uploaddir.$_FILES['userfile']['name'];//上传后文件的路径及文件名
 //将上传后的路径写入到数据库中

 //用move函数生成临时文件名,并按照 $_FILES['userfile']['name']上传到$uploaddir下
 if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
  print "\n上传成功!";
 } else {
  print "上传错误!  以下是上传的信息:\n";
  print_r($_FILES);
 }
}
else{
 echo "{$file_ext}不是允许上传的文件类型!";
 exit;
}
?>



小技巧>>1、当在提交时,希望确认是否要提交可以在<form>里如这样加入:<form onsubmit="return confirm('你真的要提交吗?')">
2、在php里希望返回时所有在文本框里的东西都保留可以这样:<a href=javascript:history.back(1)>重新来过</a>。


只有注册用户登录后才能发表评论。


网站导航: