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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
|
<?php //站點根目錄 $cfg_basedir = dirname( __FILE__ ); //停建目錄屬性 $cfg_dir_purview = '0755' ; /*Get請求遠程內容函數*/ $cookie_file = dirname( __FILE__ ). '/cookie.txt' ; //COOKIE存放地址 function pget( $url , $ref =false, $head =false){ $curl = curl_init(); // 啟動一個CURL會話 curl_setopt( $curl , CURLOPT_URL, $url ); // 要訪問的地址 curl_setopt( $curl , CURLOPT_SSL_VERIFYPEER, 0); // 對認證證書來源的檢查 curl_setopt( $curl , CURLOPT_SSL_VERIFYHOST, 1); // 從證書中檢查SSL加密算法是否存在 curl_setopt( $curl , CURLOPT_USERAGENT, $_SERVER [ 'HTTP_USER_AGENT' ]); // 模擬用戶使用的瀏覽器 curl_setopt( $curl , CURLOPT_FOLLOWLOCATION, 1); // 使用自動跳轉 if ( $ref ){ curl_setopt( $curl , CURLOPT_REFERER, $ref ); //帶來的Referer } else { curl_setopt( $curl , CURLOPT_AUTOREFERER, 1); // 自動設置Referer } curl_setopt( $curl , CURLOPT_HTTPGET, 1); // 發送一個常規的Post請求 curl_setopt( $curl , CURLOPT_COOKIEJAR, $GLOBALS [ 'cookie_file' ]); // 存放Cookie信息的文件名稱 curl_setopt( $curl , CURLOPT_COOKIEFILE, $GLOBALS [ 'cookie_file' ]); // 讀取上面所儲存的Cookie信息 curl_setopt( $curl , CURLOPT_TIMEOUT, 30); // 設置超時限制防止死循環 curl_setopt( $curl , CURLOPT_HEADER, 0); // 顯示返回的Header區域內容 curl_setopt( $curl , CURLOPT_RETURNTRANSFER, 1); // 獲取的信息以文件流的形式返回 $tmpInfo = curl_exec( $curl ); // 執行操作 if (curl_errno( $curl )) { echo 'Errno' .curl_error( $curl ); } if ( $head ){ $data [ 'head' ]=curl_getinfo( $curl );} curl_close( $curl ); // 關鍵CURL會話 $data [ 'data' ]= $tmpInfo ; return $data ; // 返回數據 } /** * 創建所有目錄 * * @param string $truepath 真實地址 * @param string $mmode 模式 * @return bool */ if ( ! function_exists( 'MkdirAll' )) { function MkdirAll( $truepath ) { global $cfg_dir_purview ; if (! file_exists ( $truepath )) { mkdir ( $truepath , $cfg_dir_purview ); chmod ( $truepath , $cfg_dir_purview ); return true; } else { return true; } } } /** * 獲得文章body里的外部資源 * * @access public * @param string $body 文檔內容 * @return string */ function GetCurContent( $body ) { global $cfg_multi_site , $cfg_basehost , $cfg_basedir , $cfg_image_dir , $arcID , $cuserLogin , $dsql ; $cfg_uploaddir = '/c' ; $basehost = "http://" . $_SERVER [ "HTTP_HOST" ]; $img_array = array (); preg_match_all( "/src=[\"|'|\s]{0,}(http:\/\/([^>]*)\.(gif|jpg|png))/isU" , $body , $img_array ); $img_array = array_unique ( $img_array [1]); $imgUrl = $cfg_uploaddir . '/' . date ( "ymd" , time()); $imgPath = $cfg_basedir . $imgUrl ; if (! is_dir ( $imgPath . '/' )) { MkdirAll( $imgPath , $GLOBALS [ 'cfg_dir_purview' ]); CloseFtp(); } $milliSecond = date ( 'His' ,time()); foreach ( $img_array as $key => $value ) { if (preg_match( "#" . $basehost . "#i" , $value )) { continue ; } if (preg_match( "#" . $basehost . "#i" , $value )) { continue ; } if (!preg_match( "#^http:\/\/#i" , $value )) { continue ; } $http =pget( $value , '$value' ,true); $itype =( $http [ 'head' ][ 'content_type' ]); if (!preg_match( "#\.(jpg|gif|png)#i" , $itype )) { if ( $itype == 'image/gif' ) { $itype = ".gif" ; } else if ( $itype == 'image/png' ) { $itype = ".png" ; } else { $itype = '.jpg' ; } } $milliSecondN = rand(1000,9999).rand(1000,9999); $value = trim( $value ); $rndFileName = $imgPath . '/' . $milliSecondN . '-' . $key . $itype ; $fileurl = $imgUrl . '/' . $milliSecondN . '-' . $key . $itype ; $tp = fopen ( $rndFileName , 'wb' ); fwrite( $tp , $http [ 'data' ]); fclose( $tp ); if ( file_exists ( $cfg_basedir . $fileurl )) { $info = '' ; $imginfos = GetImageSize ( $rndFileName , $info ); $fsize = filesize ( $rndFileName ); $body = str_replace ( $value , $fileurl , $body ); } } return $body ; } //調用方式 echo GetCurContent( $body ); |
以上就是實現遠程圖片本地化的全部代碼,希望對大家的學習有所幫助。