2013-02-27 1 views
1

это то, что я имею в process.php(CURL, PHP) Загрузка файлов с помощью запроса PUT. Как мне это обработать?

parse_str(file_get_contents("php://input"),$upload_data); 
if (isset($upload_data)) { 
    print_r($upload_data); 
    exit; 
} 

это, как я запрос к серверу с помощью завиток.

[email protected]:~$ curl -X PUT -H "X-TOKEN: test123" -F [email protected]/home/weldan/Pictures/Cool-Pictures1.jpg http://host.tld/process.php 
Array 
(
    [------------------------------22031b6e799c 
Content-Disposition:_form-data;_name] => "filedata"; filename="Cool-Pictures1.jpg" 
Content-Type: image/jpeg 

��� 
) 

, так что, как я знаю, там загружен файл.

Текущая проблема: как обработать этот файл, как переменная $ _FILES?

открыт для других способов достижения этого.

Благодаря

ответ

0

массив $ _FILES заселяется запросов PUT. Это связано с тем, что в запросе PUT указывается имя файла в URL-адресе и содержимое файла в теле. Больше ничего.

Вам следует использовать php://input, как вы уже говорили.

upload.php

<?php 
/* PUT data goes to php://input */ 
echo file_get_contents("php://input"); 

Затем используйте следующую локон командную строку:

curl --upload -H "X-TOKEN: test123" a.txt http://localhost/upload.php 

Update после комментариев: С помощью опции --upload должны соответствовать вашим потребностям. В отличии от -X PUT вместе с -F, данные будут отправляться сырыми и получить не многофайловыми/форматированными данными. Один из скрытых сокровищ завитка;)

+0

так это выглядело так: '------------------------------ 7bb0791da128 Content-Disposition: form-data; Name = "FILEDATA"; filename = "test.txt" Content-Type: text/plain тест 123 ------------------------------ -7bb0791da128 - 'возможно, поэтому загруженный файл изображения не может быть просмотрен. он имеет дополнительные строки с ним. –

+0

Да :) Я понял это во время моих тестов :) Но главное - это первое предложение. Его больше о природе протокола HTTP, чем проблема php. С запросом PUT может быть только один файл, поэтому нет массива $ _FILES. ** Обратите внимание на двойные кавычки вокруг аргумента -F. Без них это не сработает ** – hek2mgl

+0

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

Смежные вопросы