2012-04-11 59 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方法的代码,我们可以更好地回答你......

尝试将文件传输二进制,并在您的卷曲添加文件大小在头中。

相关问题