• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

通过PHPCURL模拟请求上传文件|图片。

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

现在有一个需求就是在自己的服务器上传图片到其他服务器上面,过程:客户端上传图片->存放到本地服务器->再转发到第三方服务器;

由于前端Ajax受限制,只能通过服务器做转发了。

在PHP中通过CURL模拟上传文件可以使用(PHP VERSION>=5.6使用的)  

$stream = new \CURLFile(realpath('/var/cyq/228*150.jpg'),'image/jpeg','filename');//定义文件流(第一个参数是文件路径,第二个是文件类型,第三个是post_name)

如果PHP VERSION<5.6使用 @来声明此为文件上传格式 

$stream ='@/var/cyq/228*150.jpg');//定义文件流(第一个参数是文件路径,第二个是文件类型,第三个是post_name)

$post_data = array( 'file'=>$stream );

$ch = curl_init($this->getUrl()); //初始化
curl_setopt($ch, CURLOPT_HEADER, 0); //不返回header部分
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_POSTFIELDS,$post_data);//post请求的数据
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch,CURLOPT_COOKIE,$this->getCookie());//有cookie放cookie
curl_exec($ch);

一般情况以上这种方式就可以实行文件的上传了,但是这种方式发送出去的 

请求主体内容为:

----后面的为浏览器分配的一种标准分隔符

这部分的声明大多都是一样的,区别就在于

 

所以这样的post_data是不够的
$post_data=[
'file'=> new \CURLFile(realpath('/var/cyq/228*150.jpg'),'image/jpeg','filename'),
];
需要Append多一个参数 $post_data['size']='228*150';
这样才才可以满足服务器需要的请求参数了;
new \CURLFile()可以用 curl_file_create() 替代

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
手把手教你编写一个简单的PHP模块形态的后门发布时间:2022-07-10
下一篇:
利用Http请求实现PHP异步(laravel5.4)发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap