undefined index $ _FILES文件上传

时间:2014-03-21 15:48:41

标签: php validation undefined

我有这个PHP函数来验证以表格形式上传的文件类型及其扩展名:

    public function acceptedFileTypes($valueofformfield, $fieldname) {     
        $allowed = array('doc', 'pdf', 'docx', 'jpg', 'gif','png');      
        $value = $_FILES[$valueofformfield]['name'];         //UNDEFINED VARIABLE
        $extension = end(explode(".", $value));

        $valid = !in_array($extension, $allowed); //STRICT STANDARDS: ONLY VARIABLES SHOULD BE PASSED BY REFERENCE 

        if ($valid  == FALSE) {
            $this->emailErrors[] = "Your uploaded files cannot be accepted; only .doc, .docx, .pdf, or .jpg files only in $fieldname";
        }
        return 

var_dump($ _ FILES)揭示:

array (size=1)
  'fileAttach' => 
    array (size=5)
      'name' => string 'mysql.init' (length=10)  //EXAMPLE FILE USED
      'type' => string 'application/octet-stream' (length=24)
      'tmp_name' => string 'C:\wamp\tmp\phpD106.tmp' (length=23)
      'error' => int 0
      'size' => int 101

如果你在笔记上注意到,那么我试图找到答案时就会出现错误。我的PHP代码有什么问题。具体是:

  1. 是什么让'$ value = $ _FILES [$ valueofformfield] ['name'];'一个未定义的变量?
  2. $ extension = end(explode(“。”,$ value));获取上传文件扩展名的有效表达式?
  3. 是什么让$ valid =!in_array($ extension,$ allowed);传递参考的错误方式?
  4. 我在这里和其他网站搜索了答案,但无济于事。

    帮助非常感谢这位新手。谢谢

1 个答案:

答案 0 :(得分:0)

$ value = $ _FILES [$ valueofformfield] [' name'];

我的估计,valueofformfield的价值不是' fileAttach' .... var_dump是你的朋友!

也许它是:$ value = $ _FILES [$ fieldname] [' name']; - > //没有你形式的盲目猜测。

如果您未定义警告,则不会设置$ value,因此param不存在。这给出了这个错误:只有变量才能通过引用传递。这里抛出错误:$ extension = end(explode("。",$ value));

检查params / keys是否存在(isset)以防止错误!

$ valid =!in_array($ extension,$ allowed); - >你的支票应该如何保存?将.exe文件重命名为docx将使用此检查上传。