【问题标题】:Strict Standards Error while image upload with PHP script使用 PHP 脚本上传图像时出现严格标准错误
【发布时间】:2013-06-25 00:45:18
【问题描述】:

我尝试用 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表单获取文件名,没有问题

【问题讨论】:

    标签: php html image-uploading image-upload


    【解决方案1】:

    注意$file_name_encrypted 不会包含 real可匹配 扩展名,因为您的文件名附加带有 md5:

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

    例如filename.jpg79054025255fb1a26e4bc422aef54eb4

    所以它永远不会匹配你的 $allowedExts 数组中的任何一个。然后修复它:

    也改变那行:

    $extension = pathinfo($file_name_encrypted, PATHINFO_EXTENSION);
    

    或者explode然后将exploded传递给end()函数。

    $temp = explode(".", $file_name_encrypted);
    $extension = end($temp);
    

    【讨论】:

    • 另外md5也不是加密。
    【解决方案2】:

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

    【讨论】:

    • 现已解决严格标准错误,但出现了新错误。 Invalid file Return Code: 0
    • 您以错误的方式检查扩展程序。 O baska bir soru :D
    • @hakiko 该代码中的 0 表示上传正常,但由于我在回答中提到的内容而失败..
    猜你喜欢
    • 2013-01-20
    • 2012-10-27
    • 2010-11-17
    • 2013-12-10
    • 2012-08-03
    • 2011-10-07
    • 1970-01-01
    • 2016-12-11
    • 1970-01-01
    相关资源
    最近更新 更多