首頁 > 後端開發 > php教程 > 这个上传代码,究竟有关问题出在哪里啊

这个上传代码,究竟有关问题出在哪里啊

WBOY
發布: 2016-06-13 10:00:13
原創
1402 人瀏覽過

这个上传代码,究竟问题出在哪里啊???
这个上传代码,里面没有限制上传文件的大小,但是现在上传超过100K的就总无法上传,问题出在哪里啊?
我想弄限制,只能上传500K以内的文件,得如何改?



  $allow_type=array("m4r","jpg");//允许上传的图片类型

  $name=$_FILES['upImg']['name']; //客户端文件的原名称

  $upload_dir="upload/";//图片保存目录

  //strtolower 将字符串转为小写

  $file_suffix=strtolower(getFileSuffix($name));

  if(!in_array($file_suffix,$allow_type))

  {

  //implode 把数组元素组合为字符串  

  $all_type=implode("、",$allow_type);

  exit("<script>alert('您只能上传 $all_type 格式的图片!');history.back();</script>");

  }  

  //explode 把字符串分割为数组

  $name_array=explode(".",$name);


  do
  {

  $name_array[0]=randomFileName();

  $name=implode(".",$name_array);

  $upload_file=$upload_dir.$name;

  }while(file_exists($upload_file));


  $tmp_name=$_FILES['upImg']['tmp_name'];

  //is_uploaded_file 判断文件是否是通过HTTP POST上传的

  if(is_uploaded_file($tmp_name))

  {  

   
   

  //move_uploaded_file 将上传文件移至指定目录

  if(move_uploaded_file($tmp_name,$upload_file))

  {

echo "$upload_file 歌曲上传成功!";  
exit("<script>top.document.getElementById('url').value='$upload_file';</script>");  
 

  }

  }
//获取文件后缀名

  function getFileSuffix($fileName)

  {

  //strrchr 返回.在$fileName中最后出现的位置到结尾的所有字符。substr 再去掉'.' 

  return substr(strrchr($fileName, '.'), 1);

  }

  //生成随机文件名  

  function randomFileName()

  {

  //将时区调为北京时间,php5默认为格林威治标准时间

  date_default_timezone_set("PRC");

  return date('YmdHis').rand(100,999); 

  }



?>

------解决方案--------------------
1、超过100K的文件无法上传,请看一下$_FILES['upImg']['error']的值,可能有以下几种情况:
值为1,表示文件大小超过了php.ini中定义的upload_max_filesize;
值为2,表示文件大小超过了HTML中的限制。HTML中可以通过以下代码限制文件大小:

HTML code
<!--限制文件大小不超过100KB--><input type="hidden" name="MAX_FILE_SIZE" value="102400"><input type="file" name="upImg"><br><font color="#e78608">------解决方案--------------------</font><br>在PHP内判断也可以!<br>if($_FILES['upImg']['size']>1024*500)<br>{  <br> echo "文件超过了500k,无发上传!";<br>  exit;<br>}<br>至于无法上传,我个人估计是:<br>do<br> {<br><br> $name_array[0]=randomFileName();<br><br> $name=implode(".",$name_array);<br><br> $upload_file=$upload_dir.$name;<br><br> }while(file_exists($upload_file));<br>文件存在才将$upload_file=$upload_dir.$name;事实该文件在第一次的时候肯定不存在,那这个do里的代码根本不执行,也就是说:$upload_file不能真实反映其文件路径,那么在后面move_uploaded_file的时候也就无法执行了。<div class="clear">
                 
              
              
        
            </div>
登入後複製
相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板