PHP уроки для начинающих

PHP уроки

  • Главная
  • PHP с чего начать?
  • Уроки PHP
  • Массивы
  • Функции
  • MySQL
  • Форум
Меню

  • PHP - с чего начать?
  • Уроки PHP
  • Функции
  • Массивы
  • Denwer
  • MySQL
  • Информация
  • Dreamweaver уроки
  • Галерея
  • Как здесь качать?
  • КНИГИ

Связаны

  • Налог На Квартиру 2008. Квартиру Продали Налог На Имущество. Налог На Квартиру.

Что нового?
Как создать свой сайт? Урок третий.
Загрузка файлов
Регистрация PHP
Как создать свой сайт? Урок второй.
Как создать свой сайт?
Размер изображения
Index.php

Новости на email
Подпишись на новости.
Уроки PHP на email.


Имя(login):

*Ваш email:


Календарь
Май (2012)
ПнВтСрЧтПтСбВс
 123456
78910111213
14151617181920
21222324252627
28293031   

Ковш б/у: ковш дробилка.
ИГРЫ Компьютерные, настольные, детские конструкторы, карточные игры, головоломки.
on-books.ru
 
Комментарии
Текст
сообщениясбрасы
ваются все
настройки
мозилы+удаляютс
я в...
"Сейчас
откройте
страничку в
браузере. Для
этого щёлкни...
Спасибо за
уроки
спосиба для
помщ
Читать учитесь.
 
TOP5-уроки
1.  Привет, МИР! - 62109
2.  Метод GET - 35587
3.  Как вставить картинку в скрипт PHP. - 33564
4.  Как настроить Adobe Dreamweaver для работы с сайтом. - 29804
5.  Метод POST - 29177

Загрузка файлов

Главная » Уроки PHP » Загрузка файлов

PHP урок № 351

Функция загрузки файлов на сервер.

Задача:
  1. Требуется разработать скрипт для загрузки файлов на сервер.
  2. Возможность изменять директорию от скрипта к скрипту.
  3. Решать самостоятельно, перезаписывать загружаемый файл в случаи совпадения имени с уже загруженным, или нет.
  4. Определять размер допустимый для загрузки файла.
Самостоятельной функции по загрузки файлов на сервер, в PHP не существует. Значит создадим свою, пользовательскую функцию, которую будем подключать к любому скрипту, который нуждается в использовании формы загрузки файлов на сайте. Назовём функцию upload.

Листинг № 1 - Загрузка файлов. Пользовательская функция PHP upload(), файл funcs.php

<?php 

// Загрузка файлов
function upload($filename, $pach, $flag = false)
{
    
    
// $filename - это свойство name в input 
    // $pach - директория куда будет сохранён загруженный файл
    // директория загрузки должна иметь доступ 777
    // $flag - по умолчанию false (0), 
    // определяет перезапись существующего файла в директории, если выставлен TRUE (1)
    
    // Проверяет существует ли директория и возможно ли её открыть из этого скрипта
    
if(!opendir($pach)){return 'Директория сохранения файлов, указана неверно!';}
    
    
// устанавливаем директорию загрузки файла
     
$uploadfile = $pach.basename($_FILES[$filename]['name']);
    
    
// Устанавливаем вариант перезаписи файла
    // если false, файл не перезаписывается, а выдаётся предупреждение.
    
if(!$flag){
        
// Проверяем существует ли такой файл в директории
        
if(is_file($uploadfile)) return('ВНИМАНИЕ! Такой файл уже существует.');
    }
    
    if(!empty(
$filename))
    {
      
      
// Ограничения размера загружаемого файла
      
if($_FILES[$filename]['size'] > 1024*2*1024)
       {
         return(
"Размер файла превышает 2 мегабайта");
         
       }
       
// Проверяем загружен ли файл
       
if(is_uploaded_file($_FILES[$filename]['tmp_name']))
       {
         
// Если файл загружен успешно, перемещаем его
         // из временной директории в конечную
         
         
if(copy($_FILES[$filename]['tmp_name'],$uploadfile))
         {
             return(
'OK! Файл успешно загружен.');
         }
         else
         {
            return(
'<strong>'/*. $_FILES[$filename]['tmp_name'].$pach */.$_FILES[$filename]['name'].' </strong> - не является правильно загруженным файлом или
не может быть перемещён из временной директории.'
);     
         }
       } 
       else 
       {
          switch(
$_FILES[$filename]['error'])
          {
              case 
1: echo 'Размер файла превышает допустимый.';
              break;
              case 
2: echo 'Размер файла превышает допустимый.';
              break;
              case 
3: echo 'Загружаемый файл был получен только частично.';
              break;
              case 
4: echo 'Файл не был загружен!';
              break;
          }
          
       }
    }
    else
    {
        return(
'Не указан файл для загрузки!');    
    }
}



?>
Следующим шагом будет создать форму для пользователя. Скрипт ниже.

Листинг № 2 - Форма загрузки файлов на сервер form_upld.php

<?php 

// Подключаем файл функций
include 'fnc/funcs.php';

