在php中上传视频

时间:2013-03-22 09:10:12

标签: php mysql

我正在尝试在php中进行视频上传的演示,但我收到错误

  

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

文件如下:

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>

upload_file.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代码中更改了文件类型,因此它给出了上述错误

2 个答案:

答案 0 :(得分:3)

如果你在$ _FILE中得到'undefined index',那么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。

答案 1 :(得分:1)

你的geeting错误是因为即使表单没有提交,php代码也在运行。因此,在启动时没有填充数组,因为您尚未上传任何文件。 事实上,这是一个警告而不是错误

检查表单是否已提交..使用isset($ _ POST [&#39; submit&#39;])

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

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

                   <?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