HTTP-протокол PUT и DELETE и их использование в PHP
Говорят, PUT и DELETE . Я только слышал о POST и GET и никогда не видел что-то вроде $_PUT или $_DELETE проходящих в любом PHP-коде, который я когда-либо просматривал.
Мой вопрос
Каковы эти методы (PUT) и (DELETE), и если можно использовать их в PHP, как бы я это делал.
Примечание. Я знаю, что это не проблема, но я всегда получаю возможность обучения, если увижу ее, и очень хотел бы научиться использовать эти методы на PHP, если это возможно.
Каковы эти методы (PUT) и (DELETE) для …
Есть много слов, которые нужно потратить, чтобы объяснить это, и я недостаточно квалифицирован, чтобы сделать это, но, как уже было опубликовано, краткое описание того, что описывает спецификация HTTP .
Протокол в основном говорит об этом:
- используйте GET, когда вам нужно получить доступ к ресурсу и получить данные , и вам не нужно изменять или изменять состояние этих данных.
- используйте POST, когда вам нужно отправить некоторые данные на сервер. Ex. из формы, чтобы сохранить эти данные где-то.
- используйте HEAD, когда вам нужно получить доступ к ресурсу и получить только заголовки из ответа , без каких-либо данных ресурсов.
- используйте PUT, когда вам нужно заменить состояние некоторых данных, уже существующих в этой системе.
- используйте DELETE, когда вам нужно удалить ресурс (относительно вашего URI, который вы отправили) в этой системе.
- используйте OPTIONS, когда вам нужно получить параметры связи с ресурсом, поэтому для проверки разрешенных методов для этого ресурса . Ex. мы используем его для правил запроса и разрешений CORS.
- Вы можете прочитать о двух оставшихся методах этого документа, извините, что я никогда не использовал его.
В основном протокол – это набор правил, которые вы должны использовать из своего приложения, чтобы придерживаться его.
… и если можно использовать их в PHP, как бы я это сделал.
Из вашего приложения вы должны получить, какой метод использовался с $_SERVER[‘REQUEST_METHOD’] и реагировать соответственно.
Некоторые приложения, работающие с браузерами, которые не поддерживают методы PUT или DELETE, используют этот трюк, скрытое поле из html, со значением, например:
Таким образом, из приложения вы теперь можете распознать это как запрос DELETE.
Следуйте простому описанию того, как PHP обрабатывает параметры:
Когда вы (ваш браузер, ваш клиент) запрашиваете ресурс на HTTP-сервере, вы должны использовать один из методов, который принимает протокол (HTTP). Поэтому вам нужно пройти:
- МЕТОД
- Ури ресурса
- Заголовки запроса, такие как User-Agent, Host, Content-Length и т. Д.
- (Необязательный орган запроса)
поэтому запрос должен выглядеть так:
GET /something/index.php?maybe=aparameter
Теперь, внутри вашего приложения, PHP принимает параметры из этого запроса GET и вставляет их в массив суперглобального (доступного для всего вашего приложения). Таким образом, вы можете получить доступ к $_GET[‘maybe’] который возвращает «aparameter».
В случае запроса POST вы запрашиваете ресурс на HTTP-сервере аналогичным образом, но с важным отличием. Вы предоставляете данные внутри тела запроса:
POST /something/index.php (body) maybe=aparameter
Теперь, внутри вашего приложения, PHP из этого запроса POST принимает параметры и вставляет их в массив суперглобального (доступного всего вашего приложения). Таким образом, вы можете получить доступ к $_POST[‘maybe’] который возвращает «aparameter».
Также обратите внимание на код состояния ответа (например, если вы получили запрос PUT, и вы обновили этот ресурс без ошибок, вы должны вернуть статус 204 – нет содержимого) .
Способ использования данных PUT из PHP:
$method = $_SERVER['REQUEST_METHOD']; if ('PUT' === $method) < parse_str(file_get_contents('php://input'), $_PUT); var_dump($_PUT); //$_PUT contains put fields >
В спецификации HTTP описаны .
В двух словах, и несколько упрощая, PUT предназначен для загрузки файла в URL-адрес, а DELETE – для удаления файла из URL-адреса.
никогда не видел что-то вроде $_PUT или $_DELETE проходящих в любом PHP-коде, который я когда-либо просматривал
$_POST и $_GET ужасно названы суперглобалами. $_POST – это данные, обработанные из тела запроса. $_GET предназначен для анализа данных из URL. Нет ничего, что строго связывает данные в любом из этих мест (особенно URL) с конкретным методом запроса.
Запросы DELETE заботятся только о пути URL-адреса, поэтому нет данных для синтаксического анализа.
Запросы PUT обычно касаются всего тела запроса (а не его синтаксического анализа), к которому вы будете обращаться с file_get_contents(‘php://input’); ,
и если можно использовать их в PHP, как бы я это сделал.
Вам нужно будет сопоставить URL-адрес с PHP-скриптом (например, с перезаписи URL-адресов ), протестировать метод запроса , определить, на каком URL вы фактически имеете дело , а затем написать код для выполнения соответствующих действий.
Наиболее подходящим местом для использования этих методов (PUT и DELETE) является REST API. Если мы используем методы http для определения режима работы, например, вы хотите получить любые ресурсы, то вы можете использовать следующее:
GET http://api.example.com/employee/
для добавления нового элемента:
POST http://api.example.com/employee/
для обновления или редактирования:
PUT http://api.example.com/employee/
для удаления существующего ресурса:
DELETE http://api.example.com/employee/1
Теперь на стороне PHP вам просто нужно прочитать, какой метод HTTP используется, чтобы вы могли совершить действие в соответствии с этим.
есть много доступных библиотек, которые могут сделать это для вас. это очень хороший пример: http://phphttpclient.com/
PHP $_GET и $_POST плохо названы. $_GET используется для доступа к значениям параметров строки запроса, а $_POST позволяет получить доступ к телу запроса.
Использование параметров строки запроса не ограничено запросами GET, а другие запросы, кроме POST, могут иметь тело запроса.
Если вы хотите узнать глагол, используемый для запроса страницы, используйте $_SERVER[‘REQUEST_METHOD’] .
Http put request php
Hello PHP World After many Hours of worryness :=)
I have found the Solution for Resume or Pause Uploads
In this Code Snippet it is the Server Side not Client on any Desktop Programm you must use byte ranges to calculate the uploaded bytes and missing of total bytes.
try <
if (!( $putData = fopen ( «php://input» , «r» )))
throw new Exception ( «Can’t get PUT data.» );
// now the params can be used like any other variable
// see below after input has finished
$tot_write = 0 ;
$tmpFileName = «/var/dev/tmp/PUT_FILE» ;
// Create a temp file
if (! is_file ( $tmpFileName )) <
fclose ( fopen ( $tmpFileName , «x» )); //create the file and close it
// Open the file for writing
if (!( $fp = fopen ( $tmpFileName , «w» )))
throw new Exception ( «Can’t write to tmp file» );
// Read the data a chunk at a time and write to the file
while ( $data = fread ( $putData , $CHUNK )) <
$chunk_read = strlen ( $data );
if (( $block_write = fwrite ( $fp , $data )) != $chunk_read )
throw new Exception ( «Can’t write more to tmp file» );
if (! fclose ( $fp ))
throw new Exception ( «Can’t close tmp file» );
unset( $putData );
> else <
// Open the file for writing
if (!( $fp = fopen ( $tmpFileName , «a» )))
throw new Exception ( «Can’t write to tmp file» );
// Read the data a chunk at a time and write to the file
while ( $data = fread ( $putData , $CHUNK )) <
$chunk_read = strlen ( $data );
if (( $block_write = fwrite ( $fp , $data )) != $chunk_read )
throw new Exception ( «Can’t write more to tmp file» );
if (! fclose ( $fp ))
throw new Exception ( «Can’t close tmp file» );
// Check file length and MD5
if ( $tot_write != $file_size )
throw new Exception ( «Wrong file size» );
$md5_arr = explode ( ‘ ‘ , exec ( «md5sum $tmpFileName » ));
$md5 = $md5sum_arr [ 0 ];
if ( $md5 != $md5sum )
throw new Exception ( «Wrong md5» );
> catch ( Exception $e ) <
echo » , $e -> getMessage (), «\n» ;
>
?>
Send a PUT request with PHP.
This is a short tutorial on how to send a PUT request using PHP. Generally speaking, the PUT method is used to update a given resource (I will presume that you already know this).
Here is a simple example of a PUT request being carried out with cURL & PHP:
1); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($fields)); //Execute the request. $response = curl_exec($ch); echo $response;
In the code above, we used the CURLOPT_PUT option to send a PUT request.
In my log.php file, which I sent the request to, I logged the REQUEST_METHOD variable from the $_SERVER array. The result:
//The request method. 'REQUEST_METHOD' => 'PUT'
But what if we want to PUT a file onto the server?
1); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($fields)); //The path of the file that we want to PUT $filepath = 'example_file.txt'; //Open the file using fopen. $fileHandle = fopen($filepath, 'r'); //Pass the file handle resorce to CURLOPT_INFILE curl_setopt($ch, CURLOPT_INFILE, $fileHandle); //Set the CURLOPT_INFILESIZE option. curl_setopt($ch, CURLOPT_INFILESIZE, filesize($filepath)); //Execute the request. $response = curl_exec($ch); echo $response;
If you look at the PHP code above, you’ll see that I opened the given file before passing its file handle to cURL using the CURLOPT_INFILE option. I also specified the file size in bytes by using the CURLOPT_INFILESIZE option.
Поддержка метода PUT
PHP поддерживает загрузку файлов методом HTTP PUT, который используется в некоторых клиентах для загрузки файлов на сервер. Запросы PUT намного проще, чем обыкновенная POST загрузка файла на сервер и выглядят примерно так:
PUT /path/filename.html HTTP/1.1
Такой вызов означает, что удаленный клиент хотел бы сохранить файл под именем /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» );
?php
/* Открываем файл на чтение */
$fp = fopen ( «myputfile.ext» , «w» );
/* Читаем 1 KB данных за один раз
и пишем в файл */
while ( $data = fread ( $putdata , 1024 ))
fwrite ( $fp , $data );
/* Закрываем потоки */
fclose ( $fp );
fclose ( $putdata );
?>