2013-06-27 4 views
0

Я пытаюсь написать загрузчик изображений с php. Но я пытаюсь сделать ошибку.Строгий Стандарт Ошибка при загрузке изображения с помощью PHP-скрипта

Ошибка:

Строгие стандарты: только переменные должны быть переданы по ссылке в C: \ хх \ хх \ хх \ profile_image_upload_script.php на линии 10

Line 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 не будет содержать реального или Matchable продление, потому что ваш добавив имя файла с md5:

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

например filename.jpg79054025255fb1a26e4bc422aef54eb4

Так оно никогда не будет соответствовать ни одному в вашем массиве $allowedExts. Fix, что тогда:

Изменить что линия тоже:

$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 в этом коде означает, что загрузка была в порядке, но ее ошибка из-за того, что я упомянул в своем ответе. –