1

我正在使用以下代码供用户上传图像。

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

4 回答 4

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");
于 2011-07-13T17:35:35.467 回答
0

是的,肯定有一种方法可以限制字符串格式。我建议您使用 preg_match http://php.net/manual/en/function.preg-match.php通过 PHP 研究使用 PERL 正则表达式

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

于 2011-07-13T17:35:03.000 回答
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");
}

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

于 2011-07-13T17:35:46.343 回答
0

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

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

但是,为什么要对上传设置如此烦人的限制呢?我希望你不会认为它会使它变得安全或任何东西?

于 2011-07-13T17:38:04.737 回答