本文目录一览:
- 1、PHP CURL 获取远程数据下载
- 2、PHP获取远程图片尺寸的问题
- 3、php怎么高效获取远程图片尺寸
- 4、curl获取远程图片时,如何设置本地保存路径?
- 5、PHP使用curl验证远程图片是否有效
- 6、php 用CURL 抓取图片
PHP CURL 获取远程数据下载
这样做肯定是用的你的带宽,是把文件下载到你的服务器上,然后再下载给客户端。
有两条路你可以去试试看,我没做过:一是setcookie指定域名是那个网站,然后转向:
setcookie ($cname ,$cvalue ,$expire ,$path , $host);
header('location: $url");
另外一个方法类似,好像有个P3P可以传递COOKIE,需要你自己查资料:
setcookie ($cname ,$cvalue);
header('P3P: ....');
header('location: $url");
第二个办法应该是可以的,陶宝和开心网都在用这样的技术,陶宝有许多域名,一次登录后都可以使用,就是利用P3P实现的COOKIE传递。
PHP获取远程图片尺寸的问题
如果是批量的获取尺寸,建议用curl获取图片加载到本机内存或者硬盘,然后再处理。
如果是单张的,没什么好方法。获取速度取决于网速。
php怎么高效获取远程图片尺寸
/**
* 获取远程图片的宽高和体积大小
*
* @param string $url 远程图片的链接
* @param string $type 获取远程图片资源的方式, 默认为 curl 可选 fread
* @param boolean $isGetFilesize 是否获取远程图片的体积大小, 默认false不获取, 设置为 true 时 $type 将强制为 fread
* @return false|array
*/
function myGetImageSize($url, $type = 'curl', $isGetFilesize = false)
{
// 若需要获取图片体积大小则默认使用 fread 方式
$type = $isGetFilesize ? 'fread' : $type;
if ($type == 'fread') {
// 或者使用 socket 二进制方式读取, 需要获取图片体积大小最好使用此方法
$handle = fopen($url, 'rb');
if (! $handle) return false;
// 只取头部固定长度168字节数据
$dataBlock = fread($handle, 168);
}
else {
// 据说 CURL 能缓存DNS 效率比 socket 高
$ch = curl_init($url);
// 超时设置
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
// 取前面 168 个字符 通过四张测试图读取宽高结果都没有问题,若获取不到数据可适当加大数值
curl_setopt($ch, CURLOPT_RANGE, '0-167');
// 跟踪301跳转
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
// 返回结果
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$dataBlock = curl_exec($ch);
curl_close($ch);
if (! $dataBlock) return false;
}
// 将读取的图片信息转化为图片路径并获取图片信息,经测试,这里的转化设置 jpeg 对获取png,gif的信息没有影响,无须分别设置
// 有些图片虽然可以在浏览器查看但实际已被损坏可能无法解析信息
$size = getimagesize('data://image/jpeg;base64,'. base64_encode($dataBlock));
if (empty($size)) {
return false;
}
$result['width'] = $size[0];
$result['height'] = $size[1];
// 是否获取图片体积大小
if ($isGetFilesize) {
// 获取文件数据流信息
$meta = stream_get_meta_data($handle);
// nginx 的信息保存在 headers 里,apache 则直接在 wrapper_data
$dataInfo = isset($meta['wrapper_data']['headers']) ? $meta['wrapper_data']['headers'] : $meta['wrapper_data'];
foreach ($dataInfo as $va) {
if ( preg_match('/length/iU', $va)) {
$ts = explode(':', $va);
$result['size'] = trim(array_pop($ts));
break;
}
}
}
if ($type == 'fread') fclose($handle);
return $result;
}
// 测试的图片链接
echo 'pre';
$result = myGetImageSize('', 'curl');
print_r($result);
echo 'hr /';
$result = myGetImageSize('', 'fread');
print_r($result);
echo 'hr /';
$result = myGetImageSize('', 'fread', true);
print_r($result);
echo 'hr /';
$result = myGetImageSize('', 'curl', true);
print_r($result);
echo 'hr /';
$result = myGetImageSize('', 'fread');
print_r($result);
curl获取远程图片时,如何设置本地保存路径?
设置保存路径
define('IMAGE_DIR', 'c:\\xampp\\htdocs\\scraper\\image\\');
保存图片函数。
$imageUrl = 你要的图片的url
$imageType = 你要的图片保存的格式
saveImage($imageUrl, $imageType = 'IMAGETYPE_GIF') {
if (!file_exists(IMAGE_DIR)) {
mkdir(IMAGE_DIR, 0777, true);
}
if( $imageType === IMAGETYPE_JPEG ) {
$fileExt = 'jpg';
} elseif ( $imageType === IMAGETYPE_GIF ) {
$fileExt = 'gif';
} elseif ( $imageType === IMAGETYPE_PNG ) {
$fileExt = 'png';
}
$newImageName = md5($imageUrl). '.' . $fileExt;
$image = new Image();
$image-load($imageUrl);
$image-resizeToWidth(100);
$image-save( IMAGE_DIR . $newImageName, $imageType );
return $newImageName;
}
这是我的图片类,保存前可转换格式,图片大小。
?php
class Image {
private $_image;
private $_imageFormat;
public function load($imageFile) {
$imageInfo = getImageSize($imageFile);
$this-_imageFormat = $imageInfo[2];
if( $this-_imageFormat === IMAGETYPE_JPEG ) {
$this-_image = imagecreatefromjpeg($imageFile);
} elseif( $this-_imageFormat === IMAGETYPE_GIF ) {
$this-_image = imagecreatefromgif($imageFile);
} elseif( $this-_imageFormat === IMAGETYPE_PNG ) {
$this-_image = imagecreatefrompng($imageFile);
}
}
public function save($imageFile, $_imageFormat=IMAGETYPE_JPEG, $compression=75, $permissions=null) {
if( $_imageFormat == IMAGETYPE_JPEG ) {
imagejpeg($this-_image,$imageFile,$compression);
} elseif ( $_imageFormat == IMAGETYPE_GIF ) {
imagegif($this-_image,$imageFile);
} elseif ( $_imageFormat == IMAGETYPE_PNG ) {
imagepng($this-_image,$imageFile);
}
if( $permissions != null) {
chmod($imageFile,$permissions);
}
}
public function getWidth() {
return imagesx($this-_image);
}
public function getHeight() {
return imagesy($this-_image);
}
public function resizeToHeight($height) {
$ratio = $height / $this-getHeight();
$width = $this-getWidth() * $ratio;
$this-resize($width,$height);
}
public function resizeToWidth($width) {
$ratio = $width / $this-getWidth();
$height = $this-getheight() * $ratio;
$this-resize($width,$height);
}
public function scale($scale) {
$width = $this-getWidth() * $scale/100;
$height = $this-getheight() * $scale/100;
$this-resize($width,$height);
}
private function resize($width, $height) {
$newImage = imagecreatetruecolor($width, $height);
imagecopyresampled($newImage, $this-_image, 0, 0, 0, 0, $width, $height, $this-getWidth(), $this-getHeight());
$this-_image = $newImage;
}
}
?
PHP使用curl验证远程图片是否有效
try {
$ch = curl_init();
$url = "";
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($ch);
if (curl_getinfo($ch, CURLINFO_HTTP_CODE) == 200) {
echo "正常访问";
} else {
echo "非正常访问";
}
curl_close($ch);
} catch (Exception $exception) {
var_dump($exception-getMessage());
}
php 用CURL 抓取图片
preg_match('@p\.php\?p=(.*)@Ui', $url, $url);//获取图片地址
if(isset($url[1]))
$url=$url[1];
else
$url='';
if($url):
//curl抓取图片过程
$ch = curl_init();
if (defined('CURLOPT_IPRESOLVE') defined('CURL_IPRESOLVE_V4')) {
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
}
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
$content = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
if ($info['http_code'] != 200)
$content = NULL;
if($content)//保存图片到本地
@file_put_contents ('存放地址', $content);
endif;