Ваш первый Сайт С использованием РНР-скриптов

СОЗДАНИЕ ФОРМЫ ДЛЯ ЗАГРУЗКИ ГРАФИЧЕСКИХ ФАЙЛОВ

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

Для начала в папке risynki создайте две подпапки под названием: 1 .foto - Для закачки туда фотографий; 2. fotomin - для хранения там мини-копий фо­тографий, которые будут создаваться там программно. Затем также в папке Risynki создайте пустой текстовый файл foto.txt, где у нас будут храниться надписи под фотографиями.

В РНР-редакторе создайте новый файл и сохраните его в папке risynki Под именем zagryzkaObych.php. Желательно сначала разобраться с листингом 8.3 (разборка кода после листинга), а потом набрать эту программу в редак­торе самостоятельно.

Листинг 8.3 (файл ZagryzkaObych.Php) <Html> <Head>

<Ш1Е>Загрузка Фотографий</Ш1Е> <link type="text/css" rel="stylesheet" href="stil. css"> </head>

<body bgcolor="#COCOCO"> <div id="lplp">MoH Фотографии<ЛНу> <1>3Акачать Фото<ЛхЬг> <?php

Echo "<form enctype='multipart/form-dataf action=zagryzkaObych. php method=POST>

<input type=FILE name=zak><br><br> <1>Подпись Под Фотографией<ЛхЬг> <input type=TEXT name=text size=50><br><br> cinput type=SUBMIT name=otpr Уа1Ие='Отправить'> </form>";

