-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathDImage.php
More file actions
76 lines (69 loc) · 1.98 KB
/
Copy pathDImage.php
File metadata and controls
76 lines (69 loc) · 1.98 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<?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;
}
}