2012-08-06 88 views
2

我已经写了一个PHP脚本来上传文件。但是,当我按下提交按钮它给出了一个错误消息:文件上传中的严格标准错误

Strict Standards: Only variables should be passed by reference in H:\xampp\htdocs\phpTest\upload_file.php on line 4. 

线4是$延长=结束( “ ”爆炸(,$ _FILES [“ 文件 ”] [“ 名称”]));

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

我不知道为什么有人做downvoted这个问题....这是全部有效和不同的问题...解释可以是什么...提供的代码...所以我投票这 – sandeepKumar 2012-08-06 04:53:28

+0

接受答案,当它适用于你..所以,我们可以知道什么是真实的错误 – sandeepKumar 2012-08-06 04:54:59

+0

谢谢@SandeepKumar。我已经接受了答案,但我必须等待5分钟才能做到这一点。 – user1559230 2012-08-06 04:59:09

回答

6

你想这只是函数调用的上下文中存在的阵列上做end()。一旦这一行代码完成,数组将不再存在。试试这个:

$bits = explode(".", $_FILES["file"]["name"]) 
$extension = end($bits); 

话虽这么说,这是一个贫穷的方式去提取文件扩展名,同时也是高度不安全。 $ _FILES数组中提供的文件名是由远程客户端提供的文件名。伪造该文件名是非常简单的,允许用户上传'nastyvirus.exe',但发送'cutekittens.jpg'作为文件名。

永远不要相信用户端的数据,特别是对文件上传。通过fileinfo

3

根据手册,http://www.php.net/end

该数组是通过参考,因为它是由函数修改通过。这意味着您必须将它传递给一个实变量,而不是返回数组的函数,因为只有实际变量可以通过引用传递。

所以,你应该分配爆炸导致一个变量,然后结束()上一个

+0

谢谢Periklis – user1559230 2012-08-06 04:50:53

0

使用服务器端的MIME类型确定如果有那么你可以做以下来获得文件的扩展名,只是因为最终功能的问题:

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