Анимация
JavaScript
|
Главная Библионтека Листинг 28.1. Сценарий photo.php: простейший фотоальбом <? $ImgDir="img"; Каталог для хранения изображений @mkdir($ImgDir,666); Создаем, если его еще нет Проверяем, нажата ли кнопка добавления фотографии if(@$doUpload) { Проверяем, принят ли файл if(file exists($File)) { Все в порядке - добавляем файл в каталог с фотографиями Используем то же имя, что и в системе пользователя Copy($File,"$ImgDir/".basename($File name)); Теперь счит1ваем в массив наш фотоальбом $d=opendir($ImgDir); открываем каталог $Photos=array(); изначально альбом пуст Перебираем все файлы while(($e=readdir($d))!==false) { Это изображение GIF, JPG или PNG? if(!ereg("(.*)\\.(gifjpgpng)$",$e,$P)) continue; Если нет, переходим к следующему файлу, иначе обрабат1ваем этот $path="$ImgDir/$e"; адрес $sz=GetImageSize($path); размер $tm=filemtime($path); время добавления Вставляем изображение в массив $Photos $Photos[$tm] = array( time => filemtime($path), время добавления name => $e, имя файла Если процесс окончится неуспешно, вы сможете определить это по отсутствию файла, имя которого задано в $MyFile, или же по отсутствию самой этой переменной в программе. Пример: фотоальбом Давайте напишем небольшой сценарий, представляющий собой простейший фотоальбом с возможностью добавления в него новых фотографий. url => $path, его URI w => $sz[0], ширина картинки h => $sz[1], ее высота wh => $sz[3] "width=xxx height=yyy" Ключи массива $Photos - время в секундах, когда б1ла добавлена та или иная фотография. Сортируем массив: наиболее " свежие" фотографии располагаем ближе к его началу. krsort($Photos); Данн1е для в1вода готовы. Дело за мал1м - оформить страницу. ?> <body> <form action=photo.php method=POST enctype=multipart/form-data> <input type=file name=File><br> <input type=submit name=doUpload value="Закачать новую фотографию"> </form> <?foreach($Photos as $n=>$Img) {?> <img src=../../../cl/<?=$Img[url]?> <?=$Img[wh]?> alt="Добавлена <?=date("d.m.Y H:i:s",$Img[time])?>" > <?}?> </body> Конечно, этот сценарий далеко не идеален (например, он не поддерживает удаление фотографий из фотоальбома), но для иллюстрации заявленных возможностей, по-моему, вполне подходит. Для простоты я совместил две функции (администрирование альбома и его просмотр) в одной программе. В реальной жизни, конечно, за каждую из них должен отвечать отдельный сценарий (первый из них, наверное, будет требовать от пользователя прохождения авторизации, чтобы добавлять фотографии в альбом могли лишь привилегированные пользователи). Примечание Обратите внимание на то, как этот сценарий оформлен. В самом начале находится весь код на PHP, который, собственно, и работает с данными фотоальбома. В этом коде в принципе нет никаких указаний на то, как должна быть отформатирована страница. Его задача - просто сгенерировать данные. Наоборот, тот текст, который следует после закрывающей скобки ?>, содержит Сложные имена полей Как вы, наверное, помните, элементы формы могут иметь имена, выглядящие, как элементы массива: a[10] , B[1][text] и т. д. До недавнего времени (в третьей версии PHP) это касалось только "обычных" полей, но не полей закачки файлов. К счастью, в PHP версии 4 все изменилось в лучшую сторону. Давайте применим указанные возможности в следующем примере формы и определим, какие переменные создаст PHP при ее отправке на сервер. <form action="script.php" method=POST enctype=multipart/form-data> <h3>Выберите тип файлов в вашей системе:</h3> Текстов1й файл: <input type=file name="File[text]"><br> Бинарн1й файл: <input type=file name="File[bin]"><br> Картинка: <input type=file name="File[pic]"><br> <input type=submit name=Go value="Отправить файл1"> </form> После того как программа script.php примет данные из формы, PHP создаст для нее следующие переменные: □ ассоциативный массив $File, ключи которого - text, bin и pic, а соответствующие значения - имена временных файлов на сервере, созданных PHP при загрузке; □ массив $File name все с теми же ключами и значениями - именами файлов в системе пользователя; □ массив $File type с теми же ключами и значениями - типами соответствующих файлов; □ массив $File size со значениями - размерами этих файлов. Мы видим, информация об индексах в именах полей формы попала в ключи соответствующих массивов и сохранилась в них. Вы можете убедиться в том, что переменные действительно инициализированы, воспользовавшись вызовом функции Dump($GLOBALS), код которой приведен в конце главы 11, и в полезности которой вы теперь можете убедиться на примере. Еще раз напоминаю, что PHP версии 3 неправильно работает с подобными именами полей. Учитывайте это, если собираетесь использовать старый интерпретатор. минимум кода на PHP. Его главная задача - оформить страницу так, чтобы она выглядела красиво. У меня нет никаких других стимулов, кроме как экономии типографской краски, чтобы не разнести данные блоки по разным файлам. Мы еще вернемся к такому подходу в одной из следующих глав. 0 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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 [ 130 ] 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 |