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

解决此问题的方法是先爆炸,然后最后使用该数组。 end()需要通过引用传递其参数,因为它操纵内部指针,但如果没有变量引用,它将无法正常工作。 那就
试试这个
$array = explode(".", $file_name_encrypted);

$extension = end($array);

于 2013-06-27T13:32:11.457 回答
0

注意$file_name_encrypted不会包含真实的或可匹配的扩展名,因为您在文件名中附加了 md5:

$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 回答