php curl抓取网页指定内容(param下载未知文件$=string$url远程图片)
优采云 发布时间: 2021-10-06 14:01php curl抓取网页指定内容(param下载未知文件$=string$url远程图片)
适用场景:
1.下载未知文件
$img1 = "";
$img2 = "";
以上均为图翻。打开浏览器可以看到是图片,但是从URL看不到。上图来自微信。如果你想把图片拉到自己的服务器上,可以使用下面的方法。
/**
* 远程下载图片文件
* @param string $url [远程图片的URL]
* @param string $path [要保存的路径]
* @return string [保存后返回获取文件路径]
*/
function downloadImageFromUrl($url, $path = "./download/images/") {
// 因为不知道最后接受到的文件是什么格式,先建立一个临时文件,用于保存
$tmpFile = tempnam(sys_get_temp_dir(), 'image');
# 文件下载 BEGIN #
// 打开临时文件,用于写入(w),b二进制文件
$resource = fopen($tmpFile, 'wb');
// 初始化curl
$curl = curl_init($url);
// 设置输出文件为刚打开的
curl_setopt($curl, CURLOPT_FILE, $resource);
// 不需要头文件
curl_setopt($curl, CURLOPT_HEADER, 0);
// 执行
curl_exec($curl);
// 关闭curl
curl_close($curl);
// 关闭文件
fclose($resource);
# 文件下载 END #
// 获取文件类型
if (function_exists('exif_imagetype')) {
// 读取一个图像的第一个字节并检查其签名(这里需要打开mbstring及php_exif)
$fileType = exif_imagetype($tmpFile);
} else {
// 获取文件大小,里面第二个参数是文件类型 (这里后缀可以直接通过getimagesize($url)来获取,但是很慢)
$fileInfo = getimagesize($tmpFile);
$fileType = $fileInfo[2];
}
// 根据文件类型获取后缀名
$extension = image_type_to_extension($fileType);
// 计算指定文件的 MD5 散列值,作为保存的文件名,重复下载同一个文件不会产生重复保存,相同的文件散列值相同
$md5FileName = md5_file($tmpFile);
// 最终保存的文件
$returnFile = $path . $md5FileName . $extension;
// 检查传过来的路径是否存在,不存在就创建
if (!is_dir($path)) {
mkdir($path, 0777, true);
}
// 复制临时文件到最终保存的文件中
copy($tmpFile, $returnFile);
// 释放临时文件
@unlink($tmpFile);
// 返回保存的文件路径
return $returnFile;
}
以上功能仅适用于下载图片文件,修改其他类型即可实现。
这种方法下载速度很快。