duangan6636 2011-01-18 10:54
浏览 56
已采纳

使用FOR循环一次上传多个文件时,上传将无法正确验证

Fairly new to PHP and i'm currently trying to validate multiple uploads, but nothing seems to have worked. I've exhausted almost every resource I can find.

I'm sorry there is quite a bit going on in this FOR loop. My code is as follows:

function processForm() 
{ 

    for($i=0; $i < VAR_UPLOAD_FIELDS; $i++) 
    { 
        echo "Upload field $i "; 

        if(!empty($_FILES[file][size][$i])) 
        { 

        //********************* 
        //START OF TEST CODE FOR VALIDATION. 

        //*********************** 
            $fileName     = $_FILES[file][name][$i]; 

        // get file name (not including path) 
        $file_basename = substr($fileName, -4, strripos($fileName, '.')); 

        $file_ext = substr($file_basename, strripos($file_basename, '.')); 

        $file_ext = @substr($file_ext, 1); // remove dot 


        // check file type if needed 
        if (count($exts)) {    
            if (!in_array($file_ext[i], $exts)) 
          { 
            echo "Files of this type are not allowed for upload."; 
            break; 
          } 
        } 

                            $newLocation     = VAR_UPLOAD_DIRECTORY.$fileName; 
            $filesize = intval($_FILES["filename"]["size"]); 


            //***************************** 
            // Code to add information of uploads to database 
            //***************************** 

                if (DO_LOG) { 
  // Establish DB connection 
  $link = @mysql_connect(DB_HOST, DB_USERNAME, DB_PASSWORD); 
  if (!$link) { 
    $errors[] = "Could not connect to mysql."; 
    break; 
  } 
  $res = @mysql_select_db(DB_DATABASE, $link); 
  if (!$res) { 
    $errors[] = "Could not select database."; 
    break; 
  } 
  $m_ip = mysql_real_escape_string($_SERVER['REMOTE_ADDR']); 
  $m_size = $filesize; 
  $m_fname = mysql_real_escape_string($fileName); 
  $sql = "insert into test_uploads_log (log_filename,log_size,log_ip) values ('$m_fname','$m_size','$m_ip')"; 
  $res = @mysql_query($sql); 
  if (!$res) { 
    $errors[] = "Could not run query."; 
    break; 
  } 
  @mysql_free_result($res); 
  @mysql_close($link); 
} 
            //***************************** 
            // End of database code 
            //***************************** 



            //Files copied to location. 
            if(!copy($_FILES[file][tmp_name][$i],$newLocation)) 
            { 
                echo "<b>Failed - ".$_FILES[file][name][$i]." would not copy to ".$newLocation."</b> (Check your upload directory and permissions)"; 
            } 
            else 
            { 
                ###/ SUCCESS /### 

                #/ Stripping of VAR_BASE_DIRECTORY for better viewing and linking 
                // $urlShow = str_replace(VAR_BASE_DIRECTORY,'',$newLocation); 
                $urlShow = $newLocation;                      


                echo "<b> Uploaded successfully - <a href=\"$urlShow\" target=\"_blank\">$urlShow</a></b>"; 
            } 
        } 

        else 
        { 
            echo "<b>No file uploaded</b>"; 
        } 
        echo "<br />"; 
    } 
    return; 
} 

Now the files are uploaded, and their details added to the database, the FOR loop iterates through this without a problem. However, the issue is that I don't know why it keeps ignoring the validation bit of code. I have an array declared above which is

$exts = array('dxf','dwg','pdf','sldrw','sldrt','bmp','txt');

The loop seems to be ignored completely:

        // check file type if needed 
        if (count($exts)) {    
            if (!@in_array($file_ext[i], $exts)) 
          { 
            echo "Files of this type are not allowed for upload."; 
            break; 
          } 
        } 

I've uploaded jpgs, jpegs, gifs, GIFs, basically anything i'm trying to restrict and everything still uploads fine. Nothing is validated properly. The values are even added to the database. Can anyone shed light on what i'm doing wrong? And why the echo and break isn't invoked??

Thankyou.

Daz.

  • 写回答

2条回答 默认 最新

  • duandi1919 2011-01-18 11:02
    关注

    That's because PHP can't find a non-local variable called $exts (I don't see it defined inside your function)

    You have two way:

    • define that variable as global $vars inside you function
    • define it as a local variable
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题