我在带有lampp的archlinux上(最新版本) 我从w3c-school学习php, 我在页面上传文件,这里我的脚本无法上传任何内容 唯一回报我的是无效文件(.jpg .png ecc ..) 这是代码:
<?php
include "config_db.php";
$name = "/upload/" . $_FILES['file']['name'];
$allowedExts = array("jpg", "jpeg", "gif", "png");
$extension = in_array(explode(".", $_FILES["file"]["name"]), $allowedExts);
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/png")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 100000)
&& 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"];
echo '<img src="upload/' . $_FILES["file"]["name"] . '">';
}
}
}
else
{
echo "Invalid file";
}
?>
答案 0 :(得分:1)
如果图像名称包含。(点)则存在问题。例如,如果图像名称类似于12.212.jpg,则当您使用。(点)分割图像名称时,您的扩展名将为.212。所以在这种情况下你需要使用类似下面的代码。
$name = "/upload/" . $_FILES['file']['name'];
$allowedExts = array("jpg", "jpeg", "gif", "png");
$extension = explode(".", $_FILES["file"]["name"]);
$extension = end($extension);
它会为您提供准确的图像格式。
答案 1 :(得分:0)
您的错误位于以下行。
$extension = in_array(explode(".", $_FILES["file"]["name"]), $allowedExts);
必须如下。
$extension = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);
如果条件如下,也会改变。
if (in_array($extension, $allowedExts))
答案 2 :(得分:0)
改变这种情况
&& in_array($extension, $allowedExts))
只有这种情况
&& $extension)
因为您使用了in_array
2次,所以不需要第2次。
答案 3 :(得分:0)
我认为问题出在in_array()
函数中。您已在此行中检查了扩展程序
$extension = in_array(explode(".", $_FILES["file"]["name"]), $allowedExts);
现在$extension
的值是 TRUE 。
因此,您无法在if条件中检查此$extension
。而不是那样,
只需检查$extension
是否 TRUE ,
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/png")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 100000)
&& $extension)
答案 4 :(得分:0)
您正在以不正确的方式检查扩展程序。这是应该如何:
$allowedExts = array("jpg", "jpeg", "gif", "png");
$extension = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);
header ("Content-Type: text/plain");
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/png")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 100000)
&& in_array ($extension, $allowedExts)) echo "Success";
else echo "Error";
此代码与我一起使用以下表单:
<form method="POST" enctype="multipart/form-data" action="upload.php">
<input type="file" name="file" />
<input type="submit" />
</form>
答案 5 :(得分:0)
我遇到了问题,如果扩展名是大写的(即image.JPG),它给了我无效的文件。我用了这段代码:
$t_image = strtolower($_FILES['file']['name']);
解决问题。