If ($_POST[,otpr,]==true) {

$zak=$_POST[,zak']; $file=$_FILES[,zak'][,name'l; $size=$_FILES['zak,]['sizef]; $nadp=$_POST['text'];

$ext=array(,,.jpg,^".gif^".png",,^JPG,^".GIF, l,,,.PNG,,);

If(in_array(strrchr($file, "."), $ext))

{

If(copy($_FILES["zak"] ["tmp_name"], "foto/".Sfile))

{

Echo "Файл ".Sfile." Объемом: ".Ssize." Байт Успешно Закачан!<Ьг>"; $mass=flle("foto. txt");

If(!in_array($flle."|".$nadp. chr(13).chr(10), $mass)) {

$foto=fopen("foto. txt", "a");

Fwrite($foto, Sfile."|".$nadp. chr(13).chr(10));

Fclose(Sfoto);

Exit(); }

}

Else


{

Echo "Ошибка При Закачке Файла! Повторите попытку.<br>";

ExitO; }

}

Else {

Echo "Расширение закачиваемых файлов должно быть jpg, gif, png, JPG, GIF, PNG! Повторите попытку.<Ьг>";

Exit(); }

} ?>

</body> </html>

Результат запуска этого скрипта вы уже видели на рис. 8.2. Теперь разбе­рем строчки кода, начиная с тега <?php:

<?php - начало РНР-кода;

Echo "<form enctype='multipart/form-data' action=zagryzkaObych.php method=POST> - создаем форму для отправки файла методом post. Данные из этой формы после нажатия кнопки «Отправить» передадутся вновь на эту же страницу (Action=zagryzkaObych.php);

<input type=FILE name=zak><br><br> - создаем поле для ввода имени за­гружаемого на сервер файла (точнее, пути к нему); </>Подпись под фотографией<И><Ьг>

<input type-TEXT name=text size=50><br><br> - создае^ текстовое поле для ввода надписи под фотографией;

<input type=SUBMIT name^otpr value-'Omnpaeumb'> - создаем кнопку для отправки данных из формы;

</form>"; - закрываем тег формы;

If ($_POST['otpr']==true) - если элемент суперглобального массива $_POST['otpr'] определен, т. е. мы ввели данные в форму и нажали кнопку «Отправить» (а кнопка имеет имя name=otpr), то выполнится весь код между фигурными скобками под номером 1;

Ц

$zak=$_POST['zak']; - з переменной $zak сохраняем путь к закачиваемому файлу, указанному в форме в поле с именем name=zak;

Sfile=S_FILES['zak'] ['пате']; - переменной Sfile присваиваем имя закачивае­мого файла. Оно хранится в элементе $ FILES['zak']['пате'] массива S FILES, созданного при передаче данных из формы (см. разд. 8.1-8.3);

$size=S_FILES['zak']['size']; - переменной Ssize присваиваем размер закачи­ваемого файла в байтах;

$nadp=$ POST['text']; - переменной Snadp присваиваем содержимое тексто­вого поля с именем name=text из формы. А в это поле мы записали надпись под фотографией;

Sext=array(".jpg",".gif',".png",".JPG",".GIF",".PNG"); - создаем массив Sext С шестью элементами, указывающими на расширение графических файлов. Мы предполагаем, что будут закачиваться только 3 типа графических файлов с расширениями jpg, gif К png (или с такими же расширениями, но из заглав­ных букв). Вы можете добавить сюда и другие расширения для графических файлов;

If(in_array(strrchr(Sfde, "."), Sext)) - сначала вспомним, что функция strrchr (см. гл. 4) возвращает часть строки, начиная с символа, указанного во втором аргументе (в нашем случае это точка), и до конца строки, т. е. данная функ­ция возвратит нам расширение файла. Затем функция in_array ищет в масси­ве Sext элемент, указанный в первом аргументе, а первый аргумент у нас Strrchr (Sfile, "."), т. е. расширение файла. Короче, условие //проверяет, имеет ли закачиваемый файл расширение, соответствующее хотя бы одному из элементов массива Sext. Если закачиваемый файл графический и имеет расширение jpg, gz/или png (или с такими же расширениями, но из заглавных букв), то выполнится блок команд между фигурными скобками под номе­ром 2; 2{

If(copy($_FILES["zak"]["tmp_name"], "foto/".Sfile)) - функция сору копирует файл из переменной $ FILES["zak"]["tmpПате"] в папку/о/о (мы ее создали заранее) и сохраняет ее там под именем, которое у нас в переменной Sfile (т. е. под тем же именем). В переменную (S FILES["zak"]["tmp name"], Как было сказано выше, записывается то имя, которое загруженный файл имеет в папке временных файлов. Если файл удачно скопирован и сохранен, то выполнится блок команд между фигурными скобками под номером 3;

3{

Echo "Файл ".Sfile." Объемом: ".Ssize." Байт успешно закачан!<br>"; - при удачном выполнении прошлой команды в браузер выведется надпись, что файл под названием Sfile и объемом Ssize (а в переменной Ssize у нас размер закачиваемого файла в байтах) успешно закачан;

Smass=file("foto.txt"); - в текстовом файле foto.txt, который мы создали зара­нее, будут храниться надписи под фотографиями. Причем, как вы увидите позже, записываться и храниться они будут в виде таблицы с двумя столбца­ми. Первый столбец будет содержать название графического файла с расши­рением, второй - надпись под этим графическим файлом. Столбцы будут разделены символом «|». Функция file считывает текстовый файл foto.txt И возвращает массив строк (см. гл. 4) из этого файла. Весь массив сохраняем в переменной $mass;

If(!in_array($file."".$nadp.chr(13).chr(10), $mass)) - ищем в массиве $mass Строку с названием загружаемого файла и надписью под ним, т. е. проверяем, загружали ли мы уже этот файл. Это мы делаем для того, чтобы: во-первых, вы не загружали один к тот же файл несколько раз; во-вторых, если при от­правке данных из формы сервер потребует повторную отправку (см. рис. 6.1), то в текстовый файл уже не будут записываться вторично название и надпись для одного и того же файла. Итак, если такой строки с именем и надписью для загружаемого файла еще не существует, то выполнится код между фи­гурными скобками под номером 4;

4{

$foto=fopen("foto.txt", "а"); - открываем текстовый файл foto.txt для записи и присваиваем открытому файлу идентификатор $foto;

Fwrite($foto, Sfile. " ".$nadp.chr(l3).chr(10)); - делаем запись очередной строки. Сначала запишем название файла $file, затем при помощи точки (методом конкатенации) присоединяем символ-разделитель «|», после идет надпись под фотографией, хранящейся в переменной $nadp. В конец строки ставим из­вестные уже вам два знака $chr(13) и chr(10), обозначающие переход на но­вую строку;

Fclose($foto); - закрываем текстовый файл;

Exit(); - после удачной записи в файл программа должна завершиться. Если мы не поставим здесь оператор exitQ, программа выполнит код ниже и выве­дет в браузер надписи, которые должны выводиться только в случае неудач­ной загрузки файла;

4} - завершение действия условия, проверяющего, был ли загружаемый файл уже загружен ранее;

3} - завершение действия условия, выполняющегося при удачной загрузке файла, т. е. при удачном копировании и сохранении загружаемого файла;

Else - если же загружаемый файл по каким-либо причинам не был загружен, то выполнится код в фигурных скобках под номером 5 (выведется сообщение

Об ошибке, и программа завершит работу); *{

Echo "Ошибка при закачке файла! Повторите попытку. <Ъг> "; exitQ;

2} - завершение действия условия, выполняющегося, если закачиваемый файл графический и имеет расширение jpg, gif или png (или с такими же рас­ширениями, но из заглавных букв);

Else - если файл не графический или имеет другое расширение, то выполнит­ся код в фигурных скобках под номером 6 (выведется сообщение, что расши­рение файла должно быть jpg, gif или png, и программа завершит работу);

Echo "Расширение закачиваемых файлов должно быть jpg, gif png, JPG, GIF, PNG! Повторите попытку. <br> "; exitQ; 6}

1} - окончание действия условия, выполняющегося, если элемент супергло­бального массива SPOSTf'otpr'j определен, т. е. мы ввели данные в форму и нажали кнопку «Отправить»;

?> - окончание РНР-кода.

Пусть на диске вашего компьютера есть фото с названием img001.jpg. За­пустите программу и попробуйте закачать этот графический файл. Нажмите кнопку «Обзор» (см. рис. 8.2) и в появившемся диалоговом окне выберите данный файл, нажав потом на кнопку «Открыть». Далее в текстовом иоле для надписи (подпись под фотографией) введите фразу «первое фото» и на­жмите на кнопку «Отправить». Если файл будет удачно закачан, вы увидите об этом надпись с указанием размера закачанного файла (рис. 8.3).

Мои фотографии

Ш Отправить I - ----- 1

IllS Ifllfi!

Закачать фото *- <■ ' - Д '

Обзор..

Подпись под фотографией


Вы увидите пока единственную строку с названием закачанного файла и над­писью. Закройте текстовый файл, ничего в нем не меняя!

А теперь одно важное замечание! Естественно, вы будете закачивать в папку foto не одну фотографию. Название загружаемых файлов не должно состоять из русских букв, иначе они не распознаются рЬр-интерпретатором. Например, файл мое первое фото.]р% не загрузится в папку foto. Все загру­жаемые вами графические файлы должны иметь имена либо из латинских букв, либо из цифр (можно вперемежку с латинскими буквами). Поэтому, прежде чем загружать файлы, переименуйте их. Назовите их так: imgOOl, img002 и т. д. Обязательно сохраняйте цифровой порядок при закачке фай­лов, чтобы потом они выводились на вашей странице (ее мы составим в сле­дующем листинге) в порядке возрастания цифр. Зачем? А чтобы при выводе ваших фото на страницу, не перепутались бы выведенные в браузер фотогра­фии и надписи к ним! Итак, переименуйте свои фото так, как указано выше, и закачайте их в папку foto при помощи созданной выше программы ZagryzkaObych.php.

