最近公司需求在后台管理公司的文件素材,要用到新增永久素材,看了下文档,简单粗暴。导致出现大量的40113和41005问题
网上找了很多资料,都说是curl的问题,实际上是数据结构的问题,我使用旧版本的curl上传一点毛病都没有。
我的php版本是7.2,直接上代码
//tmp_name 文件的绝对路径
//type 文件类型
//name 文件名称
$data= ['media'=> new \CURLFile($file->getInfo('tmp_name'), $file->getInfo('type'), $file->getInfo('name'))];
echo self::httpsRequest($this->upload, $data);
private function httpsRequest($url, $data = null,$time_out=60,$out_level="s",$headers=array())
{
$curl = curl_init();
curl_setopt($curl, CURLOPT_NOSIGNAL, 1);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
if (!empty($data)){
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
}
if($out_level=="s")
{
//超时以秒设置
curl_setopt($curl, CURLOPT_TIMEOUT,$time_out);//设置超时时间
}elseif ($out_level=="ms")
{
curl_setopt($curl, CURLOPT_TIMEOUT_MS,$time_out); //超时毫秒,curl 7.16.2中被加入。从PHP 5.2.3起可使用
}
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
if($headers)
{
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);//如果有header头 就发送header头信息
}
$output = curl_exec($curl);
curl_close($curl);
return $output;
}
data打印出来的数据结构如下
["media"] => object(CURLFile)#11 (3) {
["name"] => string(53) "C:\Users\Administrator\AppData\Local\Temp\phpBDFD.tmp"
["mime"] => string(10) "image/jpeg"
["postname"] => string(13) "封面图.jpg"
}