Php 文件上传中的严格标准错误

Php 文件上传中的严格标准错误,php,Php,我写了一个PHP脚本来上传文件。但当我按下提交按钮时,会显示一条错误消息: Strict Standards: Only variables should be passed by reference in H:\xampp\htdocs\phpTest\upload_file.php on line 4. 第4行是$extension=end(分解(“.”,$_FILES[“file”][“name”]) 上传_file.php: <?php $allowedExts = array

我写了一个PHP脚本来上传文件。但当我按下提交按钮时,会显示一条错误消息:

Strict Standards: Only variables should be passed by reference in H:\xampp\htdocs\phpTest\upload_file.php on line 4.
第4行是$extension=end(分解(“.”,$_FILES[“file”][“name”])

上传_file.php:

<?php

$allowedExts = array("jpg", "jpeg", "gif", "png");
$extension = end(explode(".", $_FILES["file"]["name"]));
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000)
&& in_array($extension, $allowedExts))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Error: " . $_FILES["file"]["error"] . "<br />";
    }
  else
    {

$target_Path = "images/";
$target_Path = $target_Path.basename( $_FILES['file']['name'] );
move_uploaded_file( $_FILES['file']['tmp_name'], $target_Path );


  echo "Upload: " . $_FILES["file"]["name"] . "<br />";
  echo "Type: " . $_FILES["file"]["type"] . "<br />";
  echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
  echo "Stored in: " . $_FILES["file"]["tmp_name"];
  echo $target_Path;
  }
  }
  else
  {
  echo "Invalid file";
  }
?> 

根据手册

此数组是通过引用传递的,因为它是由函数修改的。这意味着您必须传递一个实变量,而不是返回数组的函数,因为只能通过引用传递实变量


因此,您应该在一个变量中指定分解结果,然后在您试图对一个仅存在于该函数调用上下文中的数组执行的操作上结束()。一旦该行代码完成,数组将不再存在。请尝试以下方法:

$bits = explode(".", $_FILES["file"]["name"])
$extension = end($bits);
也就是说,这是提取文件扩展名的一种糟糕的方法,而且非常不安全。$_FILES数组中提供的文件名是远程客户端给定的文件名。伪造该文件名绝非易事,它允许用户上传'nastyvirus.exe',但发送'cutekittens.jpg'作为文件名


永远不要信任用户端数据,尤其是对于文件上载。通过

使用服务器端MIME类型确定如果仅仅因为结束函数而出现问题,则可以执行以下操作以获取文件扩展名:

$path_parts = pathinfo($fullPath);
$extension = strtolower($path_parts["extension"]); 

我不知道为什么有人对这个问题投了否决票……这都是有效的,是一个不同的问题……解释了可以提供什么……代码……所以我投了赞成票,当它对你有效时接受答案……这样我们就可以知道真正的错误是什么了谢谢@sandepkumar。我已经接受了答案,但我不得不等5分钟才能回答。多亏了你,我学到了一个新的东西…我不会错的