Отправка файла методом PUT


Отправка файла методом PUT

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

Такой вызов означает, что удаленный клиент хотел бы сохранить файл под именем /path/filename.html в дереве каталогов вашего веб-сервера. Очевидно, что возможность клиента автоматически перезаписывать файлы веб-сервера при помощи Apache или PHP не является хорошим решением. Поэтому для того, чтобы обрабатывать такие запросы, вам необходимо указать веб-серверу PHP-скрипт, которому вы доверяете их обработку. В веб-сервере Apache вы можете сделать это, используя директиву Script. Как правило, эта директива расположена внутри блока или же внутри блока . Сама запись выглядит следующим образом:

Это указывает веб-серверу Apache на необходимость перенаправлять все PUT-запросы, контекст которых совпадает с контекстом, в которым вы разместили эту строку, в файл put.php . Предполагается, что файлы с расширением .php обрабатываются, как PHP-скрипты, и что сам PHP установлен и работает. Ресурсом назначения для всех PUT-запросов на этот скрипт должен быть сам скрипт, а не имя файла, которое должен иметь загружаемый файл.

Внутри вашего файла put.php вы можете поместить что-нибудь похожее на следующий пример. Он скопирует содержимое загруженного файла в файл myputfile.ext на сервер. Возможно, вам понадобится осуществить несколько проверок и/или аутентифицировать пользователя перед выполнением копирования этого файла.

Пример #1 Сохранение файлов, отправленных через HTTP PUT

