2012-04-11 82 views
0

我使用PHP(WAMPServer)接收表單提交,然後CURL將文件傳遞到另一個服務器進行處理。PHP&CURL不發送文件,即使用@作爲前綴

下面是一個例子來說明(而不是實際的代碼):

$data = array(
    'file' => '@'.$_FILES['key']['tmp_name'] 
); 

下面是我使用的是什麼捲曲......和我貼我注意到,我仍然有http_build_query()代碼我的代碼......所以,這一定是問題所在。

$CURL = curl_init(); 
curl_setopt($CURL, CURLOPT_URL, $operation['callback']); 
$query_string = http_build_query($arguments); 
curl_setopt($CURL, CURLOPT_POSTFIELDS, $query_string); 
curl_setopt($CURL, CURLOPT_POST, TRUE); 
curl_setopt($CURL, CURLOPT_RETURNTRANSFER, TRUE); 
$result = curl_exec($CURL); 
curl_close($CURL); 
return $result; 

我的問題是最後一個服務器沒有收到文件。相反,數據作爲鍵值對傳遞。

$_POST contains 'file' => '@c:\wamp\tmp\xyz.tmp' 

我更喜歡的是文件被傳輸,$ _FILES有關於它的信息。

+0

嘗試發送' '名'=>「xyz''也很有價值。你可以把實際的代碼? – safarov 2012-04-11 15:25:26

+1

我們需要查看其餘的捲曲代碼。 – webbiedave 2012-04-11 15:26:00

回答

5

請勿爲CURLOPT_POSTFIELDS生成http查詢。 Curl可以直接接受一個字段數組並進行自己的編碼/修改。

通過構建您自己的查詢,您'隱藏'指示文件上傳的@,CURL將不會觸發其上傳機制。

換句話說,這將解決的事情:

$data = array(
    'file' => '@'.$_FILES['key']['tmp_name'] 
); 
curl_setopt($CURL, CURLOPT_POSTFIELDS, $data); 
0

如果您添加CURL方法的代碼,我們可以更好地回答你......

嘗試將文件傳輸二進制,並在您的捲曲添加文件大小在頭中。

相關問題