2012-08-06 92 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"]);