Rumah pembangunan bahagian belakang tutorial php 用php实现远程图片采集到本地的方法

用php实现远程图片采集到本地的方法

Apr 03, 2017 pm 04:30 PM
php gambar jauh

今天写了一个这个功能, 拿出来跟朋友一起分享,可以获取远程图片并保存到本地,其实大家可以参考很多php管理系统都有这个功能。

第一步. 先从文章中把所有<img ...> 用正则 抠出来.

代码如下:

1

2

3

4

5

6

7

$message //文章内容

//正则(这个还不是)

$reg = &quot;/&lt;img[^&gt;]*src=\&quot;(http:\/\/(.+)\/(.+)\.(jpg|gif|bmp|bnp))\&quot;/isU&quot;;

//把抠出来的 img 地址存放到 $img_array 变量中

preg_match_all($reg, $message, $img_array, PREG_PATTERN_ORDER);

//过滤重复的图片

$img_array = array_unique($img_array[1]);

Salin selepas log masuk

第二步. 把$img_array 数组循环一下. 做图片保存和文章位置替换

代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

foreach ($img_array as $img){

//判断是否是自己网站上的 图片

if(&#39;xxx.com&#39; != get_domain($img)){// 如果这个图片不是自己服务器上的

//读取图片文件

$Gimg = new GetImage();

$Gimg-&gt;source = $img;

$Gimg-&gt;save_to = &#39;./data/temp/&#39;;

$FILE = $Gimg-&gt;download(); //图片移动到本地

//保存到相册 得到图片保存的位置

$img_path = pic_save($FILE,0,&#39;&#39;);

//文本路径替换

$message = str_replace($img, $img_path, $message);

}

}

Salin selepas log masuk

....这时候 $message 里面已经图片已经替换为自己服务器本地的地址,并且图片也保存到自己的服务器上.

代码如下:

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

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

//下面一个函数 和 类是从网络上找的.

//从url中获得域名

function get_domain($url){

$pattern = &quot;/[\w-]+\.(com|net|org|gov|cc|biz|info|cn)(\.(cn|hk))*/&quot;;

preg_match($pattern, $url, $matches);

if(count($matches) &gt; 0) {

return $matches[0];

}else{

$rs = parse_url($url);

$main_url = $rs[&quot;host&quot;];

if(!strcmp(long2ip(sprintf(&quot;%u&quot;,ip2long($main_url))),$main_url)) {

return $main_url;

}else{

$arr = explode(&quot;.&quot;,$main_url);

$count=count($arr);

$endArr = array(&quot;com&quot;,&quot;net&quot;,&quot;org&quot;,&quot;3322&quot;);//com.cn net.cn 等情况

if (in_array($arr[$count-2],$endArr)){

$domain = $arr[$count-3].&quot;.&quot;.$arr[$count-2].&quot;.&quot;.$arr[$count-1];

}else{

$domain = $arr[$count-2].&quot;.&quot;.$arr[$count-1];

}

return $domain;

}// end if(!strcmp...)

}// end if(count...)

}// end function

// 从远程吧图片载到服务器本地 的 类

class GetImage {

var $source;

var $save_to;

var $quality;

function download($method = &#39;curl&#39;) {

$info = @GetImageSize($this-&gt;source);

$mime = $info[&#39;mime&#39;];

// What sort of image?

$type = substr(strrchr($mime, &#39;/&#39;), 1);

switch ($type){

case &#39;jpeg&#39;:

$image_create_func = &#39;ImageCreateFromJPEG&#39;;

$image_save_func = &#39;ImageJPEG&#39;;

$new_image_ext = &#39;jpg&#39;;

// Best Quality: 100

$quality = isSet($this-&gt;quality) ? $this-&gt;quality : 100;

break;

case &#39;png&#39;:

$image_create_func = &#39;ImageCreateFromPNG&#39;;

$image_save_func = &#39;ImagePNG&#39;;

$new_image_ext = &#39;png&#39;;

// Compression Level: from 0 (no compression) to 9

$quality = isSet($this-&gt;quality) ? $this-&gt;quality : 0;

break;

case &#39;bmp&#39;:

$image_create_func = &#39;ImageCreateFromBMP&#39;;

$image_save_func = &#39;ImageBMP&#39;;

$new_image_ext = &#39;bmp&#39;;

break;

case &#39;gif&#39;:

$image_create_func = &#39;ImageCreateFromGIF&#39;;

$image_save_func = &#39;ImageGIF&#39;;

$new_image_ext = &#39;gif&#39;;

break;

case &#39;vnd.wap.wbmp&#39;:

$image_create_func = &#39;ImageCreateFromWBMP&#39;;

$image_save_func = &#39;ImageWBMP&#39;;

$new_image_ext = &#39;bmp&#39;;

break;

case &#39;xbm&#39;:

$image_create_func = &#39;ImageCreateFromXBM&#39;;

$image_save_func = &#39;ImageXBM&#39;;

$new_image_ext = &#39;xbm&#39;;

break;

default:

$image_create_func = &#39;ImageCreateFromJPEG&#39;;

$image_save_func = &#39;ImageJPEG&#39;;

$new_image_ext = &#39;jpg&#39;;

}

if(isSet($this-&gt;set_extension)){

$ext = strrchr($this-&gt;source, &quot;.&quot;);

$strlen = strlen($ext);

$new_name = basename(substr($this-&gt;source, 0, -$strlen)).&#39;.&#39;.$new_image_ext;

}else{

$new_name = basename($this-&gt;source);

}

$save_to = $this-&gt;save_to.&quot;/blog_insert_temp_&quot;.time().mt_rand(1,99).&quot;.&quot;.$new_image_ext;

//输出对象 组成跟$_FILE变量一样 得到后自己和平常图片上传处理一样了

$img_info[&#39;name&#39;] = basename($this-&gt;source);

$img_info[&#39;type&#39;] = $mime;

$img_info[&#39;size&#39;] = 1000;

$img_info[&#39;tmp_name&#39;] = $save_to;

$img_info[&#39;error&#39;] = 0;

if($method == &#39;curl&#39;){

$save_image = $this-&gt;LoadImageCURL($save_to);

}elseif($method == &#39;gd&#39;){

$img = $image_create_func($this-&gt;source);

if(isSet($quality)){

$save_image = $image_save_func($img, $save_to, $quality);

}else{

$save_image = $image_save_func($img, $save_to);

}

}

return $img_info;

}

function LoadImageCURL($save_to){

$ch = curl_init($this-&gt;source);

$fp = fopen($save_to, &quot;wb&quot;);

// set URL and other appropriate options

$options = array(CURLOPT_FILE =&gt; $fp,

CURLOPT_HEADER =&gt; 0,

CURLOPT_FOLLOWLOCATION =&gt; 1,

CURLOPT_TIMEOUT =&gt; 60); // 1 minute timeout (should be enough)

curl_setopt_array($ch, $options);

curl_exec($ch);

curl_close($ch);

fclose($fp);

}

}

Salin selepas log masuk

Atas ialah kandungan terperinci 用php实现远程图片采集到本地的方法. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Tag artikel panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Tarikh dan Masa CakePHP Tarikh dan Masa CakePHP Sep 10, 2024 pm 05:27 PM

Tarikh dan Masa CakePHP

Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian Dec 24, 2024 pm 04:42 PM

Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian

Muat naik Fail CakePHP Muat naik Fail CakePHP Sep 10, 2024 pm 05:27 PM

Muat naik Fail CakePHP

Penghalaan CakePHP Penghalaan CakePHP Sep 10, 2024 pm 05:25 PM

Penghalaan CakePHP

Bincangkan CakePHP Bincangkan CakePHP Sep 10, 2024 pm 05:28 PM

Bincangkan CakePHP

Panduan Ringkas CakePHP Panduan Ringkas CakePHP Sep 10, 2024 pm 05:27 PM

Panduan Ringkas CakePHP

Konfigurasi Projek CakePHP Konfigurasi Projek CakePHP Sep 10, 2024 pm 05:25 PM

Konfigurasi Projek CakePHP

Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP Dec 20, 2024 am 11:31 AM

Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP

See all articles