PHP Curl上传,按数组中设置的顺序发布值

PHP Curl上传,按数组中设置的顺序发布值,php,curl,post,upload,Php,Curl,Post,Upload,我无法将带有cURL的文件上载到远程服务器。 只有当POST变量顺序正确时,远程服务器才接受该文件。 在我的例子中:sid,cmd,uploadfile 我按照这个顺序用一个简单的HTML上传表单进行了测试,一切正常。但是如果我替换输入字段的顺序,比如:cmd、sid、uploadfile 它拒绝我的上传 这是我的cURL代码,它没有按照我在数组中设置的顺序发送变量。 如何强制cURL按照设置变量的相同顺序发布 $file = "/var/www/html/dl/big.mp4"; $targ

我无法将带有cURL的文件上载到远程服务器。 只有当POST变量顺序正确时,远程服务器才接受该文件。 在我的例子中:sid,cmd,uploadfile 我按照这个顺序用一个简单的HTML上传表单进行了测试,一切正常。但是如果我替换输入字段的顺序,比如:cmd、sid、uploadfile 它拒绝我的上传

这是我的cURL代码,它没有按照我在数组中设置的顺序发送变量。 如何强制cURL按照设置变量的相同顺序发布

$file = "/var/www/html/dl/big.mp4";

$target_url = 'http://upload.site/uploadpage';
$file_name_with_full_path = realpath($file);
$post = array('sid' => 'H1nbWKcdYP7eS7DzJk0Z6BjGaC842vPO', 'cmd' => 'uploadVideoFiles', 'uploadfile'=>'@'.$file_name_with_full_path);

$ch = curl_init();
$browser = 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0';
curl_setopt($ch, CURLOPT_USERAGENT, $browser);
curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false);
curl_setopt($ch, CURLOPT_URL, $target_url);
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,0);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(                                                                          
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Encoding: gzip, deflate',
'Accept-Language: en-US,en;q=0.5',
'Cache-Control: max-age=0',
'Connection: keep-alive',
'Host: upload.sitehost',
    )                                                                 
);    
$result=curl_exec($ch);
curl_close ($ch);
echo $result;
这是关于
CURLOPT_POSTFIELDS

此参数可以作为urlencoded字符串(如“para1=val1¶2=val2&…”)传递,也可以作为以字段名为键、字段数据为值的数组传递

因此,请尝试使用:


我解决了问题,这是我的错,cmd没有

'cmd' => 'uploadVideoFiles'
它是:

'cmd' => 'uploadVideoFile'

我已经尝试了http_build_query()和urlencoded curlop_postfields。通过打印curl_exec($ch),我得到一个响应1;但是我需要这样一个JSON响应:
“response”:{“code”:0,“vcode”:“u354drowneizud2x”}
如果post-order不是sid,cmd,uploadfile,那么响应是
{“response”:{“code”:2}
我测试了你的代码,仍然给我结果:1,可能没问题,但我需要JSON响应,这似乎不太可能。可能是缓存在您这边,或者服务器没有返回您认为的内容。无论如何,感谢您创建了curl文件。我现在用这种方法。旧的已经被弃用了。不需要感谢,但是投票表决会很好!很乐意帮忙。
'cmd' => 'uploadVideoFiles'
'cmd' => 'uploadVideoFile'