用php存储图像?

时间:2012-10-21 04:06:18

标签: php image

我正在尝试在我的网站上存储一个图像,所以我可以轻松地使用它,但是我发现了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";
  }
?>

4 个答案:

答案 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";}看起来只是一个故障保护,如果出现严重错误的话,它将退出脚本。

这是一个非常简单的文件传输脚本,几乎没有安全性。如果你想使用这个脚本要非常小心,因为如果让不信任的用户使用它,它可能会导致重大问题。

我希望这是可以理解的。