| « Поставить закладку » « Сделать стартовой » | |||
|
|||
| Статьи:: Интернет технологии :: PHP :: Глава 7. PHP: Закачка файлов
Глава 7. PHP: Закачка файлов* РНР: закачка файлов Обычно в создании сайта ведущая роль принадлежит его web-мастеру. Посетителям остается лишь возможность просматривать сайт (для чего он, собственно, и делается) и присылать его администратору свои пожелания по улучшению. Ну и иногда - свои материалы для размещения на сайте. Однако нередко возникает желание предоставить посетителям больше возможностей - скажем, позволить им помещать свои файлы на сайт. Скажем, вы являетесь администратором сайта "про компьютеры и Интернет" и назначили одного из своих товарищей ведущим того или иного раздела. Так как параметры доступа к аккаунту сайта (логин и пароль) у вас одни (почти все провайдеры хостинга выделяют на это лишь одну пару параметров), то возникает необходимость выбора: либо вы делитесь с товарищем логином и паролем на доступ к аккаунту и тем самым резко снижаете его безопасность (мало ли куда эти данные от товарища могут попасть...), либо берете на себя труд самостоятельно закачивать присылаемые товарищем файлы на сервер. И то, и то весьма и весьма неудобно. Но есть третий выход из положения. Следует выделить под статьи товарища
отдельную папку и позволить ему загружать свои материалы туда и только туда. Как
же это сделать? * Подготовка Для начала следует создать папку, куда будут помещаться закачиваемые посетителями файлы - скажем, user - в том примере, что будет рассматриваться ниже, и присвоить ей атрибут 772, что означает предоставление посетителям сайта возможность записывать в нее файлы. Для присвоения атрибута достаточно, зайдя с помощью, скажем, CuteFTP на аккаунт, выбрать из контекстного меню этой папки (т. е. из меню правой кнопки мыши) пункт CHMOD (рис. 7.1) и указать, что виду пользователей Public разрешается в эту папку что-либо записывать (рис. 7.2).
Рис.7.1. He забудьте назначить папке для файлов нужные права доступа...
Рис.7.2. Например, вот так В других программах для работы по протоколу FTP права доступа настраиваются аналогично. * Общие сведения Чтобы пользователь мог загрузить файл на сервер с web-страницы,
на этой странице должна присутствовать форма с параметром заголовка enctype,
равном "multipart/form-data", а также со специальным полем типа file (выглядит
как поле ввода имени файла с кнопкой "Обзор", нажав на которую, можно отобразить
окно выбора файла) и кнопкой submit (см., например, рис.7.3). Как только эта
кнопка будет нажата, браузер начнет передавать файл, указанный в поле типа file,
на сервер. В заголовке формы также следует указать параметр action, значением
которого должно быть имя страницы с обрабатывающим загруженный файл сценарием.
Все эти переменные можно использовать в PHP-сценарии,
расположенном на указанной в параметре action заголовка формы, принадлежащей
передающей файл странице. Для копирования файла используется команда сору ("имя
копируемого файла (и путь к нему)", "путь к папке, в которую нужно файл
скопировать и его новое имя там"). Путь к файлу во временной папке можно не
указывать (она используется по умолчанию), а путь к папке, куда файл должен быть
помещен, должен указываться относительный от того каталога, в котором находится
страница с обрабатывающим загруженный файл сценарием. * Форма для пользователя Итак, закончив теоретическую часть, рассмотрим устройство
реально работающего кода. Данный код предусматривает также и простейшую
авторизацию пользователя, загружающего файл - загрузка будет произведена только
в случае правильно введенного пароля. <FORM ENCTYPE="multipart/form-data" ACTION "up . php" METHOD=POST> (Т. е. программа, обрабатывающая загруженный файл, будет помещаться в файле up.php.)
Рис.7.3. Форма ввода имени файла для загрузки и пароля Теперь - поле ввода пароля. Его значение при передаче формы запишется в переменную с тем же именем, что и у этого поля (в данном случае - в переменную $pass), а также будет доступно в массиве $HTTP_POST_VARS, в элементе $HTTP_POST_VARS ['pass'] (начиная с РНР версии 4.1 - в элементе $_POST['pass']). Ее вы сможете использовать в сценарии на странице, указанной в параметре action заголовка формы. Если вы укажете в параметре type этого поля значение "text", то вводимые пользователем символы будут отображаться на экране, если "password" - то заместятся звездочками (как на рис.7.3). Ваш пароль: <INPUT NAME="pass" TYPE="password"> И поле ввода имени файла: Закачать файл:<INPUT NAME="zak" TYPE="file"> Кнопка начала загрузки: <INPUT TYPE="submit" VALUE="Закачать"> Собственно, и все... Для загрузки достаточно. </FORM> * Сценарий обработки Теперь не менее важная часть - сценарий обработки загруженного
файла. <?php Если в поле ввода имени файла ничего не было, то выполнение сценария прекращаем (с выводом сообщения пользователю - например, как на рис. 7.4), если же нет - то выполняется следующая за данным условием команда elseif: if ($zak=="none")
Рис.7.4. Сообщение пользователю в случае неуказания имени файла Примечание: Если введенный пользователем пароль не соответствует тому, что указан в данном сценарии (обратите внимание, что правильный пароль для загрузки файлов указывается именно здесь!), то выполнение сценария прекращаем (с выводом сообщения пользователю - как на рис. 7.5), если же нет - то выполняется следующая за данным условием команда elseif. Рис. 7.5. Сообщение пользователю в случае неправильного ввода пароля Если вы желаете назначить разным пользователям отдельные пароли (чтобы, скажем, иметь возможность запретить загружать файлы лишь одному из них, не затронув интересы остальных), то просто укажите здесь соответствующее условие (может выглядеть так: "elseif ( ($pass!="paroll")&&($pass! = "parol2") )"): elseif ($pass!="parol") И наконец, само копирование - допустим, в папку user. По его окончании пользователю выдается соответствующее сообщение (рис. 7.6). Рис. 7.6. Сообщение пользователю в случае успешной загрузки В условии elseif в нижеследующей строчке проверяется, выдает ли команда сору значение True - что должно происходить при успешном копировании. (Если не можете разобраться в синтаксисе -смотрите Описание РНР.) elseif (copy($zak, "user/$zak_name")) Примечание: В том случае, если по какой-то причине копирование осуществить не удаётся, то об этом выдается сообщение. В принципе это и необязательно - неудача копирования является ошибкой РНР, и об этом информация все равно выводится (рис.7.7), однако все же стоит ясно указать пользователю, из-за чего возникла проблема. К тому же не все смогут понять фразу об ошибке на английском языке. else
Рис.7.7. Сообщение пользователю в случае ошибки копирования Вот, собственно, и все. Пользователь, зайдя на первую страницу
(рис.7.3), должен ввести свой пароль и найти с помощью открывающегося при
нажатии на кнопку "Обзор" диалогового окна файл для загрузки. После нажатия
кнопки "Загрузить" он увидит одно из трех сообщений - см. рис. 7.4, 7.5, 7.6. <?php Обратите внимание, что при формировании конечного имени файла (в
команде сору), а также в строках, выводимых командой echo, писать просто имена
элементов массива нельзя - будет выдаваться ошибка! Необходимо использовать
оператор конкатенации - точку: echo ("Имя файла: $HTTP_POST_FILES['zak']['name']") Правильно: echo ("Имя файла:". $HTTP_POST_FILES t'zak'] ['name']) Возможна загрузка и нескольких файлов сразу. Для этого просто в
исходной форме следует указать несколько полей с типом file, дав каждому свое
название. В обработчик будут переданы переменные для каждого загруженного файла. <input name="uploadfile[]" type="file"> В результате в программу-обработчик будут переданы:
В данных примерах uploadfde - это всего лишь имя массива, вы,
естественно, можете назвать его по-другому. Примечание: Так что, как видите, предоставить посетителям возможность
загружать файлы на ваш сайт довольно просто. Как и создать простейшую, но
довольно эффективную систему ограничения этой возможности по паролю - всего лишь
с помощью проверки передаваемой через форму переменной, содержащей пароль; сам
же пароль указывается в тексте программы на РНР. Для того, чтобы дать вашему
другу возможность вести свою "колонку" на вашем сайте, этого будет достаточно. Рубрика: PHP
Инструменты Internet Explorer 8 Beta 2 для разработчиков.
Подробнее... |
Рубрика: Вебмастеру
| Добавлено: 05.09.2008
Google Developer Day 2008 в Москве.
Дата проведения: 28 октября 2008 г.; Место проведения: Амбер Плаза, Москва, Россия. Конференция для веб-разработчиков и разработчиков мобильных приложений в Москве. Узнайте, как наилучшим образом использовать инструменты разработки и API от Google, чтобы создавать социальные, мобильные и картографические приложения, как использовать AJAX/JavaScript инструменты и библиотеки от Google и многое другое из первых уст.
Подробнее... |
Рубрика: Мероприятия
| Добавлено: 05.09.2008
ТОП 10 самых раздражающих факторов для программиста.
Совсем недавно наткнулся в интернете на забавный "хит-парад" наиболее раздражающих вещей для программиста. Поскольку он был на английском — решил перевести текст и несколько адаптировать к нашим реалиям…
Подробнее... |
Рубрика: Разное
| Добавлено: 03.09.2008
Остальные статьи:
Windows Server 7, 8 и 9
jQuery для JavaScript-программистов
Инновационный веб-броузер Google Chrome стартует уже сегодня
Windows 7: подход к производительности системы
Trac + Subversion @ Ubuntu: Revisited
[g]Vim в режиме Python: Рекомпиляция в Windows
Java + JSON. Пути к дружбе
Драйвер SQL Server 2005 для PHP
Типы данных в MySQL (сжатый справочник для PHP программиста)
PHP класс для работы с Яндекс.XML
Ошибки начинающих PHP разработчиков
Наследование шаблонов в Smarty
Особенности хранения сессий PHP в memcached
Internet Explorer 8 beta 2
9 правил для начинающего Ajax-разработчика
ExtJS 2.2 - полная поддержка Firefox 3, новые виджеты и другие нововведения |
Цитата дня (все,добавить):
|
Realcoding.NET
© 2003-2008 |
Контакты |
Реклама на сайте
|