You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
2.0 KiB
76 lines
2.0 KiB
<?php
|
|
namespace QL\Ext;
|
|
|
|
/**
|
|
* @Author: Jaeger <hj.q@qq.com>
|
|
* @Date: 2015-07-15 23:27:52
|
|
* @Last Modified by: Jaeger
|
|
* @Last Modified time: 2016-07-09 00:45:08
|
|
* @version 1.1.1
|
|
* 图片下载扩展
|
|
*/
|
|
|
|
use phpQuery;
|
|
|
|
class DImage extends AQuery
|
|
{
|
|
private $attr;
|
|
|
|
public function run(array $args)
|
|
{
|
|
$args = array_merge(array(
|
|
'image_path' => '/images',
|
|
'base_url' => '',
|
|
'attr' => array('src'),
|
|
'callback' => null
|
|
),$args);
|
|
$doc = phpQuery::newDocumentHTML($args['content']);
|
|
$http = $this->getInstance('QL\Ext\Lib\Http');
|
|
$imgs = pq($doc)->find('img');
|
|
foreach ($imgs as $img) {
|
|
$src = $this->getSrc($img,$args);
|
|
$localSrc = rtrim($args['image_path'],'/').'/'.$this->makeFileName($src);
|
|
$savePath = rtrim($args['www_root'],'/').'/'.ltrim($localSrc,'/');
|
|
$this->mkdirs(dirname($savePath));
|
|
$stream = $http->get($src);
|
|
file_put_contents($savePath,$stream);
|
|
pq($img)->attr($this->attr,$localSrc);
|
|
$args['callback'] && $args['callback'](pq($img));
|
|
}
|
|
return $doc->htmlOuter();
|
|
}
|
|
|
|
function mkdirs($dir)
|
|
{
|
|
if(!is_dir($dir))
|
|
{
|
|
if(!$this->mkdirs(dirname($dir))){
|
|
return false;
|
|
}
|
|
if(!mkdir($dir,0777)){
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public function makeFileName($src)
|
|
{
|
|
return md5($src).'.'.pathinfo($src, PATHINFO_EXTENSION);
|
|
}
|
|
|
|
public function getSrc($img,$args)
|
|
{
|
|
$src = $args['base_url'];
|
|
is_string($args['attr']) && $args['attr'] = array($args['attr']);
|
|
foreach ($args['attr'] as $attr) {
|
|
$val = pq($img)->attr($attr);
|
|
if(!empty($val)){
|
|
$this->attr = $attr;
|
|
$src .= $val;
|
|
break;
|
|
}
|
|
}
|
|
return $src;
|
|
}
|
|
} |