enctype="multipart/form-data">
First Name:
Last Name:
Відправка зображення:
Зверніть увагу на атрибут enctype="multipart/form-data". Саме завдяки йому форма налаштована на отримання даних. Щоб користувачі не придумали завантажувати котиків на 25 Мбайт, у полі hidden потрібно обов'язково встановити обмеження на розмір картинок. Для зображення профілю цілком достатньо 2 Мбайт, як у цьому прикладі.
У формі вище в атрибуті action варто означає , що прийом і обробка зображення буде відбуватися у цьому ж документі. Якщо вас це бентежить і ви хочете, щоб для кожної дії був свій окремий скрипт, вставити на місце конструкції ім'я сценарію, наприклад, create_profile.php. Тепер весь код включаючи роботу з функцією PHP move uploaded file , записуйте в цьому файлі.
'Перевищено макс. розмір файлу, вказаний в php.ini',
2 => 'Перевищено макс. розмір файлу, зазначений у формі HTML',
3 => 'Була відправлена лише частину файлу',
4 => 'Файл для відправки не був обраний.');
//перевірка помилки при відправленні файлу
($_FILES[$image_fieldname] ['error']==0) or
die("помилка при відправці файлу". $php_errors[$_FILES[$image_fieldname] ['error']]);
//перевірити нормальний файл відправляють, або це спроба злому
@is_uploaded_file($_FILES[$image_fieldname] ['tmp_name']) or
die('Ви совершиете аморальний вчинок, ганьба!'."Ім'я файлу: "."'{$_FILES[$image_fieldname] ['tmp_name']}'");
//чи є запропонований файл зображенням
@getimagesize($_FILES[$image_fieldname] ['tmp_name']) or die("Помилка! обраний Вами файл не є зображенням". "Ім'я файлу {$_FILES[$image_fieldname] ['tmp_name']}");
//присвоєння завантажуваного файлу унікального імені
$now = time();
while(file_exists($upload_filename = $uploads_dir.$now.'-'.$_FILES[$image_fieldname] ['name'])){
$now++;
}
?>
У коді присутні допоміжні змінні:
Як бачите, перед викликом move uploaded file знаходяться рядки, які виконують перевірку завантажуваного зображення. Звичайно, безпечні PHP-додатки — це міф, але повинна бути хоча б мінімальна захист.
Масив перевірки помилок $php_errors починається не з нуля, а з одиниці. Під індексом[0]коштує $_FILES[$image_fieldname] ['error'], який у разі вдалого завантаження повертає число 0. В PHP $_FILES - це спеціальний масив, що містить всю інформацію про файл. Для доступу до цих даних використовується індекс з ім'ям поля введення, яке ми раніше вивели в окрему змінну $image_fieldname:
//перевірка помилки при відправленні файлу
($_FILES[$image_fieldname] ['error']==0) or
die("помилка при відправці файлу". $php_errors[$_FILES[$image_fieldname] ['error']]);
Вам здається, що ви все зробили правильно, а інтерпретатор видає помилку? Файл відмовляється завантажуватися в призначену директорію і з'являється в абсолютно несподіваних місцях? В першу чергу перевірте php.ini на дозволений розмір в параметрі upload_max_filesize. Найчастіше така помилка виникає у Denver. Тому відкрийте php.ini (зазвичай він знаходиться в папці php) і просто встановіть потрібний вам розмір:
;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;
; Whether to allow HTTP file uploads.
; http://php.net/file-uploads
file_uploads=On
; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
; http://php.net/upload-tmp-dir
upload_tmp_dir="***"
; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize=5M
; Maximum number of files that can be uploaded via a single request
max_file_uploads=50