Урок 10. UPLOAD файла. Загрузка файла на сайт.

Загрузка файлов на сервер сейчас очень распространена. На любом форуме при редактирования профиля вы вставляете свою фотку, на любом файл-хостинге вы загружаете файл в хранилище чтобы с кем то потом поделиться, в галерее фотографий вы добавляете свои фотки , при отправке почты вы прикрепляете какой либо файл и тд. Т.е. можно найти любое применение этой функции. Поэтому чтобы Вам было понятно как происходит процесс залития файла на сервер, я написал этот небольшой урок.

Детали

Вот что мы разберем в сегодняшнем уроке:

  • Форма отправки файла;
  • Скрипт загрузки файла;
  • Дальнейшие действия (копирование, перемещение файла и тд);
  • +Бонус.

Форма отправки файла

Создайте новый файл, это будет страничка, на которой будет предоставлен выбор для загрузки файла. Сама форма для отправки достаточно простая, это небольшой фрагмент html-кода.

1
2
3
4
5
6
<?php
 echo '<form action="upload.php" method="post" enctype="multipart/form-data">';
 echo 'Файл: <input type="file" name="FILE" size="30" />&nbsp;&nbsp;';
 echo '<input type="submit"  value="загрузить">';
 echo '</form>';
?>

Эта форма содержит дополнительный атрибут enctype=»multipart/form-data», он как раз таки указывает что форма будет использоваться для загрузки файла. Также поле input теперь имеет другой тип type=»file». Сохраните файл в в отдельной папке, пусть её имя будет upload. Обратитесь к ней из браузера (http://127.0.0.1/upload/), у вас должна появится следующая картинка:

UPLOAD файла

Создайте новый файл upload.php. Это будет скрипт, который будет обрабатывать полученный файл, копировать его в нужное место. Файл который мы передаем из формы мы будем извлекать из суперглобального массива $_FILES. Давайте разберем его содержание:

  • $_FILES['FILE']['name'] - имя полученого файла;
  • $_FILES['FILE']['type'] - Mime-тип полученного файла (пример image/gif);
  • $_FILES['FILE']['size'] – размер полученного файла в байтах;
  • $_FILES['FILE']['tmp_name']- временное имя, с которым принятый файл был сохранен на сервере.

А теперь посмотрим как это все работает. Создайте новый файл.

upload.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php

$url = "files";
  // 1)Проверяем, существует ли имя.
if($_FILES['FILE']['name']){
 // 2)Проверяем размер файла
        if($_FILES['FILE']['size'] != 0 AND $_FILES['FILE']['size']<=102400)
    {
       // 3)Проверяем загрузился ли файл на сервер
    if(is_uploaded_file($_FILES['FILE']['tmp_name'])) {
            // 4)Перемещаем загруженный файл в необходимую папку $url
            if(move_uploaded_file($_FILES['FILE']['tmp_name'], $url."/".basename($_FILES['FILE']['name']))) {
                    //Выводим сообщение что файл обработа и загружен
                    echo 'Файл '.basename($_FILES['FILE']['name']).' был успешно загружен в '.$url;
                                                                                                           }
            else { echo 'Произошла ошибка при перемещении файла в папку'.$url;}

                                                                              }
        else {echo 'Прозошла ошибка при загрузке файла на сервер';}

                                                        }
    else { echo 'Размер файла не должен превышать 100Кб';}
                             }
else { echo 'Файл должен иметь название';}

?>

Как видите скрипт содержит несколько стандартных условий:

  1. Проверка имени файла;
  2. Проверка загрузился ли файл ( не будет работать, если файл превышает upload_max_filesize, выставленный в php.ini вашего веб сервера, в WAMP по умолчанию максимальный размер загружаемого файла равен 2Мб);
  3. Проверка размера загруженного файла, в этом скрипте по умолчанию не более 100кб;
  4. Далее проверяем был ли перемещен файл в нужную нам папку на сервере.

Если все условия выполены – выводим сообщение об успешно завершенной операции. Если данный скрипт необходимо доработать для загрузки только фоток jpg, то просто можете добавить дополнительное условие между 1 и 2:

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php

$url = "files";
  // 1)Проверяем, существует ли имя.
if($_FILES['FILE']['name']){
    if($_FILES['FILE']['type'] == 'image/jpeg') {
        //2,3,4 Условия
                                                           }
else { echo 'Файл не является картинкой формата JPG';}
                             }
else { echo 'Файл должен иметь название';}

?>

В принципе можно доработать под любой тип файла, полный список mime-типов можете найти здесь. Чтобы не возникало ошибок создайте папку files в папке upload

+BONUS

В качестве небольшого бонуса написал функцию для файлового менеджера из предыдущего урока «Файловый менеджер на PHP«. Для того чтобы добавить возможность загрузки файлов, мы напишем функцию и поместим её в файл с функциями.

functions.inc.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//Функция загрузки файлов на сервер
function uploadfile($url,$FILE) {
    //$url - текущая папка, $file - массив $_FILES
      //Проверяем, существует ли имя.
if($FILE['FILE']['name']){

    //Проверяем загрузился ли файл на сервер
    if(is_uploaded_file($_FILES['FILE']['tmp_name'])) {
        //Проверяем размер файла
        if($FILE['FILE']['size'] != 0 AND $FILE['FILE']['size']<=102400) {
            //Перемещаем загруженный файл в необходимую папку $url
            if(move_uploaded_file($FILE['FILE']['tmp_name'], $url."/".basename($FILE['FILE']['name']))) {
                    //Выводим сообщение что файл обработа и загружен
                    return TRUE;
                                                                                                           }
            else { echo 'Произошла ошибка при перемещении файла в папку'.$url;}

                                                                              }
        else {echo 'Размер файла не должен превышать 100Кб';}

                                                        }
    else { echo'Прозошла ошибка при загрузке файла на сервер';}
                             }

else { echo 'Файл должен иметь название';}

    }

Также необходимо добавить кое что в файл index.php. В шапку добавим вот такую ссылку для того чтобы отобразить форму для загрузки:

1
echo '<a href="index.php?upload=1&url='.$url.'">[загрузить файл]</a>';

В качестве параметра ссылка передает $upload и $url. Вставим условие в самом в конце файла:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    //Загрузка файла              
 if($_GET['upload'])
{
    if(!$_POST['up']) {
 echo '<form action="?upload=1" method="post" enctype="multipart/form-data">';
 echo 'Выберите файл (не более 100кб): <input type="file" name="FILE" size="20" />&nbsp;&nbsp;';
 echo '<input name="url" type="hidden" value="'.$_GET['url'].'">';
echo '<input type="submit" name="up" value="загрузить">';
 echo '</form>';

 }
   else {
      if(uploadfile($_POST['url'],$_FILES)!== FALSE) {
      header("location:index.php?url=".$_POST['url']);     }
                   else {echo 'Ошибка <br/>';}
                   }
                   }

Вот такой небольшой апгрейд нашего файлового менеджера. Я думаю вам пригодится этот урок.

Скрипт

simplefileupload.zip

Заключение

Если вы освоили весь материал, который изложен выше, то в будущем Вы без проблем решите задачи, требующие загрузки файлов на сервер. Обязательно протестируйте все на локальном сервере, это позволит разобраться во всех мелочах, ну и конечно же обращайтесь к документации. В дальнейших уроках мы будем использовать эту функцию.

Google Bookmarks БобрДобр.ru Memori.ru rucity.com МоёМесто.ru Mister Wong
rss-лентаПодпишись на RSS, впереди много интересного.
Рубрика: уроки | Отзывов: 61

61 Responses to “Урок 10. UPLOAD файла. Загрузка файла на сайт.”

Страниц: « 7 6 5 4 3 [2] 1 » Show All

  1. 20
    Урок 17. Новостная лента. Разбираем простой скрипт новостей | Freshcoder.ru - уроки PHP Says:

    [...] этой функцией частично мы встречались в этом уроке. Имя функции носит имя upload, в качестве аргументов [...]

  2. 19
    BsikNo Gravatar Says:

    Александр, большое спасибо за такой нужный ресурс!
    Столкнулся с проблемой. Закачиваю с помощью приведенного скрипта для jpg изображений файлы на сервер, все вроде нормально, размер совпадает, но в итоге файл не открывается! Выгружаю его обратно на свой комп, смотрю свойства – 0х0 пикселей разрешения, а размер нормальный, тот же, то есть файл не пустой, содержит информацию, но почемуто его разрешение 0 на 0?!
    Не поможете разобраться, в чем проблема?

  3. 18
    АлександрNo Gravatar Says:

    Рекомендую Вам использовать файловые хранилища, которых очень много в инете.

  4. 17
    AlexandrNo Gravatar Says:

    А вот как сделать загрузку больших файлов? Хочу например залить фильм размером 700 Мб. Ограничения все из примера снял, upload_max_filesize поставил 2048M – а толку нет :(

  5. 16
    ПетрNo Gravatar Says:

    Вопрос.
    Возможно ли удаление картинки, сразу же после загрузки?

  6. 15
    DanichNo Gravatar Says:

    Так, с этим я разобрался :)
    а как получить прямую ссылку на загруженный файл?

  7. 14
    DanichNo Gravatar Says:

    Очень интересная статья, как и весь ресурс в целом :)
    хотелось бы узнать, можно ли этот скрипт модифицировать на поддержку аплоада файлов любого формата? Как это к примеру делается на файл-хостингах (рапида, айфолдер народ диск и т.д.)
    Как я понял в таблице MIME-типов нет универсального типа? Или я плохо искал? :)

  8. 13
    GlebrNo Gravatar Says:

    Все файлы поместил в папку upload, а пытаюсь открыть-ничего не выводится! Помогите! (или это нужно делать на сервере? Извините за глупый вопрос!) Спасибо!

  9. 12
    SandroNo Gravatar Says:

    Привет! Статья нормальная.
    Не пойму почему, но проблема такая…
    echo ‘Произошла ошибка при перемещении файла в папку’;
    и совсем не понятно из-за чего…

  10. 11
    АлександрNo Gravatar Says:

    Подумайте, сами) Здесь достаточно просто указать другую папку после загрузки и создать поле input, в котором будет ссылка на эту папку и файл, благо все переменные определены

Страниц: « 7 6 5 4 3 [2] 1 » Show All

Leave a Reply