【问题标题】:Notice: Undefined index: file uploading video注意:未定义索引:文件上传视频
【发布时间】:2020-06-09 21:46:21
【问题描述】:

我正在尝试将视频上传到我的上传文件夹。我在这里的另一个问题中得到了代码,效果很好。但是我不断收到此通知错误,我不知道如何解决它。我整天都在努力。我试图检查它是否是isset(),但仍然没有用。有人可以帮我吗?

<?php

$allowedExts = array("jpg", "jpeg", "gif", "png", "mp3", "mp4", "wma");
$_FILES = $_FILES['file'];
$extension = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);
$unique = date('Y-m-d_H-i-s');

if ((null !==($_FILES["file"]["type"] == "video/mp4")
    || (null !==($_FILES["file"]["type"] == "audio/mp3"))
    || ($_FILES["file"]["type"] == "audio/wma")
    || ($_FILES["file"]["type"] == "image/pjpeg")
    || ($_FILES["file"]["type"] == "image/gif")
    || ($_FILES["file"]["type"] == "image/jpeg"))

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

    if ($_FILES["file"]["error"] > 0) {

        echo "Return Code: " . $_FILES["file"]["error"] . "<br />";

    } else {

    echo 'File uploaded successfully';

    if (file_exists("upload/" . $_FILES["file"]["name"])) {

        echo $_FILES["file"]["name"] . " already exists. ";

    } else {

        $datetime = date('Y-m-d_H-i-s');

        move_uploaded_file($_FILES["file"]["tmp_name"],
        "uploads/" . $_FILES["file"]["name"] . $datetime . md5($_FILES["file"]["name"]));

    }
    }

} else {

    echo "Invalid file";
}
?>

<form action="profile.php" id="videoupload" method="post" enctype="multipart/form-data">

<label for="file"><span>Filename:</span></label>
<input type="file" name="file" id="file" /> 
<br />
<input type="submit" name="submit" value="Submit" />

</form>

【问题讨论】:

  • 我首先要看的是$_FILES = $_FILES['file']; 行。你这样做可能是有原因的,但你脚本的其余部分表现得好像没有发生。
  • @rickdenhaan 当我保留该行时,我收到该消息的唯一位置就是该行。当我移动它时,我会在大约 3 个其他地方收到消息。
  • 好的,这意味着 $_FILES['file'] 在脚本的开头不存在,并且该行不会意外破坏它。然后问题似乎与向该脚本提供文件上传的任何内容有关,例如带有&lt;input type="file"&gt; 的表单或一段javascript。您可以将那部分代码添加到您的问题中吗?
  • @rickdenhaan 我刚刚更新了它
  • 只是为了澄清:表单就像这样在同一个文件中?如果是这种情况,我假设您在尚未提交表单时会在$_FILES = $_FILES['file'] 行收到通知,并且在您提交表单后您仍然会收到通知,但在不同的行(我猜是 pathinfo() 行),对吗?

标签: php html html5-video


【解决方案1】:

您正在尝试在文件上传之前处理文件上传。您必须先检查表单是否已发布。

<?php

if (isset($_FILES['file'])) {
    $allowedExts = array("jpg", "jpeg", "gif", "png", "mp3", "mp4", "wma");
    // $_FILES = $_FILES['file'];  // <-- remove this line
    $extension = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);
    $unique = date('Y-m-d_H-i-s');

    if ((null !==($_FILES["file"]["type"] == "video/mp4")
        || (null !==($_FILES["file"]["type"] == "audio/mp3"))
        || ($_FILES["file"]["type"] == "audio/wma")
        || ($_FILES["file"]["type"] == "image/pjpeg")
        || ($_FILES["file"]["type"] == "image/gif")
        || ($_FILES["file"]["type"] == "image/jpeg"))

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

        if ($_FILES["file"]["error"] > 0) {

            echo "Return Code: " . $_FILES["file"]["error"] . "<br />";

        } else {

            echo 'File uploaded successfully';

            if (file_exists("upload/" . $_FILES["file"]["name"])) {

                echo $_FILES["file"]["name"] . " already exists. ";

            } else {

                $datetime = date('Y-m-d_H-i-s');

                move_uploaded_file($_FILES["file"]["tmp_name"],
                "uploads/" . $_FILES["file"]["name"] . $datetime . md5($_FILES["file"]["name"]));

            }
        }

    } else {

        echo "Invalid file";
    }
}
?>

<form action="profile.php" id="videoupload" method="post" enctype="multipart/form-data">

<label for="file"><span>Filename:</span></label>
<input type="file" name="file" id="file" /> 
<br />
<input type="submit" name="submit" value="Submit" />

</form>

【讨论】:

    【解决方案2】:
    $_FILES['file']

    表示您有输入类型 = 名为“文件”的文件。如果您没有名为“文件”的输入,则会收到未定义的索引通知。 如果你有,

    $_FILES = $_FILES['file'];

    这会给其他代码带来错误。因为它试图覆盖 $_FILES。

    【讨论】:

      猜你喜欢
      • 2017-08-26
      • 1970-01-01
      • 2018-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-01
      • 2013-11-27
      相关资源
      最近更新 更多