【问题标题】:how to check if a $_FILE is set in php?如何检查 $_FILE 是否在 php 中设置?
【发布时间】:2011-05-01 16:25:04
【问题描述】:

我创建了一个包含 3 个 <input type="file"/> 的表单

我看到我得到了一个带有array(name=>"") 的数组。

所以我改为检查if ($_FILE["myfilename"]["name"]=="")

这可行,但对我来说似乎很不寻常。

我想知道是否有更好的方法来检查文件输入是否已设置?

【问题讨论】:

    标签: php file


    【解决方案1】:

    有:is_uploaded_file()。在处理上传的文件时,出于安全原因,您应该始终使用它(及其表亲move_uploaded_file())。

    【讨论】:

    • 我对@9​​87654325@ 的用处感到困惑。在 PHP 源代码中似乎存在一个辅助哈希。但这些值始终与$_FILES[*]['tmp_name'] 中的值相同。它不检查任何其他内容。不确定如何在脚本运行时向 $_FILES 注入一些东西。 (如果您使用 move_uploaded_fileIs_uploaded_file 将是多余的,因为它包含复制和粘贴完全相同的测试。)
    • @mario 曾经在 PHP 4 中存在一个漏洞,我实际上曾经设法闯入朋友的 phpBB:可以将本地文件路径(想想../config.php)注入tmp_name ,导致该文件被复制到公共uploads/ 目录或任何地方。 is_uploaded_file() 是针对这一点引入的。不使用is_uploaded_file()是否还存在漏洞,我不知道,从没查过
    • 有趣。那么,这一切都是你的错吗?对黑客行为投了反对票.. ;}
    • 我对文件上传概念还是很陌生。所以,如果我做对了,当我按下表单上的上传按钮时,服务器已经在上传文件,因此 is_uploaded_file。 if is_uploaded_file($_FILES["inputFieldName"]){ move_uploaded_file($_FILE["inputFieldName"],$destinationFolder) } 正确吗?
    • @ndefontenay 后半部分是正确的;前者不是:当您单击上传按钮时,上传开始。 所有文件都已完全上传后,PHP 脚本就会生效。 is_uploaded_file() 只是检查FILES 数组的一种奇特(并且如上所述,安全性增强)方式
    【解决方案2】:

    您可以使用empty 来检查变量是否为空,但 Pekka 的解决方案最好采用这种方式

    if (empty($_FILES["myfilename"]["name"]))
    

    如果您正在检查是否设置了变量,您可以使用isset 函数

    【讨论】:

      【解决方案3】:

      假设您使用的是最新的 PHP (4.2+),最好的方法是检查:

      $_FILE['myfilename']['error'] === UPLOAD_ERR_OK
      

      如果这是真的上传工作,你可以看到其他可能的值列表here

      【讨论】:

      • 你应该使用严格相等比较===。如果您应该在 ERR_OK 常量上创建类型,则常规比较将给出错误的“ok”。
      • 马克点非常好,尤其是它的值是 (int)0。
      【解决方案4】:

      你可以试试这个:

      if($_FILES['myfilename']['size'] > 0 ) {
      
      }
      else{
             echo 'File is not uploaded . . .';
      }
      

      【讨论】:

        【解决方案5】:

        试试这个:

        if($_FILES["uploadImg"]['name'][0] != ''){
            //echo 'file attached';
        }else{
            //echo 'no file attached';
        }
        

        这对我有用...

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-10-01
          • 2011-04-08
          • 2015-09-11
          • 1970-01-01
          • 2015-07-23
          • 1970-01-01
          • 1970-01-01
          • 2016-12-05
          相关资源
          最近更新 更多