所以我正在研究一个我再次遇到的问题而且仍然令人沮丧。我想要做的就是使用cURL请求将文件上传到远程位置,无论我尝试任何类型的研究和示例,我都没有成功。我将开始发布每一段代码并给出一个小解释,针对每个代码的具体问题。
这是我的curl_handler:
curlUploadHandler.php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_VERBOSE, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.2 (KHTML, like Gecko) Chrome/22.0.1216.0 Safari/537.2");
curl_setopt($ch, CURLOPT_POST, true);
$post_array = array(
"file" => "@".$_FILES['doc']['tmp_name'][$i],
"upload" => "Upload",
"type" => $type
);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_array);
$r = curl_exec($ch);
print_r($r);
curl_close($ch);
上面的代码是我执行卷曲处理的代码部分,它的组织,订购或其他方面有问题,但我无法弄清楚是什么。
upload.php的
if(isset($_POST['upload']) && $_SERVER['REMOTE_ADDR'] == $addr){
if(!empty($_FILES['file'])){
$type = $_POST['type'];
$directory = "/var/www/assets/$type/";
if($_FILES['file']['error'] > 0){
$response['errors'] = true;
$response['error'] = $_FILES['file']['error'];
}else{
if(!move_uploaded_file($_FILES['file']['tmp_name'], $directory.$_FILES['file']['name'])){
$response['errors'] = true;
$response['error'] = 9;
}else{
$response['errors'] = false;
}
}
}else{
$response['errors'] = true;
$response['error'] = 9;
}
}else{
$response['errors'] = true;
$response['error'] = 9;
}
这是远程端的上传处理程序。现在有趣的是,当我尝试从curlUploadHandler.php
发送数据时,我会得到成功上传的文件,但这是因为没有数据发送到upload.php
。无论我尝试什么,我都会得到upload.php
的零响应,我已经做了太多不同的方式,一遍又一遍,并且没有成功。有人可以帮我找一个解决方案吗?
我事先感谢大家的耐心和帮助。
更新
当我从@
file
移除$post_array
符号时,它似乎有效,但它不会作为文件发送,所以现在我真的很困惑,因为每个例子表明@
符号有效,而且它失败了!
如果我运行curl_getinfo($ch);
,如果给我这一系列信息:
array(22) {
["url"]=>
string(46) "http://portal.hoovestol.local/upload/index.php"
["content_type"]=>
NULL
["http_code"]=>
int(0)
["header_size"]=>
int(0)
["request_size"]=>
int(0)
["filetime"]=>
int(-1)
["ssl_verify_result"]=>
int(0)
["redirect_count"]=>
int(0)
["total_time"]=>
float(0.063)
["namelookup_time"]=>
float(0)
["connect_time"]=>
float(0.063)
["pretransfer_time"]=>
float(0)
["size_upload"]=>
float(0)
["size_download"]=>
float(0)
["speed_download"]=>
float(0)
["speed_upload"]=>
float(0)
["download_content_length"]=>
float(-1)
["upload_content_length"]=>
float(-1)
["starttransfer_time"]=>
float(0)
["redirect_time"]=>
float(0)
["certinfo"]=>
array(0) {
}
["redirect_url"]=>
string(0) ""
}
从它的外观来看,脚本实际上从未到达我试图登陆的目录。