0

私はlampp(最後のバージョン)でarchlinuxを使用していますw3c-schoolからphpを学び、ページアップロードファイルを使用していますが、ここではスクリプトで何もアップロードできません。返されるのは無効なファイル(.jpg .png ecc)だけです。 ..)ここにコードがあります:

 <?php


include "config_db.php";

$name = "/upload/" . $_FILES['file']['name'];
$allowedExts = array("jpg", "jpeg", "gif", "png");
$extension = in_array(explode(".", $_FILES["file"]["name"]), $allowedExts);
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/png")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 100000)
&& 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"];
      echo '<img src="upload/' . $_FILES["file"]["name"] . '">';
      }
    }
  }
else
  {
  echo "Invalid file";
  }
?>
4

6 に答える 6

1

画像名に。(ドット)が含まれている場合は、問題があります。たとえば、画像名が12.212.jpgのような場合、画像名を。(dot)で展開すると、拡張子は.212になります。したがって、この場合、以下のコードのように使用する必要があります。

$name = "/upload/" . $_FILES['file']['name'];
$allowedExts = array("jpg", "jpeg", "gif", "png");
$extension = explode(".", $_FILES["file"]["name"]);
$extension = end($extension);

それはあなたに正確な画像フォーマットを与えるでしょう。

于 2013-02-28T04:24:39.280 に答える
0

エラーは下の行にあります。

$extension = in_array(explode(".", $_FILES["file"]["name"]), $allowedExts);

以下のようにする必要があります。

$extension = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);

また、以下の条件の場合も変更してください。

if (in_array($extension, $allowedExts))
于 2013-02-28T04:20:02.587 に答える
0

この条件を変更します

&& in_array($extension, $allowedExts))

この状態だけに

&& $extension)

2回使用したのでin_array2回目は不要です。

于 2013-02-28T04:20:46.300 に答える
0

問題は機能にあると思いin_array()ます。この行の拡張子はすでに確認済みです。

$extension = in_array(explode(".", $_FILES["file"]["name"]), $allowedExts);

現在$extension、値はTRUEです。

$extensionしたがって、if条件でこれを確認することはできません。その代わりに、

$extensionTRUEかどうかを確認するだけです。

if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/png")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 100000)
&& $extension)
于 2013-02-28T04:23:43.517 に答える
0

拡張子を間違った方法でチェックしています。あるべき姿は次のとおりです。

$allowedExts = array("jpg", "jpeg", "gif", "png");
$extension = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);
header ("Content-Type: text/plain");
if ((($_FILES["file"]["type"] == "image/gif")
  || ($_FILES["file"]["type"] == "image/jpeg")
  || ($_FILES["file"]["type"] == "image/png")
  || ($_FILES["file"]["type"] == "image/pjpeg"))
  && ($_FILES["file"]["size"] < 100000)
  && in_array ($extension, $allowedExts)) echo "Success";
else echo "Error";

このコードは、次のフォームと一緒に使用すると問題なく機能します。

<form method="POST" enctype="multipart/form-data" action="upload.php">
  <input type="file" name="file" />
  <input type="submit" />
</form>
于 2013-02-28T04:30:46.807 に答える
0

拡張子がcaps(つまり、image.JPG)の場合、無効なファイルが表示されるという問題が発生しました。私はこのコードを使用しました:

$t_image = strtolower($_FILES['file']['name']);

この問題を解決するために。

于 2014-01-12T20:48:20.303 に答える