Php 从POST数据上载文件
我正在尝试创建一个允许用户将图像上传到目录的页面。页面的上载段如下所示:Php 从POST数据上载文件,php,Php,我正在尝试创建一个允许用户将图像上传到目录的页面。页面的上载段如下所示: <form action="resources/includes/uploaded.php" method="post" enctype="multipart/form-data"> <input type="file" name="file" id="file"> <input type="text" name="description"> <button
<form action="resources/includes/uploaded.php" method="post" enctype="multipart/form-data">
<input type="file" name="file" id="file">
<input type="text" name="description">
<button class="newimage" type="submit">Upload</button>
</form>
$_SESSION['random'] = substr(number_format(time() * rand(),0,'',''),0,15);
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 200000000)
&& in_array($extension, $allowedExts))
{
if ($_FILES["file"]["error"] > 0)
{
}
else
{
if (file_exists("../../uploads/" . $_SESSION['random']))
{
}
else
{
move_uploaded_file($_FILES["file"]["tmp_name"],
"../../uploads/" . $_SESSION['random']);
}
}
}
else
{
echo "Invalid file";
}
...DATABASE QUERIES ETC.
上传
我的PHP函数如下所示:
<form action="resources/includes/uploaded.php" method="post" enctype="multipart/form-data">
<input type="file" name="file" id="file">
<input type="text" name="description">
<button class="newimage" type="submit">Upload</button>
</form>
$_SESSION['random'] = substr(number_format(time() * rand(),0,'',''),0,15);
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 200000000)
&& in_array($extension, $allowedExts))
{
if ($_FILES["file"]["error"] > 0)
{
}
else
{
if (file_exists("../../uploads/" . $_SESSION['random']))
{
}
else
{
move_uploaded_file($_FILES["file"]["tmp_name"],
"../../uploads/" . $_SESSION['random']);
}
}
}
else
{
echo "Invalid file";
}
...DATABASE QUERIES ETC.
$\u SESSION['random']=substr(数字格式(time()*rand(),0,,''),0,15);
$allowedExts=数组(“gif”、“jpeg”、“jpg”、“png”);
$temp=explode(“.”,$_文件[“文件”][“名称”]);
$extension=end($temp);
如果(($_文件[“文件”][“类型”]=“图像/gif”)
||($_文件[“文件”][“类型”]=“图像/jpeg”)
||($_文件[“文件”][“类型”]=“图像/jpg”)
||($_文件[“文件”][“类型”]=“图像/pjpeg”)
||($_文件[“文件”][“类型”]=“图像/x-png”)
||($_文件[“文件”][“类型”]=“图像/png”))
&&($_文件[“文件”][“大小”]<200000000)
&&in_数组($extension$allowedExts))
{
如果($\u文件[“文件”][“错误”]>0)
{
}
其他的
{
如果(文件\存在(“../../uploads/”$\会话['random']))
{
}
其他的
{
移动上传的文件($文件[“文件”][“tmp文件名”],
“../../uploads/”$_SESSION['random']);
}
}
}
其他的
{
回显“无效文件”;
}
…数据库查询等。
当上传设置限制范围内的图像时,上述结果会导致打印“无效图像”。我不确定问题是什么,因为文件在那里,它在函数中正确命名和引用了-有什么想法吗?本打算将此作为注释写下来,但写得太长了: 调试步骤1 首先,尝试将所有条件分解为单独的if语句,以便返回是否通过这些条件。。因此,如果你有
if((A | | B | | | C)和&D&&E)
,然后写出**if(A){echo“A是真的”}或者A是假的}
表示A到E,然后看看你的真值是否是你期望的值
如果你的价值观不是你所期望的,那么你的条件就是错误的
如果你的价值观是你所期望的,那么你的逻辑是错误的
让我们知道是哪种情况,我们可以更有效地帮助您:)
**此外,如果(A){echo“A为真”}或者{“A为假”}对于A到E,您可以使用以下命令,而不是写出:
function check($letter, $condition)
{
$retval = ($condition) ? "True" : "False";
echo $letter." is ".$retval;
}
check( ($_FILES["file"]["type"] == "image/gif") );
.
.
.
本来打算写这篇评论的,但是写得太长了:
调试步骤1
首先,尝试将所有条件分解为单独的if语句,以便返回是否通过这些条件。。因此,如果你有if((A | | B | | | C)和&D&&E)
,然后写出**if(A){echo“A是真的”}或者A是假的}
表示A到E,然后看看你的真值是否是你期望的值
如果你的价值观不是你所期望的,那么你的条件就是错误的
如果你的价值观是你所期望的,那么你的逻辑是错误的
让我们知道是哪种情况,我们可以更有效地帮助您:)
**此外,如果(A){echo“A为真”}或者{“A为假”}
对于A到E,您可以使用以下命令,而不是写出:
function check($letter, $condition)
{
$retval = ($condition) ? "True" : "False";
echo $letter." is ".$retval;
}
check( ($_FILES["file"]["type"] == "image/gif") );
.
.
.
试试这个
HTML
<input type="file" name="img" />
试试这个
HTML
<input type="file" name="img" />
您的代码可以在许多方面得到改进。您当前正在根据图像的mime类型检查文件类型。检查输入文件是否与mime类型匹配并不能真正阻止任何事情。它很容易被欺骗,$\u文件['file']['mime-type']
永远不应该被信任。它们仅用于提示,不应用于验证用户上传
谈到代码中的问题,您当前正在将图像mime类型与预定义的mime类型集进行比较。我将删除该条件语句,改为使用:
此外,您当前正在使用explode()
提取文件名:
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
这很好,并且会像您预期的那样工作。但您可以使用函数,它是专门为此目的而设计的
$path = $_FILES['file']['name'];
$extension = pathinfo($path, PATHINFO_EXTENSION);
如果您的代码(未经测试),以下是改进的版本:
$allowedExts=array(“gif”、“jpeg”、“jpg”、“png”);
$imagesize=$_文件[“文件”][“大小”]//将大小存储到变量中
$path=$\u文件['file']['name'];
$extension=pathinfo($path,pathinfo\u extension);
$image=getimagesize($_FILES['file']['name']);
$mime_type=$image['mime'];
if(在数组中($extension,$allowedExts)&&$size<200000000)
{
如果($_FILES[“file”][“error”]==0)//0表示没有错误
{
如果(!file_存在(“../../uploads/”$_会话['random']))
{
移动上传的文件($文件[“文件”][“tmp文件名”],
“../../uploads/”$_SESSION['random']);
}
}
}
其他的
{
echo“文件验证失败。”;
}
希望这有帮助 您的代码可以在许多方面得到改进。您当前正在根据图像的mime类型检查文件类型。检查输入文件是否与mime类型匹配并不能真正阻止任何事情。它很容易被欺骗,$\u文件['file']['mime-type']
永远不应该被信任。它们仅用于提示,不应用于验证用户上传
谈到代码中的问题,您当前正在将图像mime类型与预定义的mime类型集进行比较。我将删除该条件语句,改为使用:
此外,您当前正在使用explode()
提取文件名:
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
这很好,并且会像您预期的那样工作。但您可以使用函数,它是专门为此目的而设计的
$path = $_FILES['file']['name'];
$extension = pathinfo($path, PATHINFO_EXTENSION);
如果您的代码(未经测试),以下是改进的版本:
$allowedExts=array(“gif”、“jpeg”、“jpg”、“png”);
$imagesize=$_文件[“文件”][“大小”]//将大小存储到变量中
$path=$\u文件['file']['name'];
$extension=pathinfo($path,pathinfo\u extension);