我已经看到很多关于如何使用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行。
任何帮助都将不胜感激。
谢谢!
答案 0 :(得分:0)
删除http_build_query()并在文件名前面保留“@”。我不太确定是什么修复了“不允许请求数据与POST请求,或者请求中提供的数据量超过容量限制”错误,但是文件现在在SERVER2上正确接收和解析。