由于最近在研究图床,看到SM的图床不错,就想着把图片传到sm上去,代码如下:
<?php
function post($url, $data) {
//模拟POST上传图片和数据
//定义Cookie存储路径必须使用绝对路径
$cookie_jar= dirname(__FILE__)."/pic.cookie"
$UserAgent = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)';
//获取Cookie,将cookie存入文
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER,1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_jar);
$content = curl_exec($ch);
curl_close($ch);
//初使化init方法
$ch = curl_init();
//指定URL
curl_setopt($ch, CURLOPT_URL, $url);
//设定请求后返回结果
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//声明使用POST方式来进行发送
curl_setopt($ch, CURLOPT_POST, 1);
//加入Cookie
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_jar);
//发送的数据
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
//忽略ssl证书
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
//忽略header头信息
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_USERAGENT, $UserAgent);
//设置超时时间
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
//发送请求
$output = curl_exec($ch);
//关闭curl
curl_close($ch);
//返回数据
return $output;
}
$post_data = array('smfile' => '@/logo.png');
//需要上传的文件
$url = 'https://sm.ms/api/upload';//sm的地址
echo post($url, $data);
?>
结果在EP主机上测试一切正常,放到宝塔主机上使用就一直报错。
研究好久发现PHP5.6及以上版本已经不能@的方法post文件需要用到 CURLFile( )这个函数,于是我改了代码,果然出现下边的样子,大功告成。
只要将
array('smfile' => '@/logo.png');
成成
array('smfile' =>new CURLFile(realpath("logo.png")));
//realpath("logo.png")获取文件真实路径
就好啦。
扫描二维码,在手机上阅读!