限制上传文件的名称

时间:2011-07-13 17:32:28

标签: php file-upload restriction

我使用以下代码供用户上传图片。

if ((($_FILES["companylogofile"]["type"] == "image/jpeg")
|| ($_FILES["companylogofile"]["type"] == "image/pjpeg"))
&& ($_FILES["companylogofile"]["size"] < 75000))
  {
  if ($_FILES["companylogofile"]["error"] > 0)
    {
    echo "Return Code: " . $_FILES["companylogofile"]["error"] . "<br />";
    }
  else
    {
    echo "Upload: " . $_FILES["companylogofile"]["name"] . "<br />";
    echo "Type: " . $_FILES["companylogofile"]["type"] . "<br />";
    echo "Size: " . ($_FILES["companylogofile"]["size"] / 1024) . " Kb<br />";
    echo "Temp file: " . $_FILES["companylogofile"]["tmp_name"] . "<br />";

    if (file_exists("Template/" . $_FILES["companylogofile"]["name"]))
      {
      echo $_FILES["companylogofile"]["name"] . " already exists. ";
      }
    else
      {
      move_uploaded_file($_FILES["companylogofile"]["tmp_name"],
      "Template/" . $_FILES["companylogofile"]["name"]);
      }
    }
  }
else
  {
  echo "Invalid file";
  }

正如您所看到的,我只接受上传时带有大小限制的.jpeg文件。我还需要做的是对他们上传的文件的名称添加限制。基本上我想只允许文件上传,如果它们被命名为:Logo。有没有办法限制正在上传的文件的名称?

谢谢!

4 个答案:

答案 0 :(得分:1)

if (!preg_match("/logo/i", $_FILES["companylogofile"]["name"])) die("File have to contain 'logo' in name");

如果您正在寻找“Logo.jpg”,那么可以通过

实现
if ("Logo.jpg" != $_FILES["companylogofile"]["name"]) die("File have to contain 'logo' in name");

答案 1 :(得分:0)

是的,肯定有一种方法可以限制字符串格式。我建议你使用preg_match http://php.net/manual/en/function.preg-match.php

来研究通过PHP使用PERL正则表达式

如果之前没有使用过正则表达式,它们只是一种通过压缩语法测试字符串格式的方法。可以在此处找到开始使用正则表达式的好地方:http://www.addedbytes.com/cheat-sheets/regular-expressions-cheat-sheet/

答案 2 :(得分:0)

什么构成'坏'文件“Logo3?logo-with-some-long-rambling-filename?

function isValidFileName($filename) {
   ... what do you want here?
}

if (!isValidFileName($_FILES['companylogoimage']['name'])) {
   die("Ooops, bad filename");
}

仅供参考:不要使用$ _FILES数组中的['type']值进行验证。这是用户提供的文件的mime类型 - 它可以很容易地改为骗你。使用类似getimagesize()的内容使服务器确定图像的类型。

答案 3 :(得分:0)

是的,只需测试$_FILES['companylogofile']['name']。例如:

if (false === strpos(strtolower($_FILES['companylogofile']['name']), 'logo')) {
    echo 'Error!';
    unlink($_FILES['companylogofile']['tmp_name'];
    return;
}

但是,为什么你要对上传施加如此恼人的限制?我希望你不认为它会让它变得安全或什么东西?