0

PHPで画像アップローダーを書いてみました。しかし、試してみるとエラーが発生します。

エラーは次のとおりです。

厳格な基準: 10 行目の C:\xx\xx\xx\profile_image_upload_script.php では、参照によって変数のみを渡す必要があります。

10 行目は次のとおりです。 $extension = end(explode(".", $file_name_encrypted));


画像アップロードスクリプト

<?php
$allowedExts = array("gif", "jpeg", "jpg", "png");

$file_name = $_FILES["file"]["name"];
echo "File name:".$file_name;

$file_name_encrypted = $file_name."".md5(rand(1, 1000000));


$extension = end(explode(".", $file_name_encrypted));
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 2097152) // 2 MB
&& in_array($extension, $allowedExts))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
    }
  else
    {
    echo "Upload: " . $file_name_encrypted . "<br>";
    echo "Type: " . $_FILES["file"]["type"] . "<br>";
    echo "Size: " . ($_FILES["file"]["size"] / 1024*1024) . " MB<br>";
    echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";

    if (file_exists("upload/" . $file_name_encrypted))
      {
      echo $file_name_encrypted . " already exists. ";
      }
    else
      {
      move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $file_name_encrypted);
      echo "Stored in: " . "upload/" . $file_name_encrypted;
      }
    }
  }
else
  {
  echo "Invalid file";
  echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
  }
?>

注: スクリプトは html フォームからファイル名を取得していますが、問題はありません。

4

2 に答える 2

0

ファイル名に md5 を追加するため、実際の拡張子または一致$file_name_encryptedする拡張子は含まれません。

$file_name_encrypted = $file_name."".md5(rand(1, 1000000));

例えばfilename.jpg79054025255fb1a26e4bc422aef54eb4

$allowedExtsしたがって、配列内のいずれとも一致しません。それを修正してください:

その行も変更します。

$extension = pathinfo($file_name_encrypted, PATHINFO_EXTENSION);

または、分解してから、分解されたものを end() 関数に渡します。

$temp = explode(".", $file_name_encrypted);
$extension = end($temp);
于 2013-06-27T13:34:10.760 に答える
0

これを修正する方法は、最初に分解してから、その配列を最後に使用することです。 end()内部ポインターを操作するため、パラメーターを参照渡しする必要がありますが、変数参照がないと正しく機能しません。 次に
これを試してください
$array = explode(".", $file_name_encrypted);

$extension = end($array);

于 2013-06-27T13:32:11.457 に答える