Мне нужно получить изображение, отправленное методом PUT. Поэтому я пишу скрипт для его тестирования. Я хочу получить и отправить его с тем же сценарием. Как я могу это реализовать? В следующем варианте ничего не говорится о строке Поздравляем, что метод http был отправлен нормально.
<?php
//if they DID upload a file...
var_dump(file_get_contents("php://input"));
if($_FILES['photo']['tmp_name'])
{
echo $_FILES['photo']['error'];
if($_FILES['photo']['error']==0)
{
//now is the time to modify the future file name and validate the file
$new_file_name = strtolower($_FILES['photo']['tmp_name']); //rename file
$message = 'Congratulations!!!!!!!.';
//move it to where we want it to be
move_uploaded_file($_FILES['photo']['tmp_name'], 'url.../1.jpg');
echo'Congratulations! Your file was accepted.';
$image = fopen('url.../1.jpg', "rb");
var_dump($image);
$ch = curl_init();/* Set cURL options. */
curl_setopt($ch, CURLOPT_URL, "http://url.../upload.php");
curl_setopt($ch, CURLOPT_PUT, true);
curl_setopt($ch, CURLOPT_INFILE, $image);
curl_setopt($ch, CURLOPT_INFILESIZE, strlen($image));
/* Execute the PUT and clean up */
$result = curl_exec($ch);
fclose($image); //recommended to close the fileshandler after action
curl_close($ch);
}
//if there is an error...
else
{
//set that to be the returned message
$message = 'Ooops! Your upload triggered the following error: '.$_FILES['photo']['error'];
}
}
else
{
echo"WORKS";
}
Самый простой способ отправить изображение обратно в браузер — использовать URL.
<?PHP $imgFile=""; if($_FILES['photo']['tmp_name']) { ///Your existing code $imgFile="http://" . $_SERVER['HTTP_HOST'] .'/Your image url here'; //Ex:\\ http://yourserver.com/images/1.jpg - //you can take this from your move_upload_file } ?> <img src="<?PHP echo $imgFile; ?>" />
Полезные ссылки Как получить файл через HTTP PUT с PHP
Даже для спокойного сервиса вы можете использовать json или xml для отправки URL-адреса изображения. PUT не очень хорошая идея, если вам по какой-то причине не нужно возвращать данные изображения. Может быть, вы должны переосмыслить свою логику?
Ошибки были:
strlen($image)
strlen, если неправильно, должен быть размер файла и в моем URL я имел www
, В моем сообщении это не так, но это была ошибка.
Помог мне более опытный программист.
r.php для чтения потока:
$ res = file_get_contents («php: // input»);
$file = fopen('1.txt', "w");
fputs($file, $res);
fclose($file);
var_dump($res);
s.php, чтобы получить поток и инициализировать r.php
$image = fopen('/var/www/testfiles/1.jpg', "rb");
var_dump($image);
$ch = curl_init();/* Set cURL options. */
curl_setopt($ch, CURLOPT_URL, "http://url withot www/r.php");
curl_setopt($ch, CURLOPT_PUT, true);
curl_setopt($ch, CURLOPT_INFILE, $image);
curl_setopt($ch, CURLOPT_INFILESIZE, filesize('/var/www/testfiles/1.jpg'));
/* Execute the PUT and clean up */
$result = curl_exec($ch);
fclose($image); //recommended to close the fileshandler after action
curl_close($ch);
die("OK");