Я пытаюсь написать загрузчик изображений с 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-формы, нет проблем
Примечание. $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);
Способ исправить это – сначала взорваться, а затем использовать этот массив в конце. end()
должен получить свой параметр, переданный по ссылке, потому что он манипулирует внутренним указателем, но если нет ссылки на переменную, он не будет работать корректно.
Попробуй это
$array = explode(".", $file_name_encrypted);
тогда
$extension = end($array);