我正在尝试在我的网站上存储一个图像,所以我可以轻松地使用它,但是我发现了here的这个PHP代码,我对它没有多大意义..我刚刚开始我不知道要改变什么以及要保留什么......如果你能为我解释一下这一点,我将非常感激,谢谢。
<?php
$allowedExts = array("jpg", "jpeg", "gif", "png");
$extension = end(explode(".", $_FILES["file"]["name"]));
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/png")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000)
&& 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";
}
?>
答案 0 :(得分:2)
我会稍微打破一下:
$allowedExts = array("jpg", "jpeg", "gif", "png");
我们只允许jpg,jpeg,gif和png文件上传。此数组包含我们允许的扩展名。如果您愿意,可以在此处添加其他扩展程序。
$extension = end(explode(".", $_FILES["file"]["name"]));
这有几个方面。首先,您需要意识到当文件上传到PHP时,它由$ _FILES数组访问。 $ _FILES ['file'] ['name']包含上传文件的文件名。为了从文件名中获取扩展名,将名称转换为具有爆炸的数组,将其拆分为“。”字符。因此,如果文件名为image.jpg,您最终会得到一个数组('image','jpg')。 end()函数接受数组的最后一个元素。所以在这个例子中你最终会得到'jpg'。
> if ((($_FILES["file"]["type"] == "image/gif") ||
> ($_FILES["file"]["type"] == "image/jpeg") || ($_FILES["file"]["type"]
> == "image/png") || ($_FILES["file"]["type"] == "image/pjpeg")) && ($_FILES["file"]["size"] < 20000) && in_array($extension,
> $allowedExts))
这只是检查文件类型是'image / gif','image / jpeg','image / png'或'image / pjpeg'之一,它是20000字节以下,文件扩展名是在$ allowedExts数组中。
假设以下行检查错误代码并在出现上传错误时将其打印出来:
if ($_FILES["file"]["error"] > 0)
{
echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
}
如果没有错误(即$ _FILES ['file'] ['error']&lt; = 0)那么它会输出一些有关上传的信息,然后检查/ uploads目录中是否存在该文件上传名称:
if (file_exists("upload/" . $_FILES["file"]["name"]))
然后在文件已存在时打印出错误。
如果该文件尚不存在,则会将文件从上载时放入的临时位置复制,并将其移至具有相应文件名的/ upload目录。
答案 1 :(得分:1)
我不确定您要删除或保留的内容,但是,我可以解释代码中正在执行的操作。
此代码假定您有一个html块,用于定义type =“file”的type =“file”的输入。
提交文件时传递的参数存储在$ _FILES []中。 $ _FILES有很多信息,包括文件类型,大小,错误信息。
第一行标识要在以后使用有效图像文件扩展名的数组。
第一个if语句检查以确定传递的文件是否是使用mime类型检查的有效文件格式,检查扩展名是否有效,以及大小是否可接受。如果这不是有效的文件类型,代码将跳转到代码的底部并创建错误消息。您可能希望更改可接受的文件大小。
如果出现错误,则返回消息。 如果没有错误,则此代码将打印出有关正在上载的文件的统计信息。它提供文件名,文件类型,文件大小和文件的临时名称。
代码检查文件是否已经加载到“upload /”目录中。您可能想要更改文件的存储位置,您可以更改此选项以检查存储图像的目录。
如果发现该文件已在服务器上,则会发出警告消息并停止处理。您可能希望更改此项以重命名该文件并继续处理。
如果文件尚未在服务器上,则下一行: move_uploaded_file($ _ FILES [“file”] [“tmp_name”],“upload /”。$ _FILES [“file”] [“name”]);
将内容从临时存储位置移动到永久目录“upload /”,并打印上传已完成。
注意:这是一个非常简单的上传过程版本......虽然有效。你可能想要 : 1)调整此值,这样如果有人使用扩展名.GIF,JPG或PNG以及一些相机和人们用大写字母存储东西,它就不会失败。在大写和小写中识别扩展可能会很好。 2)如果您认为可能要保存旧文件副本,请重命名旧文件或新上载的文件。 3)更新文件大小,当前文件大小很小
答案 2 :(得分:1)
<强> DISSECTION:强>
<?php
$allowedExts = array("jpg", "jpeg", "gif", "png");
$extension = end(explode(".", $_FILES["file"]["name"]));
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/png")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
以上检查上传图片的mime类型为允许的
&& ($_FILES["file"]["size"] < 20000)
&& in_array($extension, $allowedExts))
指定最大大小,并检查文件扩展名是否在数组$ extension
中{
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. ";
}
如果服务器上的upload/
文件夹中存在文件,请回显该特定文件已存在
else
{
move_uploaded_file($_FILES["file"]["tmp_name"],
"upload/" . $_FILES["file"]["name"]);
echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
}
}
如果服务器上的上传文件夹中尚不存在,则将其复制到该文件夹中。
}
else
{
echo "Invalid file";
}
如果在步骤1和2中检查文件类型,扩展名,大小等失败,则无效
答案 3 :(得分:0)
我将尝试使用代码的基本细分。
$allowedExts = array("jpg", "jpeg", "gif", "png");
创建一个包含允许的文件扩展名的数组(jpg,jpeg,gif和png“。
$extension = end(explode(".", $_FILES["file"]["name"]));
将提取正在上传的文件的文件扩展名,并将该值保存在变量$ extension中。
下面解释了以下块:
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/png")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000)
&& in_array($extension, $allowedExts))
{
if ($_FILES["file"]["error"] > 0)
{
echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
}
此if条件检查正在上载的文件的扩展名。如果文件是gif,或jpeg或png AND小于20000字节并且在允许扩展的数组中找到扩展名,则条件为真。如果为false,则运行第二个if子句,代码将根据失败的内容打印错误。您可以在此处找到PHP $ _FILES错误的完整列表:http://www.php.net/manual/en/features.file-upload.errors.php。
如果检查文件扩展名和大小的if子句结果为true,则执行以下代码:
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"];
}
}
}
基本上,这首先检查所选文件是否已存在,并带有第一个if子句。如果存在,则说明并结束脚本。如果它尚不存在,则传输文件并说明成功传输。
绝对最后一个else子句,else{echo "Invalid file";}
看起来只是一个故障保护,如果出现严重错误的话,它将退出脚本。
这是一个非常简单的文件传输脚本,几乎没有安全性。如果你想使用这个脚本要非常小心,因为如果让不信任的用户使用它,它可能会导致重大问题。
我希望这是可以理解的。