Загрузка файлов на сервер на php. Введение
В этой статье я хочу показать как можно быстро и просто реализовать загрузку файлов на сервер с помощью php с проверками файла на размер и на формат. Эта тема хоть и простая и очень распространенная, все же по ней тоже часто возникают вопросы у программистов новичков.
Чтобы передать какие-либо данные из браузера на сервер необходимо на странице создать html-форму:
<form action="/form/index.php" method="POST" enctype="multipart/form-data"> <input type="file" name="upload_file"><br> <input type="submit" value="Загрузить"><br> </form>
В которой будет указан путь к скрипту на сервере, куда будут отправлены данные, в данном случае это /form/index.php. Также указывается метод передачи данных — POST или GET. И необходимо указать тип передаваемых данных, чтобы передавать файлы, тип должен быть multipart/form-data.
Когда сама форма готова, внутри нее следует создать input и типом file, в него пользователь сможет загрузить файл, для последующей отправки на сервер.
Далее начинается самое интересное — получение и обработка данных на сервере. Все данные о файле будет храниться в суперглобальной переменной $_FILE. Поэтому первым делом на сервере необходимо проверить — существует эта переменная или нет. В случае существования, мы можем проверить размер файла, получить его имя, расширение и путь к нему, файл будет хранится во временных файлах.
Загрузка файлов в php. Код
Сперва сверстаем небольшую форму и добавим условия, при которых будет отображаться сообщения об успешной отправке файла или об случившихся ошибках:
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <br/> <?php if(!empty($error_array)): ?> <span style="color: red;">Файл не загружен!</span><br/> <?php foreach($error_array as $one_error): ?> <span style="color: red;"><?=$one_error;?></span><br/> <?php endforeach; ?> <?php endif; ?> <?php if(empty($error_array) AND $_FILES): ?> <span style="color: green;">Файл успешно загружен!</span><br/> <?php endif; ?> <form action="/form/index.php" method="POST" enctype="multipart/form-data"> <input type="file" name="upload_file"><br> <input type="submit" value="Загрузить"><br> </form> </body> </html>
Теперь напишем серверный скрипт, который будет проверять размер и формат файла, а так же в случае корректных данных будет сохранять файл на сервере.
<?php
// ограничение размера файла
$limit_size = 1*1024*1024; // 1 Mb
// корректные форматы файлов
$valid_format = array("jpeg", "jpg", "gif", "png");
// хранилище ошибок
$error_array = array();
// путь до нового файла
$path_file = "files/";
// имя нового файла
$rand_name = md5(time() . mt_rand(0, 9999));
// если есть отправленные файлы
if($_FILES){
// валидация размера файла
if($_FILES["upload_file"]["size"] > $limit_size){
$error_array[] = "Размер файла превышает допустимый!";
}
// валидация формата файла
$format = end(explode(".", $_FILES["upload_file"]["name"]));
if(!in_array($format, $valid_format)){
$error_array[] = "Формат файла не допустимый!";
}
// если не было ошибок
if(empty($error_array)){
// проверяем загружен ли файл
if(is_uploaded_file($_FILES["upload_file"]["tmp_name"])){
// сохраняем файл
move_uploaded_file($_FILES["upload_file"]["tmp_name"], $path_file . $rand_name . ".$format");
}else{
// Если файл не загрузился
$error_array[] = "Ошибка загрузки!";
}
}
}
?>
На этом все, исходники формы для загрузки файлов на php, вы можете скачать — тут.

(7 оценок, среднее: 4,14 из 5)
А почему после сохранения файла на сервере он становится не доступен ?
и если не сложно скажите какой шрифт используете ?
Добрый день! А по какому адресу вы пытаетесь файл брать? Адрес верный?
Шрифт в консольке можно посммотреть, я уже не помню какой — сайт давно сделан