Ваш первый Сайт С использованием РНР-скриптов

Создание сайта

Итак, при помощи данной книги вы создали сайт. Конечно, сайт в таком виде не очень привлекателен, так как он создавался исключительно для при­мера. Но используя полученные знания в этой книге, …

ИСПОЛЬЗОВАНИЕ СЕРВИСА ROBOXCHANGE ДЛЯ ОПЛАТЫ

Если у вас нет никакой возможности получить персональный аттестат, или просто лень это делать, то для оплаты товаров со своего сайта вы можете воспользоваться сервисом Roboxchange. Этот сервис дает возможность …

ИСПОЛЬЗОВАНИЕ СЕРВИСА WEB MERCHANT INTERFACE ДЛЯ ОПЛАТЫ

Сервис Web Merchant Interface позволяет получать денежные средства на свои электронные кошельки от клиентов при оплате ими электронных товаров на вашем сайте. Электронные кошельки WebMoney и Yandex мы с вами …

Как с нами связаться:

Украина:
г.Александрия
тел./факс +38 05235  77193 Бухгалтерия

+38 050 457 13 30 — Рашид - продажи новинок
e-mail: msd@msd.com.ua
Схема проезда к производственному офису:
Схема проезда к МСД

Партнеры МСД

Контакты для заказов оборудования:

Внимание! На этом сайте большинство материалов - техническая литература в помощь предпринимателю. Так же большинство производственного оборудования сегодня не актуально. Уточнить можно по почте: Эл. почта: msd@msd.com.ua

+38 050 512 1194 Александр
- телефон для консультаций и заказов спец.оборудования, дробилок, уловителей, дражираторов, гереторных насосов и инженерных решений.