2013-06-26 2 views
-1

Если я прочитал сценарий загрузки файла я вижу почти везде следующую строку кода, чтобы прочитать содержимое файлазагрузки изображений с использованием HTML5 и PHP

file_get_contents('php://input'); 

Но, к сожалению, не могу понять. Может кто-то, пожалуйста, помогите, что это значит?

+0

Почему downvote ....? – Freak

+0

Но, к сожалению, я не могу понять первую строку. Может кто-то, пожалуйста, помогите, что это значит? – RoToRa

+0

Вместо 'file_get_contents ('php: // input')' Обычно я вижу использование '$ _FILES [" images "]' –

ответ

5

Хотя ваш пост не слишком детализирован в том, что вы пытались сделать, и самое главное, как я попытаюсь дать некоторые рекомендации для решения проблемы.

1. Как работают закачки?

Первое, что вы должны понять, как загружать работу с PHP. Загружаемый файл отправляется в качестве основной части HTTP-запроса.

Эта часть тела может быть закодирована. Как только такое кодирование может быть multipart/form-data, где тело разделено на отдельные части. PHP, однако, делает некоторую специальную обработку для этого, см. Позже в этом ответе.

Другой метод заключается в том, чтобы отправить файл полностью незакодированным как часть тела запроса PUT, отправленного, например, XMLHttpRequest. Это позволит вашему коду фактически работать, но, опять же, давайте обсудим это позже.

2. Как загружается PHP-дескриптор?

PHP имеет специальную магию, если вы используете multipart/form-data. Если вы используете это, содержимое php://input будет недоступно, вместо этого вы должны использовать массив $_FILES для обработки вашей загрузки.

Если вы, с другой стороны, хотите обработать загрузку самостоятельно, или вы использовали метод PUT, и ваша загрузка не требует специальной обработки, вы можете просто прочитать все содержимое php://input и использовать их по своему усмотрению.

Для получения дополнительной информации о загрузках, пожалуйста, перейдите по ссылке PHP manual.

3. Как отправить файлы с клиента?

Существует несколько способов. Самый простой метод - просто создать форму, которая отправляет файл в виде загрузки HTTP POST, а затем обрабатывает его, как описано выше.

Если вы хотите индикатор выполнения, вы можете использовать некоторую вспышку, как YUI uploader.Этот маленький файл по-прежнему будет отправлять HTTP POST, но у вас будет доступ к тому, сколько было загружено с помощью JavaScript.

Наконец, если ваш браузер поддерживает API файлов HTML5, вы можете получить содержимое локального файла и загрузить его через HTTP POST или HTTP PUT в соответствии с вашими потребностями. Для получения дополнительной информации см. this tutorial.

4. Проблемы отладки

Материал имеет тенденцию ломаться, так что вам нужно, чтобы иметь возможность его отладки. Вашим первым оружием выбора будет какой-то сетевой дамп из вашего браузера. Если у вас Chrome, инструменты встроены, для других браузеров вам, возможно, придется загружать некоторые расширения.

Вам нужно посмотреть запрос и посмотреть, имеются ли данные и правильно ли они закодированы. Как веб-разработчик вы должны иметь глубокое понимание HTTP, поэтому, если вы не read up on it. Нет никакого оправдания для незнания HTTP.

Если вы уверены, что ваши данные поступают на сервер, вы должны научиться отлаживать PHP. Прежде всего, взгляните на свой superglobals. Вы все отправили? Или что-то не хватает?

Если у вас нет файла, который вы отправили, возможно, вы нажмете настроенные ограничения на размер файлов для загрузки, как на вашем веб-сервере, так и на вашем PHP. Что касается виновника, вам нужно будет выяснить это самостоятельно.

Также не забудьте установить error_reporting в E_ALL & E_NOTICE, чтобы вы не пропустили проблемы с кодом.

Наконец, если ничего не помогает, вам нужно научиться отлаживать с помощью xdebug. Опять же, не существует никакого оправдания для веб-разработчика, поскольку он не может отлаживать ваш собственный код. Нет.

+2

+1 для очень продуманного ответа – BLaZuRE

1

См. http://www.php.net/manual/en/wrappers.php.php.

php://input является «специальным файлом», который содержит вход , который был отправлен на PHP-скрипт. На веб-сервере это означает содержимое запроса HTTP . file_get_contents просто считывает все содержимое, например, из обычного файла.

Вкратце: эта строка получает содержимое тела запроса HTTP.

Однако: php://input является not populated при использовании multipart/form-data