РНР 5 в подлиннике

Страница 496 из 554


Гпава 43. Загрузка файлов на сервер

1003

// Ключи массива $photos — время в секундах, когда была добавлена // та или иная фотография. Сортируем массив: наиболее "свежие" // фотографии располагаем ближе к его началу, krsort($photos);

// Данные для вывода готовы, дело за малым — оформить страницу. ?>

<body>

<form action="<?=$_SERVER['SCRIPT_NAME']?>" method="POST" enctype=

<input type="file" name="file"xbr>

<input type="submit" name="doOpload" value="3aKa4aTb новую фотографию">

<hr>

</form>

<?foreach($photos as Sn=>$img) {?> <p><img src="<?=$img['url']?>" <?=$img['wh']?>

alt="Дoбaвлeнa <?=date("d.m.Y H:i:s", $img['time'])?>"

Конечно, этот сценарий далеко не идеален (например, он не поддерживает удаление фотографий из фотоальбома), но для иллюстрации заявленных возможностей вполне подходит. Для простоты мы совместили две функции (администрирование альбома и его просмотр) в одной программе. В реальной жизни, конечно, за каждую из них должен отвечать отдельный сценарий (первый из них, наверное, будет требовать от пользователя прохождения авторизации, чтобы добавлять фотографии в альбом могли лишь привилегированные пользователи).

Обратите внимание на то, как этот сценарий оформлен. В самом начале находится весь код на РНР, который, собственно, и работает с данными фотоальбома. В этом коде в принципе нет никаких указаний на то, как должна быть отформатирована страница. Его задача — просто сгенерировать данные. Наоборот, тот текст, который следует после закрывающей скобки ?>, содержит минимум кода на РНР. Его главная задача — оформить страницу так, чтобы она выглядела красиво. Можно было даже расщепить данный файл на два с тем, чтобы отделить дизайн страницы от ее программного кода.

Сложные имена полей

Как вы, наверное, помните, элементы формы могут иметь имена, выглядящие как элементы массива: а[Ю], b[i] [text] и т.д. РНР поддерживает работу и с такими полями закачки, однако делает он это в несколько необычной форме (листинг 43.3).

Листинг 43.3. Файл complex.php

<?php ## РНР обрабатывает и сложные имена полей закачки, if (@$_request['doupload' ] )

"multipart/form-datа">

>

<?} ?> </body>

1004

Часть VII. Приемы программирования на РНР 5

echo '<рге>Содержимое $_FILES: 1.print_r($_FILES, true)."</pre><hr>" ;

?>

<form action="<?=$_SERVER['SCRIPT_NAME']?>" method="post" enctype=

"multipart/form-data">

<пЗ>Выберите тип файлов в Вашей системе:</h3>

Текстовый файл: <input type=file name="input[a][text]"><br>

Бинарный файл: <input type=file name="input[a][bin]"><br>

<input type=submit name=doUpload уа1ие="0тправить файлы">

</form>

В листинге 43.3 приведен скрипт с формой, имеющей два элемента закачки с именами input [a] [text] и input [a] [bin]. Приведем результат вывода в браузер пользователя, который получается сразу же после выбора и закачки двух файлов:

Содержимое $_FILES: Array( [input] => Array( [name] => Array( [a] => Array(

[text] => button.gif [bin] => button.php

)

)

[type] => Array( [a] => Array(

[text] => image/gif [bin] => text/plain

)

)

[tmp_name] => Array( [a] => Array(

[text] => C:\WINDOWS\phplBB.tmp [bin] => C:\WINDOWS\phplBC.tmp

)

)

[error] => Array( [a] => Array( [text] => 0 [bin] => 0

)

)

[size] => Array( [a] => Array( [text] => 242 [bin] => 834

)

)

)

)

Как видите, данные для элемента формы вида input [a] [text] превращаются в элементы массива $_files[input] [*] [a] [text], где * — это один из "стандартных" клю-




  Hostland.Ru

 «Бесплатный хостинг Hostland.Su» © 2006