Новые книги

Практический опыт, описанный в книге, предназначен для освоения во время экономического кризиса, когда цены на новое оборудование – в силу разных причин – завышены, а требования и предпочтения пользователя к функционалу оборудования невысоки и ограничиваются «домашними» задачами. Сегодня почти у каждого активного пользователя скопились запчасти или старые компьютеры, компоненты и детали которых исправны. В то же время покупка нового ПК даже без установленного программного обеспечения (ПО) существенно облегчает кошелек. По сути, вся книга пронизана идеей экономии. При покупке блоков и компонентов ПК в магазинах, вы не только переплачиваете «за бренд» и «в карман посредника», но рискуете впустую потратить время из-за того, что новые компоненты (устройства, платы расширения, приводы, HDD, линейки ОЗУ и др.) не стыкуются со старыми материнскими платами и разъемами, то есть не работают. Чтобы правильно подобрать или заменить отдельные – вышедшие из строя компоненты ПК, или провести частичный апгрейд, необходимо обладать знаниями, которые вполне и всесторонне описаны в данном издании. С другой стороны – разница между новым ПК с тем же функционалом и собранным из деталей двух-трехлетней давности существенна и составляет до 500 %. Таким образом, домашний компьютер для работы становится «золотым». Но не для широкого круга читателей книги, у которых сэкономленные деньги – это заработанные деньги.

То, что сегодня «это наша жизнь» и «рабочие моменты» для специалистов-ремонтников, одновременно является откровением и «секретами» для неподготовленного пользователя персонального компьютера. В книге доступным языком – для непосвященных – описаны приемы восстановления работоспособности ПК, улучшения производительности, рассмотрены часто встречающиеся неисправности ПК и последующие ошибки апргерйда, даются ценные рекомендации практика, которые вы не найдете в Интернете.
Сегодня контекстная реклама – это спасательный круг для малого и среднего бизнеса. Многие рекламодатели, у которых нет бюджетов на ТВ– и радиорекламу, без контекстной рекламы уже разорились бы. Множество стартапов выжило исключительно благодаря ей. Главное – подойти к созданию рекламной кампании с умом, иначе из спасательного круга она превратится в камень на шее вашего бизнеса. Эта книга не просто пошаговое руководство по созданию и ведению рекламной кампании в Яндекс. Директ, но и возможность заглянуть за кулисы Яндекс. Директ и разобраться в кухне работы директологов.

Все права защищены. Никакая часть данной книги не может быть воспроизведена в какой бы то ни было форме без письменного разрешения владельцев авторских прав.

Обработка Загрузки Файлов

Учебник РНР
Назад Вперёд

Глава 19. Обработка загрузки файлов

Содержание
Загрузка методом POST
Обычные ловушки
Загрузка нескольких файлов
Поддержка метода PUT

Загрузка методом POST

PHP способен принимать загрузку файлов из любого RFC-1867-соответствующего браузера (в том числе - Netscape Navigator 3 и новее, Microsoft Internet Explorer 3 с патчем от Microsoft или новее без патча). Это даёт возможность загружать текстовые и бинарные файлы. С помощью функций РНР для аутентификации и манипуляций с файлами вы получаете полный контроль над тем, кому разрешено загружать файлы, и над тем, что делать с файлом после его загрузки.

Заметьте, что PHP поддерживает также загрузку методом PUT, который используется в Netscape Composer и в Amaya-клиентах W3C. См. также "Поддержка метода PUT".

Экран загрузки файлов может быть создан с помощью специальной формы примерно так:

Пример 19-1. Форма для загрузки файлов
<form enctype="multipart/form-data" action="_URL_" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="1000">
Send this file: <input name="userfile" type="file">
<input type="submit" value="Send File">
</form>

_URL_ должен указывать на PHP-файл. Скрытое поле MAX_FILE_SIZE обязано предшествовать полю ввода файла/file input field, и его значение это максимальный размер принимаемого файла. Значение в байтах.

Предупреждение!

MAX_FILE_SIZE является для браузера лишь уведомляющим. Легко обойти этот максимум. Поэтому не рассчитывайте, что браузер будет повиноваться вашим желаниям! Однако PHP-установки maximum-size обмануть нельзя.

