您的位置:

phpcurl抓取远程图片,抓取远程图片php函数

本文目录一览:

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;