2013-02-27 107 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; 
} 

這是使用curl我如何查詢服務器。

[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選項應該滿足你的需求:評論後

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

更新。不同於-X PUT加上-F,數據會被原始發送並且得到而不是 multipart/form-data encoded ..其中一個隱藏的curl的寶藏;)

+0

所以這就是它的樣子: '------------------------------ 7bb0791da128 Content-Disposition:form-data; NAME = 「FILEDATA」; filename =「test.txt」 Content-Type:text/plain test 123 ----------------------------- -7bb0791da128 - '也許這就是爲什麼上傳的圖像文件無法查看。它有額外的字符串。 – 2013-02-27 09:36:32

+0

是:)我在測試過程中意識到這一點:)但重要的是第一句話。它更多的是關於HTTP協議的性質而不是PHP的問題。使用PUT請求可以只有一個文件,因此不需要$ _FILES數組。 **進一步注意圍繞-F參數的雙引號。沒有他們它不會工作** – hek2mgl 2013-02-27 09:37:43

+0

是的。做了建議。我認爲我們在服務器端獲得的還是原始的二進制數據。如果我將它存儲爲filename.txt我仍然看到額外的字符串,我想要做的是..我想將數據存儲在臨時文件中,所以我可以檢查它的類型,在我的情況下我想要圖像文件。所以你的回答實際上很有幫助,但並沒有解決問題。還在搞清楚該怎麼做。謝謝 – 2013-02-27 10:14:27