| |
сле выбора в этом поле нужного файла и отправки формы (и загрузки на сервер
того файла, который был указан) PHP определит, что нужно принять файл, и сохра-
нит его во временном каталоге на сервере. Кроме того, в программе создадутся
не-
сколько переменных.
r $MyFile — имя временного файла на машине сервера, который содержит дан-
ные, переданные пользователем. С этим файлом теперь можно вытворять все что
угодно: удалять, копировать, переименовывать, niiaa oaaeyou...
r $MyFile_name — исходное имя файла, которое он имел до своей отправки на
сервер.
r $MyFile_size — размер закачанного файла в байтах.
r $MyFile_type — тип загруженного файла, если браузер смог его определить. К
примеру, image/gif, text/html и т. д.
Как видим, префикс у всех созданных переменных один и тот же — MyFile_. Этот
префикс состоит из имени элемента закачки в форме, к которому присоединен знак
_.
Теперь мы можем, например, скопировать только что полученный файл на новое ме-
сто, при помощи Copy($MyFile,"uploaded.dat") или других средств, проверив
предварительно, не слишком ли он велик, основываясь на значении переменной
$MyFile_size.
Настоятельно рекомендую использовать функцию копирования, а не переиме-
нования/перемещения. Дело в том, что в некоторых операционных системах
временный каталог, в котором PHP хранит только что закачанные файлы, мо-
жет находиться на другом носителе, и в результате операция переименования
завершится с ошибкой. Хотя мы и оставили копию полученного файла во вре-
менном каталоге, можно не заботиться о его удалении в целях экономии мес-
та: PHP сделает это автоматически.
Глава 28. Загрузка файлов на сервер
393
Если процесс окончится неуспешно, вы сможете определить это по отсутствию файла,
имя которого задано в $MyFile, или же по отсутствию самой этой переменной в
про-
грамме.
Пример: фотоальбом
Давайте напишем небольшой сценарий, представляющий собой простейший фото-
альбом с возможностью добавления в него новых фотографий.
Листинг 28.1. Сценарий photo.php: простейший фотоальбом
$ImgDir="img"; // Каталог для хранения изображений
@mkdir($ImgDir,666); // Создаем, если его еще нет
// Проверяем, нажата ли кнопка добавления фотографии
if(@$doUpload) {
// Проверяем, принят ли файл
if(file_exists($File)) {
// Все в порядке — добавляем файл в каталог с фотографиями
// Используем то же имя, что и в системе пользователя
Copy($File,"$ImgDir/".basename($File_name));
}
}
// Теперь считываем в массив наш фотоальбом
$d=opendir($ImgDir); // открываем каталог
$Photos=array(); // изначально альбом пуст
// Перебираем все файлы
while(($e=readdir($d))!==false) {
// Это изображение GIF, JPG или PNG?
if(!ereg("^(.*)\\.(gif|jpg|png)$",$e,$P)) continue;
// Если нет, переходим к следующему файлу,
// иначе обрабатываем этот
$path="$ImgDir/$e"; // адрес
$sz=GetImageSize($path); // размер
$tm=filemtime($path); // время добавления
// Вставляем изображение в массив $Photos
$Photos[$tm] = array(
'time' => filemtime($path), // время добавления
'name' => $e, // имя файла
Часть V. Приемы программирования на PHP
394
'url' => $path, // его URI
'w' => $sz[0], // ширина картинки
'h' => $sz[1], // ее высота
'wh' => $sz[3] // "width=xxx height=yyy"
);
}
// Ключи массива $Photos — время в секундах, когда была добавлена
// та или иная фотография. Сортируем массив: наиболее "свежие"
// фотографии располагаем ближе к его началу.
krsort($Photos);
// Данные для вывода готовы. Дело за малым — оформить страницу.
?>
|
|