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

PUT 요청에 $ _FILES 배열이 채워집니다. PUT 요청은 url의 파일 이름과 본문의 파일 내용을 지정하기 때문입니다. 아무것도 더.

이미 제안한대로 php://input을 사용해야합니다. 필요에 맞게해야 --upload 옵션을 사용 : 의견 후

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

업데이트 :

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

upload.php로는 그런 다음 컬 명령 줄을 사용합니다. -F와 함께 -X PUT과 다른 점은 데이터가 raw로 전송되어 이 아닌 multipart/form-data가 인코딩 됨 ..

+0

이렇게 보이는 방법은 다음과 같습니다. '------------------------------ 7bb0791da128 내용 - 처분 : form-data; name = "filedata"; 파일 이름 = "test.txt" 콘텐츠 유형 : 텍스트/일반 테스트 123 ----------------------------- -7bb0791da128 - 이것이 업로드 된 이미지 파일을 볼 수없는 이유 일 수 있습니다. 그것과 함께 여분의 문자열이 있습니다. –

+0

예 :) 테스트 중에 이것을 깨달았습니다 :)하지만 중요한 것은 첫 번째 문장입니다. PHP 관련 문제보다 HTTP 프로토콜의 특성에 대해 자세히 설명합니다. PUT 요청을하면 파일 하나만있을 수 있으므로 $ _FILES 배열은 없습니다. ** -F 인수에 대한 큰 따옴표를 더주의하십시오. 그것들이 없으면 ** – hek2mgl

+0

예. 제안했다. 우리가 서버 측에서 얻은 결과는 여전히 원시 이진 데이터라고 생각합니다. 내가 filename.txt로 저장했다면 나는 여전히 여분의 문자열을 보았습니다. 내가하고 싶은 것은 .. 임시 파일에 데이터를 저장하고 싶습니다. 그래서 유형을 검사 할 수 있습니다. 제 경우에는 이미지 파일이 필요합니다. 그래서 귀하의 대답은 실제로 도움이되었지만 문제를 해결하지는 못했습니다. 아직도해야할 일을 알아 냈습니다. 덕분에 –