通过CURLed页面的CURL将上传的文件发送到另一台服务器

时间:2013-06-20 18:36:54

标签: php curl

我已经看到很多关于如何使用cURL上传文件(Send file with cURL可能最接近我需要的文件)的例子,但无论出于什么原因我的脚本都不起作用。

我想要实现的目标:从SERVER2卷曲文件上传表单,将其显示在SERVER1上。选择要通过此表单上传的文件,提交表单但将其提交给SERVER1,获取$ _POSTS和$ _FILES,然后cURL提交到SERVER2上的表单处理脚本并在SERVER1中显示结果。

换句话说,我在SERVER2上有一个工作文件上传和处理界面,但我需要让它看起来像SERVER1上发生的一切。

这就是我在SERVER1上的相关代码:

//loop through submitted files
foreach ($_FILES as $k => $v) {
    $settings[$k] = '@'.$v['tmp_name'];
}

$settings = http_build_query($settings);
$cookie= WP_CONTENT_DIR.'/plugins/myPlugin/cookie.txt';
//SERVER1 is a WORDPRESS site

$ch = curl_init($url);

curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $settings);    

curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6"); 
curl_setopt ($ch, CURLOPT_TIMEOUT, 60);     
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 0); 
curl_setopt ($ch, CURLOPT_COOKIEJAR, $cookie); 
curl_setopt ($ch, CURLOPT_COOKIEFILE, $cookie); 
curl_setopt ($ch, CURLOPT_REFERER, $url); 

$response = curl_exec($ch);

当我输出$ response(包含print_r($ _ FILES))时,文件会以空数组形式出现并生成以下错误:警告:file_get_contents(@ / tmp / phpFITW6K):无法打开流:否这样的文件或目录。

我错过了什么?我注意到某些cURL示例中缺少http_build_query,而是传递了一个数组,但是我得到了“不允许带有POST请求的请求数据,或者请求中提供的数据量超过容量限制。”如果我删除了http_build_query行。

任何帮助都将不胜感激。

谢谢!

1 个答案:

答案 0 :(得分:0)

删除http_build_query()并在文件名前面保留“@”。我不太确定是什么修复了“不允许请求数据与POST请求,或者请求中提供的数据量超过容量限制”错误,但是文件现在在SERVER2上正确接收和解析。