php curl上传文件,问题在:new CurlFile _OR_ realpath _OR_ curl_file_create

时间:2019-05-31 13:08:34

标签: php file curl upload

我想要发送带有input:file的表单来发送信息并上传一些(2到10个)文件。当表单提交信息发送到主主机(form:action)时,我对数据做了一些处理,我想将发送文件上传到另一主机而不在主主机中上传,因此我研究并找到了CURL方式来为一个PHP文件发送此部分在其他主机上并在该主机上上传文件,我资助了3种发送文件的方式:(我用于检测所有发送文件,用户$ i用于索引并在发送之前放入数组)

1:只使用真实路径: '@'.realpath($_FILES['attach']['tmp_name'][$i]);

2:使用文件创建: curl_file_create(realpath($_FILES['attach']['tmp_name'][$i]),mime_content_type($_FILES['attach']['tmp_name'][$i]),basename($_FILES['attach']['tmp_name'][$i]));

3:使用CurlFile: new CurlFile(realpath($_FILES['attach']['tmp_name'][$i]),mime_content_type($_FILES['attach']['tmp_name'][$i]),basename($_FILES['attach']['tmp_name'][$i]));

但是它不起作用并且销毁了我要发送的文件,因为我在另一台服务器上使用此代码来测试其工作原理,但是它不起作用

此代码在另一台服务器(CURL的目标)中:

for($i=0;$i<count($_FILES['attachment']['tmp_name']);$i++){
$tmp_name=$_FILES['attachment']['tmp_name'][$i];
$name=$_FILES['attachment']['name'][$i];
$size=$_FILES['attachment']['size'][$i];
$EXTENSION=pathinfo($_FILES['attachment']['tmp_name'][$i],PATHINFO_EXTENSION);
/*uploading files and insert this information to database ...*/
}

但是我用三种方式说,扩展名是“ tmp”,不是我发送文件的真正扩展名;那么我该如何解决呢?

方式1:  for($i=0;$i<count($_FILES['attachment']['tmp_name']);$i++){ $PostItems['attachment['.$i.']']=new CurlFile(realpath($_FILES['attachment']['tmp_name'][$i]),mime_content_type($_FILES['attachment']['tmp_name'][$i]),basename($_FILES['attachment']['tmp_name'][$i])); }

方式2: for($i=0;$i<count($_FILES['attachment']['tmp_name']);$i++){ $PostItems['attachment['.$i.']']=curl_file_create($_FILES['attachment']['tmp_name'][$i]),mime_content_type($_FILES['attachment']['tmp_name'][$i]),basename($_FILES['attachment']['tmp_name'][$i])); }

方式3: for($i=0;$i<count($_FILES['attachment']['tmp_name']);$i++){ $PostItems['attachment['.$i.']']='@'.realpath($_FILES['attachment']['tmp_name'][$i]); }

$ch=curl_init();curl_setopt($ch,CURLOPT_URL,$TargetURL);
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_HEADER,0);
curl_setopt($ch,CURLOPT_VERBOSE,0);
curl_setopt($ch,CURLOPT_POSTFIELDS,$PostItems);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
$result=curl_exec($ch);curl_close($ch);
echo $result;

我希望在另一台服务器(curl的目标)中,我从发送文件中获取信息,但在所有方面,文件的扩展名均为“ tmp”,文件名均为“ php1234.tmp”,而不是真实的文件名

0 个答案:

没有答案