0

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

它是这样工作的:

  1. 票务信息被处理并输入 DB = 日期、票务信息、电子邮件字符串等
  2. 然后应验证和上传文件,并将其移至新文件夹(命名为票号)
  3. 文件名和目录路径被添加到数据库中。
  4. 所有信息都会传递到通知电子邮件,然后发送出去。

当此脚本运行时,如果没有文件,则创建数据库条目,并将信息添加到电子邮件中,但它链接到不存在的目录。

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

我花了一天半的时间试图解决这个问题,但没有解决。任何帮助是极大的赞赏。

//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;
            }
        }
    }
}
4

1 回答 1

1

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

我怀疑 files 数组是空的,并且 php 看到 undefined $_FILES["file"]["size"]as 0 通过了你的测试。

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

if(isset($_FILES["file"]) && $_FILES["file"]["size"] < 20000000 && in_array($extension, $allowedExts)) {
于 2013-05-21T15:55:44.530 回答