我编写了一个PHP脚本来上传文件。但是当我按下提交按钮时,它会显示一条错误消息:
Strict Standards: Only variables should be passed by reference in H:\xampp\htdocs\phpTest\upload_file.php on line 4.
第4行是$ extension = end(explode(“。”,$ _FILES [“file”] [“name”]));
upload_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";
}
?>
答案 0 :(得分:6)
您尝试对仅存在于该函数调用的上下文中的数组执行end()
。完成该行代码后,阵列将不再存在。试试这个:
$bits = explode(".", $_FILES["file"]["name"])
$extension = end($bits);
话虽这么说,这是一个很糟糕的方法来提取文件扩展名,而且也非常不安全。 $ _FILES数组中提供的文件名是远程客户端给出的文件名。伪造该文件名是非常简单的,允许用户上传“讨厌的病毒”。但是发出“cutekittens.jpg”#39;作为文件名。
不要始终信任用户端数据,尤其是文件上传。通过fileinfo
使用服务器端MIME类型确定答案 1 :(得分:3)
此数组通过引用传递,因为它由函数修改。这意味着你必须传递一个实变量,而不是一个返回数组的函数,因为只有实际的变量可以通过引用传递。
所以你应该在一个变量中分配爆炸结果,然后在那个
上结束()答案 2 :(得分:0)
如果因为结束功能而出现问题,那么您可以执行以下操作来获取文件的扩展名:
$path_parts = pathinfo($fullPath);
$extension = strtolower($path_parts["extension"]);