我已经看到了很多关于如何使用 cURL 上传文件的示例(使用 cURL发送文件可能最接近我的需要),但无论出于何种原因,我的脚本都无法正常工作。
我想要实现的目标:从 SERVER2 卷曲文件上传表单,在 SERVER1 上显示它。选择要通过此表单上传的文件,提交表单但将其提交到 SERVER1,获取 $_POSTS 和 $_FILES,然后将提交卷曲到 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 行。
任何帮助,将不胜感激。
谢谢!