我正在尝试在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代码中更改了文件类型,因此它给出了上述错误
答案 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