Переменные, определяемые для загруженных файлов, зависят от версии PHP и конфигурации. Следующие переменные будут определены в скрипте назначения после успешного завершения загрузки. Если track_vars включена, инициализируется массив $HTTP_POST_FILES/$_FILES. Наконец, соответствующие переменные могут быть инициализированы как глобалы, если register_globals включена. Однако использовать глобалы больше не рекомендуется.

Примечание: track_vars всегда включена, начиная с версии PHP 4.0.3. Начиная с версии PHP 4.1.0, можно использовать $_FILES вместо $HTTP_POST_FILES.
$_FILES всегда является глобальной, поэтому global не должно использоваться для $_FILES в области видимости функции.

$HTTP_POST_FILES/$_FILES предоставлены для вмещения информации загруженных файлов.

Далее идёт содержимое $_FILES. Обратите внимание, что здесь предполагается использование имени 'userfile' для загружаемого файла, как в примере скрипта ранее:

$_FILES['userfile']['name']

Оригинальное имя файла на клиентской машине.

$_FILES['userfile']['type']

mime-тип файла, если браузер предоставил эту информацию. Пример: "image/gif".

$_FILES['userfile']['size']

Размер загруженного файла в байтах.

$_FILES['userfile']['tmp_name']

Временное имя файла, под которым загруженный файл был сохранён на сервере.

Примечание: в PHP версии до 4.1.0 она называлась $HTTP_POST_VARS и не была автоглобальной переменной. PHP 3 не поддерживает $HTTP_POST_FILES.

Если register_globals включена в php.ini, то будут доступны нижеследующие переменные. Обратите внимание, что имена этих переменных предполагают использование имя файла для загрузки 'userfile', как в примере предыдущего скрипта:

  • $userfile - Временное имя файла, под которым загруженный файл был сохранён на сервере.

  • $userfile_name - Оригинальное имя или путь к файлу на системе отправителя.

  • $userfile_size - Размер загруженного файла в байтах.

  • $userfile_type - mime-тип файла, если браузер предоставил эту информацию. Пример: "image/gif".

Заметьте, что часть "$userfile" этих переменных это имя, которое записано в поле <input> type="file" в форме загрузки. В предыдущем примере формы мы назвали её "userfile".

Примечание: register_globals = On не рекомендуется по соображениям производительности и обеспечения безопасности.

Файлы будут по умолчанию сохраняться во временной директории по умолчанию на сервере, если только не задано другое место директивой upload_tmp_dir в php.ini. Директория по умолчанию сервера может быть изменена через установку переменной окружения TMPDIR в среде, в которой работает PHP. Установка её с использованием putenv() из РНР-скрипта не будет работать. Эта переменная окружения может также использоваться для того, чтобы гарантировать, что другие операции также работают с загруженными файлами.

Пример 19-2. Проверка загрузки файлов

Следующие примеры предназначены для версий PHP 4 выше 4.0.2. См. о функциях is_uploaded_file() и move_uploaded_file().

<?php 
// В PHP ранее 4.1.0 должна использоваться $HTTP_POST_FILES вместо $_FILES.
if (is_uploaded_file($_FILES['userfile']['tmp_name'])) {
    copy($_FILES['userfile']['tmp_name'], "/place/to/put/uploaded/file");
} else {
    echo "Possible file upload attack. Filename: " . $_FILES['userfile']['name'];
}
/* ...или... */
move_uploaded_file($_FILES['userfile']['tmp_name'], "/place/to/put/uploaded/file");
?>

PHP-скрипт, который получает загружаемый файл, должен реализовывать логику, необходимую для определения того, что нужно сделать с загруженным файлом. Вы можете, например, использовать переменную $_FILES['userfile']['size'] для исключения файлов, которые слишком малы или велики. Вы можете использовать переменную $_FILES['userfile']['type'] для исключения файлов, которые не отвечают критериям определённого типа. При любой логике вы должны либо удалять, либо перемещать такие файлы из временной директории.

Файл будет удалён из временной директории по окончании запроса, если он (файл) не перемещён или не переименован.


Назад Оглавление Вперёд
Куки Вверх Обычные ловушки