/* PUT данные приходят в потоке ввода stdin */
$putdata = fopen ( «php://input» , «r» );

/* Открываем файл на запись */
$fp = fopen ( «myputfile.ext» , «w» );

/* Читаем 1 KB данных за один раз
и пишем в файл */
while ( $data = fread ( $putdata , 1024 ))
fwrite ( $fp , $data );

/* Закрываем потоки */
fclose ( $fp );
fclose ( $putdata );
?>

FPublisher

Web-технологии: База знаний

Документация PHP

Поддержка метода PUT

Поддержка метода PUT была изменена при переходе от PHP 3 к PHP 4. В PHP 4 вы должны использовать стандартный поток ввода для чтения файла, передаваемого методом HTTP PUT.

Пример #1 Сохранение загруженного при помощи HTTP PUT файла в PHP 4

/* Данные PUT находятся в потоке stdin */
$putdata = fopen ( «php://stdin» , «r» );

/* Открываем файл для записи */
$fp = fopen ( «myputfile.ext» , «w» );

/* Читаем данные блоками размером в 1 KB и
записываем их в файл */
while ( $data = fread ( $putdata , 1024 ))
fwrite ( $fp , $data );

/* Закрываем потоки */
fclose ( $fp );
fclose ( $putdata );
?>

Замечание: Вся документация, приведенная ниже, касается исключительно PHP 3.

PHP поддерживает загрузку файлов методом HTTP PUT, который используется в клиентах Netscape Composer и W3C Amaya . Запрос PUT выглядит проще, чем в случае обыкновенной загрузки файла на сервер:

Такой вызов означает, что удаленный клиент хотел бы сохранить файл под именем /path/filename.html в дереве каталогов вашего веб-сервера. Очевидно, что возможность клиента автоматически перезаписывать файлы вашего веб-сервера при помощи Apache или PHP не является хорошим решением. Поэтому для того, чтобы обрабатывать такие запросы, вам необходимо указать веб-серверу PHP-скрипт, которому вы доверяете их обработку. В веб-сервере Apache вы можете сделать это, используя директиву Script. Она может находиться практически в любом месте конфигурационного файла Apache. Как правило, эта директива расположена внутри блока или же внутри блока . Сама запись выглядит следующим образом:

Это указывает веб-серверу Apache на необходимость перенаправлять по указанному адресу все PUT-запросы, контекст которых совпадает с контекстом, в которым вы разместили эту строку. Предполагается, что файлы с расширением .php обрабатываются, как PHP-скрипты, и что сам PHP установлен и работает.

Внутри вашего файла put.php file вы можете поместить что-нибудь похожее на это:

( $PHP_UPLOADED_FILE_NAME , $DOCUMENT_ROOT . $REQUEST_URI ); ?>

Приведенный код скопирует файл в место, запрошенное клиентом. Возможно, вы захотите выполнить какую-либо проверку и/или аутентифицировать пользователя, прежде чем выполнять копирование. Трюк состоит в том, что когда PHP видит PUT-запрос, он сохраняет полученный файл во временной папке, как и при загрузке методом POST. По окончании обработки запроса временный файл удаляется. Поэтому ваш PHP-скрипт, обрабатывающий PUT-запрос, должен скопировать куда-либо полученный файл. Имя временного файла хранится в переменной $PHP_PUT_FILENAME , а предполагаемое имя файла можно найти в переменной $REQUEST_URI (может быть другим на веб-серверах, отличных от Apache). Запрашиваемое имя файла указывается удаленным клиентом. Вы не обязаны следовать его указаниям. Например, вы можете скопировать все загруженные файлы в отдельный каталог.

PHP CURL PUT запрос с данными

Мне нужно сделать запрос PUT, отправляющий данные json, я написал код ниже, но данные не отправляются. Может кто-нибудь помочь?

Решение

Я думаю, что знаю вашу проблему. Попробуйте добавить

curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

Документы PHP намекают на то, что если вы этого не сделаете, выполнение curl просто выведет содержимое непосредственно на страницу, которая, если вы используете это как скрипт, который ничего не выводит, очевидно, ничего не покажет. Это должно сделать $result равно что-то, а затем позволит вам print_r Это

Другие решения

Я бы предложил вам использовать пропивать . Это обертка вокруг CURL, которая абстрагирует всю конфигурацию и предоставляет вам множество удобных методов для легкого использования.

Ниже приведен пример того, как вы можете использовать жрет, чтобы получить то, что вы хотите.

Я использовал Guzzle вместо raw CURL во многих проектах и ​​нашел, что он отлично экономит время.

За PUT использование curl_setopt($ch, CURLOPT_PUT, true);

У меня такая же проблема. Я решил, изменив

Перед этим, curl, попытайтесь опубликовать файл или что-то подобное, с 100-continue, но нам нужно опубликовать json.

Как получить файл через HTTP PUT с PHP

Это то, что меня раздражало какое-то время. Я создаю API RESTful, который должен получать файлы в некоторых случаях.

При использовании HTTP POST мы можем читать data from $_POST и files from $_FILES .

При использовании HTTP GET мы можем читать data from $_GET и files from $_FILES .

Илон Маск рекомендует:  Iis обнаружение несанкционированного доступа

Однако при использовании HTTP PUT AFAIK единственным способом чтения данных является использование php://input stream .

Все хорошо и хорошо, пока я не хочу отправить файл через HTTP PUT. Теперь поток ввода php: // работает не так, как ожидалось, так как в нем есть файл.

Вот как я сейчас читаю данные по запросу PUT:

(который отлично работает, пока нет файлов)

Когда я выдаю rawData, он показывает

Кто-нибудь знает, как правильно получать файлы через HTTP PUT или как разбирать файлы из потока ввода php: //?

===== UPDATE # 1 =====

Я пробовал только этот метод, на самом деле не знаю, что я могу сделать иначе.

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

===== UPDATE # 2 =====

Я отправляю этот тестовый запрос, используя Zend_Http_Client, следующим образом: (до сих пор не было проблем с Zend_Http_Client)

===== РЕШЕНИЕ =====

Оказывается, я сделал некоторые неправильные предположения, в основном, что HTTP PUT будет похож на HTTP POST. Как вы можете прочитать ниже, DaveRandom объяснил мне, что HTTP PUT не предназначен для передачи нескольких файлов по одному и тому же запросу.

Теперь я переместил передачу formdata из тела в строку запроса. Тело теперь содержит содержимое одного файла.

Для получения дополнительной информации прочитайте ответ DaveRandom. Это эпично.

Данные, которые вы показываете, не отображают действительный орган запроса PUT (ну, может , но я очень сомневаюсь в этом). То, что он показывает, это тело запроса multipart/form-data – тип MIME, используемый при загрузке файлов через HTTP POST через HTML-форму.

Запросы PUT должны точно дополнять ответ на запрос GET – они отправляют вам содержимое файла в теле сообщения и ничего больше.

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

Если вы объясните, что такое клиент (браузер, сценарий на другом сервере и т. Д.), Я могу помочь вам это сделать дальше. Как бы то ни было, соответствующий метод запроса для тела запроса, который вы изображаете, является POST, а не PUT.

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

история

HTTP был первоначально разработан как механизм для извлечения HTML-документов с удаленных серверов. Сначала он эффективно поддерживал только метод GET, посредством которого клиент запрашивал документ по имени, а сервер возвращал его клиенту. Первая публичная спецификация для HTTP, обозначенная как HTTP 0.9, появилась в 1991 году, и если вам интересно, вы можете прочитать ее здесь .

Спецификация HTTP 1.0 (формализованная в 1996 году с RFC 1945 ) значительно расширила возможности протокола, добавив методы HEAD и POST. Он не был обратно совместим с HTTP 0.9 из-за изменения формата ответа – добавлен код ответа, а также возможность включать метаданные для возвращаемого документа в виде заголовков формата MIME – данные ключа / значения пар. HTTP 1.0 также абстрагировал протокол от HTML, позволяя передавать файлы и данные в других форматах.

HTTP 1.1, форма протокола, которая почти исключительно используется сегодня, построена поверх HTTP 1.0 и была разработана для обратной совместимости с реализациями HTTP 1.0. Он был стандартизирован в 1999 году с RFC 2616 . Если вы разработчик, работающий с HTTP, ознакомьтесь с этим документом – это ваша Библия. Понимание этого полностью даст вам значительное преимущество перед вашими сверстниками, которые этого не делают.

Подходите к делу уже

HTTP работает в архитектуре запроса-ответа – клиент отправляет на сервер сообщение с запросом, сервер возвращает ответное сообщение клиенту.

Сообщение запроса включает в себя МЕТОД, URI и, возможно, несколько HEADERS. МЕТОД запроса – это то, к чему относится этот вопрос, поэтому я расскажу о нем наиболее подробно здесь, но сначала важно понять, что мы имеем в виду, когда говорим о URI запроса.

URI – это местоположение на сервере ресурса, который мы запрашиваем. В общем, это состоит из компонента пути и, необязательно, строки запроса . Существуют обстоятельства, при которых могут присутствовать и другие компоненты, но в целях простоты мы будем их игнорировать пока.

Представим себе, что вы вводите http://server.domain.tld/path/to/document.ext?key=value в адресную строку вашего браузера. Браузер демонтирует эту строку и определяет, что ей необходимо подключиться к HTTP-серверу на server.domain.tld и запросить документ по адресу /path/to/document.ext?key=value .

Сгенерированный запрос HTTP 1.1 будет выглядеть (как минимум) следующим образом:

Первая часть запроса – это слово GET – это МЕТОД запроса. Следующая часть – это путь к файлу, который мы запрашиваем, – это URI запроса. В конце этой первой строки есть идентификатор, указывающий используемую версию протокола. В следующей строке вы можете увидеть заголовок в формате MIME, называемый Host . HTTP 1.1 указывает, что заголовок Host: должен быть включен с каждым запросом. Это единственный заголовок, который является истинным.

URI запроса разбит на две части – все слева от вопросительного знака ? это путь , все справа от него – строка запроса .

Методы запроса

RFC 2616 (HTTP / 1.1) определяет 8 методов запроса .

Метод OPTIONS редко используется. Он предназначен как механизм для определения того, какие функции поддерживает сервер, прежде чем пытаться использовать службу, которую может предоставить сервер.

В верхней части моей головы единственное место в довольно распространенном использовании, которое я могу придумать, где это используется, – это открытие документов в Microsoft Office непосредственно через HTTP из Internet Explorer. Office отправит на сервер запрос OPTIONS, чтобы определить, поддерживает метод PUT для конкретного URI, и если он это сделает, он откроет документ таким образом, чтобы пользователь мог сохранить свои изменения в документе непосредственно на удаленном сервере. Эта функциональность тесно интегрирована в эти конкретные приложения Microsoft.

Это самый распространенный метод в повседневном использовании. Каждый раз, когда вы загружаете обычный документ в свой веб-браузер, это будет запрос GET.

Метод GET запрашивает, чтобы сервер возвращал определенный документ. Единственными данными, которые должны быть переданы на сервер, является информация, которую серверу необходимо определить, какой документ должен быть возвращен. Это может включать информацию, которую сервер может использовать для динамического создания документа, который отправляется в форме заголовков и / или строки запроса в URI запроса. Пока мы по теме – Cookies отправляются в заголовки запроса.

Илон Маск рекомендует:  Что такое код createfontindirect

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

Это второй наиболее часто используемый метод и, возможно, самый сложный. Запросы метода POST почти исключительно используются для вызова некоторых действий на сервере, которые могут изменить его состояние.

Запрос POST, в отличие от GET и HEAD, может (и обычно) включать некоторые данные в тело сообщения запроса. Эти данные могут быть в любом формате, но чаще всего это строка запроса (в том же формате, что и в URI запроса), или многостраничное сообщение, которое может связывать пары ключ / значение вместе с файловыми вложениями.

Многие формы HTML используют метод POST. Чтобы загрузить файлы из браузера, вам нужно будет использовать метод POST для вашей формы.

Метод POST семантически несовместим с API RESTful, поскольку он не является идемпотентным . Другими словами, второй идентичный запрос POST может привести к дальнейшему изменению состояния сервера. Это противоречит «безстоящему» ограничению REST.

Это напрямую дополняет GET. В тех случаях, когда запросы GET указывают, что сервер должен вернуть документ в местоположении, указанном в URI запроса, в методе PUT указывается, что сервер должен хранить данные в теле запроса в местоположении, указанном в URI запроса.

Это указывает на то, что сервер должен уничтожить документ в месте, указанном URI запроса. Очень мало интернет-приложений, реализующих HTTP-сервер, будут выполнять любые действия, когда они получат запрос DELETE, по довольно очевидным причинам.

Это обеспечивает механизм уровня уровня приложения, позволяющий клиентам проверять отправленный запрос, как он выглядит к моменту достижения целевого сервера. Это в основном полезно для определения эффекта, которое могут иметь любые прокси-серверы между клиентом и целевым сервером в сообщении запроса.

HTTP 1.1 резервирует имя для метода CONNECT, но не определяет его использование или даже его назначение. С тех пор некоторые реализации прокси-сервера использовали метод CONNECT для упрощения туннелирования HTTP.

Я никогда не пробовал использовать PUT (GET POST и FILES были достаточны для моих нужд), но этот пример из документов php, чтобы он мог помочь вам (http://php.net/manual/en/features.file-upload. пут-method.php):

Вот решение, которое я нашел наиболее полезным.

$put = array(); parse_str(file_get_contents(‘php://input’), $put);

$put будет массивом, так же, как вы привыкли видеть в $_POST , за исключением того, что теперь вы можете следовать истинному протоколу HTTP REST.

Просто следуйте тому, что он говорит в DOC :

Это должно прочитать весь файл, который находится в потоке PUT, и сохранить его локально, тогда вы можете делать то, что хотите.

Используйте POST и включите заголовок X, чтобы указать фактический метод (PUT в этом случае). Обычно это то, как один работает вокруг брандмауэра, который не позволяет использовать методы, отличные от GET и POST. Просто объявляйте PHP багги (поскольку он отказывается обрабатывать многостраничные полезные данные PUT, он глючит), и относитесь к нему так же, как к устаревшему / драконовскому брандмауэру.

Мнения относительно того, что означает PUT в отношении GET, – это просто мнения, мнения. HTTP не требует такого требования. Он просто утверждает «эквивалент». Дизайнер должен определить, что означает «эквивалент». Если ваш проект может принять многостраничную загрузку PUT и создать «эквивалентное» представление для последующего GET для одного и того же ресурса, это просто отлично и денди, как технически, так и философски, с спецификациями HTTP.

Загрузка файла на сервер без использования формы

Для HTTP запроса типа POST существует два варианта передачи полей из HTML форм, а именно, используя алгоритм application/x-www-form-urlencoded и multipart/form-data . Алгоритм первого типа создавался давным-давно, когда в языке HTML еще не предусматривали возможность передачи файлов через HTML формы.

Со временем возникла необходимость через формы отсылать еще и файлы. Тогда консорциум W3C взялся за доработку формата POST запроса. К тому времени уже достаточно широко применялся формат MIME (Multipurpose Internet Mail Extensions — многоцелевые расширения протокола для формирования Mail сообщений), поэтому, чтобы не изобретать велосипед заново, решили использовать часть данного формата формирования сообщений для создания POST запросов в протоколе HTTP.

Главное отличие multipart/form-data от application/x-www-form-urlencoded в том, что тело запроса теперь можно поделить на разделы, которые разделяются границами. Каждый раздел может иметь свой собственный заголовок для описания данных, которые в нем хранятся, т.е. в одном запросе можно передавать данные различных типов (как в теле письма можно одновременно с текстом передавать файлы). Пример запроса:

Boundary (граница) — это последовательность байтов, которая не должна встречаться внутри передаваемых данных. Content-Length — суммарный объём, включая дочерние заголовки. Само содержимое полей при этом оставляется «как есть».

CURL, multipart/form-data

Файл get.php на сервере http://server.com:

Важный момент: на форуме PHPCLUB.RU встретил упоминание, что может потребоваться указание полного пути файла — иначе CURL выдает ошибку.

CURL, application/x-www-form-urlencoded

Файл get.php на сервере http://server.com:

Сокеты, multipart/form-data

Файл get.php на сервере http://server.com:

Сокеты, application/x-www-form-urlencoded

Файл get.php на сервере http://server.com:

Метод PUT

Описанные выше способы работают для относительно небольших файлов (примерно до 2-х мегабайт, для получения более точного значения необходимо смотреть в настройках PHP максимальный объем принимаемых данных методом POST). Чтобы обойти это ограничение, будем передавать файл методом PUT:

Вопрос по stream, curl, php, http-put &#8211 Отправка файла через HTTP PUT в PHP

Я боролся в течение нескольких часов, пытаясь понять, как получить эту работу. Я пытаюсь отправить файл через HTTP-PUT в eXist db. Для сервера существует аутентификация пользователя, поэтому я пытался сделать что-то вроде этого:

У меня есть URL-адрес, на который нужно положить документ, У меня есть имя пользователя и пароль для eXist DB. У меня есть контент, который нужно отправить через PUT

Я попытался заставить работать cURL, но он молча потерпел неудачу. Я пытался использовать потоки PHP, но продолжал получать сообщение «ошибка 201 / создан», но файл фактически не был создан.

Любая помощь с этим будет С благодарностью.

Вот пример кода, который я пробовал использовать потоки PHP

Как передать файл методом POST вместе с другими текстовыми полями

Помогите. Не получается передать файл методом POST, чтобы он был в целости и сохранности. Его нужно закодировать в url-строку, но я никак не могу понять как!
Дело в том, что в post-зпросе помимо передачи файла передаются также другие текстовые поля, и как все это вместе передать, не получается никак, вот уже 3 часа мучаюсь

Илон Маск рекомендует:  Nil - Константа

В результате вместо нормальной PNG-картинки получается что-то непонятное и изуродованное У нее даже размер на половину меньше, чем у оригинальной картинки.
Хотя другие данные, отправленные в пост-запросе, передаются нормально (файл file_post.txt).

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

Поддержка метода PUT

PHP поддерживает HTTP-метод PUT, используемый такими клиентами, как Netscape Composer и W3C Amaya. PUT-запросы намного проще, чем загрузка файлов и выглядят примерно так:

Нормально это должно означать, что удалённый клиент хотел бы сохранить содержимое /path/filename.html в вашем web-дереве. Для Apache или PHP, очевидно, не очень-то здорово разрешить любому автоматически перезаписывать любые файлы в вашем web-дереве. Поэтому, чтобы обрабатывать такие запросы, вы должны сначала указать вашему web-серверу, что вы хотите, чтобы определённый PHP-скрипт обрабатывал запрос. В Apache вы делаете это директивой Script . Она может быть размещена почти в любом месте файла конфигурации вашего Apache. Обычно это в блоке или, возможно, в блоке . Строка типа этой выполняет трюк:

Это указывает серверу Apache, что нужно отправить все PUT-запросы по URI, которые совпадают с контекстом, в котором вы поместили эту строку в скрипт put.php. Это предполагает, разумеется, что PHP включён для расширений .php и что PHP активен.

В файле put.php вы можете тогда записать что-нибудь такое:

Это скопирует файл в место, запрошенное удалённым клиентом. Вы, возможно, захотите выполнить какую-нибудь проверку и/или аутентифицировать пользователя, прежде чем выполнить копирование файла. Трюк состоит в том, что, когда PHP видит запрос методом PUT, он сохраняет загруженный файл во временной директории, как и при работе методом POST. Когда запрос завершается, этот временный файл удаляется. Поэтому ваш РНР-скрипт обработки PUT должен скопировать файл куда-нибудь. Имя этого временного файла находится в переменной $PHP_PUT_FILENAME, а предполагаемое имя файла назначения можно найти в $REQUEST_URI (может называться иначе на не-Apache web-серверах). Это имя файла, специфицированное удалённым клиентом. Вам не нужно прослушивать этот клиент. Вы можете, например, скопировать все загруженные файлы в специальную директорию.

Поддержка метода PUT

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

Такой вызов означает, что удаленный клиент хотел бы сохранить файл под именем /path/filename.html в дереве каталогов вашего веб-сервера. Очевидно, что возможность клиента автоматически перезаписывать файлы веб-сервера при помощи Apache или PHP не является хорошим решением. Поэтому для того, чтобы обрабатывать такие запросы, вам необходимо указать веб-серверу PHP-скрипт, которому вы доверяете их обработку. В веб-сервере Apache вы можете сделать это, используя директиву Script. Как правило, эта директива расположена внутри блока или же внутри блока . Сама запись выглядит следующим образом:

Это указывает веб-серверу Apache на необходимость перенаправлять все PUT-запросы, контекст которых совпадает с контекстом, в которым вы разместили эту строку, в файл put.php . Предполагается, что файлы с расширением .php обрабатываются, как PHP-скрипты, и что сам PHP установлен и работает. Ресурсом назначения для всех PUT-запросов на этот скрипт должен быть сам скрипт, а не имя файла, которое должен иметь загружаемый файл.

Внутри вашего файла put.php file вы можете поместить что-нибудь похожее на следующий пример. Он скопирует содержимое загруженного файла в файл myputfile.ext на сервер. Возможно, вам понадобится осуществить несколько проверок и/или авторизовать пользователя перед выполнением копирования этого файла.

Пример #1 Saving HTTP PUT files

/* PUT данные приходят в потоке ввода stdin */
$putdata = fopen ( «php://input» , «r» );

/* Открываем файл на чтение */
$fp = fopen ( «myputfile.ext» , «w» );

/* Читаем 1 KB данных за один раз
и пишем в файл */
while ( $data = fread ( $putdata , 1024 ))
fwrite ( $fp , $data );

/* Закрываем потоки */
fclose ( $fp );
fclose ( $putdata );
?>

Отправка файла методом PUT

Поддержка метода PUT была изменена при переходе от PHP 3 к PHP 4. В PHP 4 вы должны использовать стандартный поток ввода для чтения файла, передаваемого методом HTTP PUT.

Пример 38-4. Сохранение загруженного при помощи HTTP PUT файла в PHP 4

/* Данные PUT находятся в потоке stdin */
$putdata = fopen ( «php://stdin» , «r» );

/* Открываем файл для записи */
$fp = fopen ( «myputfile.ext» , «w» );

/* Читаем данные блоками размером в 1 KB и
записываем их в файл */
while ( $data = fread ( $putdata , 1024 ))
fwrite ( $fp , $data );

/* Закрываем потоки */
fclose ( $fp );
fclose ( $putdata );
?>

Замечание: Вся документация, приведенная ниже, касается исключительно PHP 3.

PHP поддерживает загрузку файлов методом HTTP PUT, который используется в клиентах Netscape Composer и W3C Amaya . Запрос PUT выглядит проще, чем в случае обыкновенной загрузки файла на сервер:

PUT /path/filename.html HTTP/1.1

Такой вызов означает, что удаленный клиент хотел бы сохранить файл под именем /path/filename.html в дереве каталогов вашего веб-сервера. Очевидно, что возможность клиента автоматически перезаписывать файлы вашего веб-сервера при помощи Apache или PHP не является хорошим решением. Поэтому для того, чтобы обрабатывать такие запросы, вам необходимо указать веб-серверу PHP-скрипт, которому вы доверяете их обработку. В веб-сервере Apache вы можете сделать это, используя директиву Script . Она может находиться практически в любом месте конфигурационного файла Apache. Как правило, эта директива расположена внутри блока или же внутри блока . Сама запись выглядит следующим образом:

Script PUT /put.php

Это указывает веб-серверу Apache на необходимость перенаправлять по указанному адресу все PUT-запросы, контекст которых совпадает с контекстом, в которым вы разместили эту строку. Предполагается, что файлы с расширением .php обрабатываются, как PHP-скрипты, и что сам PHP установлен и работает.

Внутри вашего файла put.php file вы можете поместить что-нибудь похожее на это:

Пред. Начало След.
Загрузка на сервер нескольких файлов Уровень выше Работа с удаленными файлами

Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL