2011-03-10 117 views
3

可以說我有一個很大的文件,我想通過PHP和curl將HTTP POST發送到webservice。該文件大於我可以讓PHP使用的內存量。如何通過流式傳輸文件使用PHP,curl和HTTP POST上傳文件?

基本上我正在尋找一種方法來直接流動文件的內容來捲曲,而無需將整個文件讀入內存。

我已經成功地使用了多部分POST和PUT,但沒有使用POST上傳「二進制數據」。

我想在PHP中實現的是這個命令行所做的:

$ curl -X POST -H "Content-Type: image/jpeg" \ 
     --data-binary "@large.jpg" "http://example.com/myservice" 

嘗試了很多的選項與curl_setopt,如INFILE,POSTFIELDS,Content-Type頭,但沒有運氣。

它與多,雖然,但我需要一個原始POST請求,沒有multipart內容:

$post['file'] = "@large.jpg"; 
curl_setopt($c, CURLOPT_POSTFIELDS, $post); 
+0

在這種情況下你可能最好的一個自定義的fsockopen塊。它只需要一個POST頭部blob,以及fread/fwrite的簡單循環。 – mario 2011-03-10 14:32:26

+0

任何原因你不能只是SCP文件? PECL有一個ssh庫.. – 2011-03-10 14:33:40

回答

3

的PHP /捲曲結合支持CURLOPT_READFUNCTION選項,它允許您將數據傳遞給發送塊逐使用該回調的塊。

差不多完全按照該C例子顯示相同的邏輯: http://curl.haxx.se/libcurl/c/post-callback.html

+0

看起來很有希望,我會試試看。謝謝! – hovenko 2011-03-13 17:57:53