// Проверяем правильность отправки данных именно с той формы 
// в которой значение кнопки, т.е. надпись равна - 'Загрузить'
// Только если это значение совпадает будет активирована
// наша функция загрузки файлов.
if($_POST['go'] == 'Загрузить')
{
   echo 
upload('filename', './upload2/', $_POST['f']);
}

?>
<!-- Форма  загрузки файлов -->
<form action="" method="post" enctype="multipart/form-data">
  <input name="filename" type="file">
   <br>
<input name="f" type="checkbox" value="1">
      <sup> - перезаписать</sup>
<br>
<input name="go" type="submit" value="Загрузить"></form>
Задача решена. Внимательно читайте комментарии к коду. Пишите если что-то не понятно или нашли ошибку.

Урок закончен.

SETTER © LPHP.RU
Администрация сайта
01.10.2011 15:49:27

Скачать урок PHP.

Рекомендованные уроки этого раздела:
  • Как убрать все пробелы из строки.
  • Как выводить по 3 фото в строку.
  • Как укоротить, уменьшить, обрезать URL (гиперссылку).
  • Хэш

НАПИШИТЕ СВОЙ КОММЕНТАРИЙ

Имя:

Введите цифры с картинки:

КОММЕНТАРИИ

Имя: ///     Время: 09.10.2011 20:07:55
  • херня... я гораздо лучше сделал =))
  • Имя: Асан     Время: 09.10.2011 22:24:16
  • Ага, во сне, ты там сделал.. и мокро стало. ))
  • Имя: Сергей Уфа     Время: 30.11.2011 21:53:24
  • Это не херня это рассчитано для начинающих! Мне очень понравилось спасибо автору за урок !
  • Имя: MaxXX     Время: 09.12.2011 10:44:22
  • Подскажите плиз. Туплю. Как и где прописать переменную $pach ? А то при загрузке выдает сообщение: \"&#65279;&#65279;Директория сохранения файлов, указана неверно! \"
  • Имя: SETTER     Время: 12.12.2011 13:49:44
  • Хороший совет. Скачайте урок и разберитесь в нём.
  • Имя: Нурик     Время: 12.01.2012 15:18:11
  • SETTER а могли бы вы написать урок как удалять уже загруженные избражения не заходя в папку upload2. Я пробовал сделать через базу данных, но так выходит не касиво - в базе его нет, но в папке он все же остается. Заранее благодарю
  • Имя: SETTER     Время: 13.01.2012 01:22:33
  • А вы попробуйте сами и покажите на форуме, что у вас получилось и обсудим. Могу лишь предложить логику по которой сам бы писал. Например так. Если учитывать тот факт, что все загруженные картинки имеют свой путь, а этот путь сохраняется в БД, то в зависимости от нужд приложения, я бы вывел весь список картинок и поставил рядом с каждой, кнопку с url картинки, которую следует удалить. При нажатии на кнопку, этот url отправляется в функцию, которая удаляет из папки картинку и подчищает запись в БД, т.е. ссылку на эту картинку. В общем вам нужна изначально лишь ссылка на картинку, а далее вы можете ссылку передавать в любую функцию, хоть для редактирования та функция, хоть для удаления функция, хоть для копирования и создания новой такой же картинки, основное это получить ссылку, точный адрес картинки и с ним работать.
  • Имя: Нурик     Время: 13.01.2012 17:08:25
  • Setter зарегистрировался на форуме но до сих мой акк не активирован, Имя пользователя: Peacedeath. Хотел бы отписаться на форуме, чтобы не засорять коменты. Заранее благодарю.
  • Имя: SETTER     Время: 13.01.2012 19:01:05
  • Активировал
  • Имя: РОМАН     Время: 20.03.2012 10:28:14
  • Спасибо за уроки!! Оч помогли,, так как нигде не нашел более подробной информации для НОВИЧКОВ!!
  • Имя: Werd     Время: 30.03.2012 10:46:38
  • Знатоки, объясните почему чего указано 1024*2*1024 , а не проще так 2048 например? // Ограничения размера загружаемого файла if($_FILES[$filename]['size'] > 1024*2*1024) { return("Размер файла превышает 2 мегабайта"); }
  • Имя: SETTER     Время: 30.03.2012 12:03:02
  • Может для кого-то и проще, сколько байт в двух мегабайтах, но у вас это не получилось даже при таком раскладе. Потому что произведение равно не 2048, а 2 097 152. Конечно это значение можно написать и просто числом, но тогда нужно будет указать, на будущее, сделать комментарий, что это 2 МБ. И если вы вдруг передумаете через день, что этого объёма данных маловато или наоборот много, то можно вновь пересчитывать значение. А если вы вдруг забыли уравнение, то поломаете голову высчитывая это значение. Так что это просто для гибкости кода написано. Изменяете одну цифру в середине и произведение меняется. Можно также, вместо двойки прописать переменную которой будет передаваться значение в функции, если например нужно в разное время, в разных частях кода использовать разные значения объёма данных.
  • Имя: Борис     Время: 09.04.2012 12:00:09
  • Добрый день! Хотелось бы посмотреть загрузку нескольких файлов.

  • Copyright © 2009-2012 LPHP.RU