2

我正在尝试在 php 中上传视频的演示,但出现错误

注意:未定义索引:C:\wamp\www\upp\upload_file.php 中第 3 行调用堆栈中的文件

文件如下:

abcd.html

<html>
<body>

<form action="upload_file.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="Submit">
</form>

</body>
</html>

上传文件.php

<?php
$allowedExts = array("wmv","avi","mpeg","mpg");
$extension = end(explode(".", $_FILES["file"]["name"]));
if ((($_FILES["file"]["type"] == "video/avi")|| ($_FILES["file"]["type"] == "video/mpeg")
|| ($_FILES["file"]["type"] == "video/wmv")
|| ($_FILES["file"]["type"] == "video/mpg"))
&& ($_FILES["file"]["size"] < 200000)
&& in_array($extension, $allowedExts))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
    }
  else
    {
    echo "Upload: " . $_FILES["file"]["name"] . "<br>";
    echo "Type: " . $_FILES["file"]["type"] . "<br>";
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
    echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";

    if (file_exists("upload/" . $_FILES["file"]["name"]))
      {
      echo $_FILES["file"]["name"] . " already exists. ";
      }
    else
      {
      move_uploaded_file($_FILES["file"]["tmp_name"],
      "upload/" . $_FILES["file"]["name"]);
      echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
      }
    }
  }
else
  {
  echo "Invalid file";
  }
?>

enter code here

当我尝试上传图片时,它可以工作,但上传视频时,我在 php 代码中更改了文件类型,因此出现上述错误

4

2 回答 2

3

如果您在 $_FILE 中获得“未定义索引”,则 PHP、Apache 或安全工具(例如 suhosin、apparmor)按可能性顺序阻止了上传。后两者主要在您将代码放在 linux 生产服务器上时应用,因此我们将重点关注第一个。

在同一目录中创建一个文件并将此代码放入其中:

<?php phpinfo();

然后查找这些设置:

upload_max_filesize
post_max_size

如果它们比您的视频小,则您需要更改第一个设置。

使用 windows 搜索在 wamp 目录中找到 php.ini,然后将这些行更改为以下内容:

upload_max_filesize = 100M
post_max_size = 100M

然后停止并启动 Apache 并检查 phpinfo 值是否增加。如果他们这样做了,您的上传应该可以工作。

如果值改变了,但上传仍然不起作用,搜索 httpd.conf 并找到 LimitRequestBody 的值,增加它,然后重新启动 Apache。

于 2013-03-22T09:24:11.053 回答
1

您遇到的错误是因为 php 代码正在运行,即使表单未提交也是如此。因此,由于您尚未上传任何文件,因此在开始时不会填充任何数组。事实上这是一个警告而不是错误

检查表单是否已提交 .. 使用 isset($_POST['submit'])

其次,我建议您优化代码..如果您检查文件类型,则无需检查扩展名..

我已经修改了你的代码..试试看

                   <?php
            $is_form_submitted =  (isset($_POST['submit']))?true:false;

        if($is_form_submitted)
        {

            $allowedTypes   = array("video/wmv","video/avi","video/mpeg","video/mpg",'video/mp4');
            $is_valid_type  = (in_array($_FILES['file']['type'], $allowedTypes))?true:false;
           if ( $is_valid_type&& ($_FILES["file"]["size"] < 2000000))
          {
            if ($_FILES["file"]["error"] > 0)
            {
            echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
            }
            else
            {
            echo "Upload: " . $_FILES["file"]["name"] . "<br>";
            echo "Type: " . $_FILES["file"]["type"] . "<br>";
            echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
            echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";

            if (file_exists("upload/" . $_FILES["file"]["name"]))
              {
              echo $_FILES["file"]["name"] . " already exists. ";
              }
            else
              {
              move_uploaded_file($_FILES["file"]["tmp_name"],
              "upload/" . $_FILES["file"]["name"]);
              echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
              }
            }
          }
        else
        {
          echo "Invalid file";
         }

        }
                ?>

建议

在任何上传之前检查以下 php_ini 设置

file_uploads
upload_max_filesize
max_input_time
memory_limit
max_execution_time
post_max_size

参考:http ://www.radinks.com/upload/config.php

于 2013-03-22T09:26:33.140 回答