即使IF语句为false,也会执行$ _FILES操作

时间:2013-05-21 15:48:49

标签: php file

我正在尝试向内部公司售票系统添加文件上传功能。该代码适用于实际上传。我遇到的问题是,如果没有文件,代码仍然执行。我尝试了很多东西,从使用$ _FILES错误编码到添加选择菜单来选择是否要添加文件,但代码仍在运行。

它的工作原理如下:

  1. 处理故障单信息并输入DB =日期,故障单信息,电子邮件字符串等
  2. 然后应验证并上传文件,并将其移至新文件夹(名为票号)
  3. 将文件名和目录路径添加到数据库中。
  4. 所有信息都会传递到通知电子邮件中,然后发送出去。
  5. 当此脚本运行时,如果没有文件,则会生成数据库条目,并将信息添加到电子邮件中,但它会链接到不存在的目录。

    有趣的花絮:没有文件,新目录的代码不会执行,这是正确的操作。令人困惑的是它在同一块代码中。

    我花了一天半的时间试图在没有解决方案的情况下解决这个问题。非常感谢任何帮助。

    //fileUpload
    $fixedFileName = "";
    $fileProcessed = 0;
    
    if($_POST['yesFile'] == "yes") { //select option in form - 
        $allowedExts = array("gif", "jpeg", "jpg", "png", "txt", "pdf", "zip", "doc", "docx", "xls", "xlsx", "pcf");
        $varForExt = explode(".", $_FILES["file"]["name"]);
        $extension = end($varForExt);
    
        if($_FILES["file"]["size"] < 20000000 && in_array($extension, $allowedExts)) {
            if($_FILES["file"]["error"] > 0) {
                //echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
                $fixedFileName = print_r($_FILES);
            } else {
                $fixedFileName = trim(str_replace(' ','_', $_FILES["file"]["name"]));
    
                $dirToMake = '/var/www/html/eis/uploads/ESIG/';
                $dirToMake .= $_SESSION['lastRID'].'/';
                mkdir($dirToMake);
    
                if(move_uploaded_file($_FILES["file"]["tmp_name"], $dirToMake.$fixedFileName)) {
                    //insert filepath/file into sql
                    $fileProcessed = 1;
                }
            }
        }
    }
    

1 个答案:

答案 0 :(得分:1)

尝试启用错误报告error_reporting(E_ALL); ini_set("display_errors", "on");

我怀疑文件数组是空的,并且php看到未定义的$_FILES["file"]["size"]为0,它通过了测试。

尝试将isset($_FILES["file"])添加到您的第一个测试

if(isset($_FILES["file"]) && $_FILES["file"]["size"] < 20000000 && in_array($extension, $allowedExts)) {