本文实例讲述了PHP使用CURL实现下载文件功能。分享给大家供大家参考,具体如下:
如果使用CURL下载从微信手机端上传的图片?参考下面代码
/**
* CURL下载文件 成功返回文件名,失败返回false
* @param $url
* @param string $savePath
* @return bool|string
* @author Zou Yiliang
*/
public function downFile($url, $savePath = './uploads')
{
//$url = 'http://www.baidu.com/img/bdlogo.png';
/*
HTTP/1.1 200 OK
Connection: close
Content-Type: image/jpeg
Content-disposition: attachment; filename="cK4q4fLsp7YOlaqxluDOafB.jpg"
Date: Sun, 18 Jan 2015 16:56:32 GMT
Cache-Control: no-cache, must-revalidate
Content-Length: 963704
*/
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, TRUE); //需要response header
curl_setopt($ch, CURLOPT_NOBODY, FALSE); //需要response body
$response = curl_exec($ch);
//分离header与body
$header = '';
$body = '';
if (curl_getinfo($ch, CURLINFO_HTTP_CODE) == '200') {
$headerSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE); //头信息size
$header = substr($response, 0, $headerSize);
$body = substr($response, $headerSize);
}
curl_close($ch);
//文件名
$arr = array();
if (preg_match('/filename="(.*?)"/', $header, $arr)) {
$file = date('Ym') . '/' . $arr[1];
$fullName = rtrim($savePath, '/') . '/' . $file;
//创建目录并设置权限
$basePath = dirname($fullName);
if (!file_exists($basePath)) {
@mkdir($basePath, 0777, true);
@chmod($basePath, 0777);
}
if (file_put_contents($fullName, $body)) {
return $file;
}
}
return false;
}
附:常用CURL选项说明
CURLOPT_AUTOREFERER
当根据Location:重定向时,自动设置header中的Referer:信息。
CURLOPT_BINARYTRANSFER
在启用CURLOPT_RETURNTRANSFER的时候,返回原生的(Raw)输出。
CURLOPT_COOKIESESSION
启用时curl会仅仅传递一个session cookie,忽略其他的cookie,默认状况下cURL会将所有的cookie返回给服务端。session cookie是指那些用来判断服务器端的session是否有效而存在的cookie。
CURLOPT_CRLF
启用时将Unix的换行符转换成回车换行符。
CURLOPT_DNS_USE_GLOBAL_CACHE
启用时会启用一个全局的DNS缓存,此项为线程安全的,并且默认启用。
CURLOPT_FAILONERROR
显示HTTP状态码,默认行为是忽略编号小于等于400的HTTP信息。
CURLOPT_FILETIME
启用时会尝试修改远程文档中的信息。结果信息会通过 curl_getinfo()函数的CURLINFO_FILETIME选项返回。curl_getinfo().
CURLOPT_FOLLOWLOCATION
