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 ファイルのみをアップロードできます。また、アップロードするファイルの名前に制限を追加する必要があります。基本的に、次のように名前が付けられている場合にのみ、ファイルのアップロードを許可したい: ロゴ. アップロードするファイルの名前を制限する方法はありますか?

ありがとう!

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 に答える