2013-06-27 38 views
0

我嘗試用php編寫圖片上傳器。但是,當我嘗試時它會給出錯誤。用PHP腳本上傳圖片時發生嚴格的標準錯誤

錯誤是:

嚴格的標準:只有變量應該通過引用在C通過:\ XX \ XX \ XX \上線profile_image_upload_script.php 10

線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表單獲取文件名,是沒有問題的

回答

0

注意$file_name_encrypted將不包含真正可匹配擴展,因爲你的附加文件名以MD5:

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

例如filename.jpg79054025255fb1a26e4bc422aef54eb4

因此它永遠不會匹配您的$allowedExts陣列中的任何數據。解決這個問題,那麼:

更改了該行太:

$extension = pathinfo($file_name_encrypted, PATHINFO_EXTENSION); 

或爆炸,然後通過爆炸來結束()函數。

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

另外md5不是加密。 –

0

解決這個問題的辦法是先爆炸,然後使用該數組中結束。 end()需要通過引用傳遞參數,因爲它操縱內部指針,但如果沒有變量引用,它將無法正常工作。
試試這個
$array = explode(".", $file_name_encrypted);
然後
$extension = end($array);

+0

現在解決了嚴格的標準錯誤,但有一個新的錯誤。 '無效文件 返回碼:0' – hakiko

+0

您正在以錯誤的方式檢查擴展名。 O baska bir soru:D – PoX

+0

@hakiko該代碼中的0意味着上傳可以,但是由於我在我的回答中提到的內容而失敗。 –