diff --git a/Favicon.php b/Favicon.php
index 7d2d59d..7791c9e 100644
--- a/Favicon.php
+++ b/Favicon.php
@@ -251,10 +251,10 @@ class Favicon
* FIX #1
* 对取到的HTML内容进行删除换行符的处理,避免link信息折行导致的正则匹配失败
*/
- $html = str_replace(array("\n", "\r"), '', $html);
+ $html = str_replace(array("\n", "\r"), '', $html['data']);
//匹配完整的LINK标签,再从LINK标签中获取HREF的值
- if (@preg_match('/((]+rel=.(icon|shortcut icon|alternate icon|apple-touch-icon)[^>]+>))/i', $html['data'], $match_tag)) {
+ if (@preg_match('/((]+rel=.(icon|shortcut icon|alternate icon|apple-touch-icon)[^>]+>))/i', $html, $match_tag)) {
if (isset($match_tag[1]) && $match_tag[1] && @preg_match('/href=(\'|\")(.*?)\1/i', $match_tag[1], $match_url)) {
@@ -309,18 +309,16 @@ class Favicon
/**
* 从其他api最后获取图像 -----------------------------------------------------
- *
+ * t3.gstatic.com 国内可用 t3.gstatic.cn
*/
- //if ($this->data == NULL) {
- // $thrurl='http://www.google.cn/s2/favicons?domain=';
- // $icon = file_get_contents($thrurl.$this->full_host);
- // //$this->_log_message("--图标 md5 值为".md5($icon));
- // if($icon && md5($icon)!="3ca64f83fdcf25135d87e08af65e68c9"){ //判断是否为对方 api 返回的默认图标,可通过上行 log 查看
- // $this->_log_message("--从 {$thrurl} 获取到图标");
- // $this->data = $icon;
- // }
- //}
-
+ if ($this->data == NULL) {
+ $thrurl='http://t3.gstatic.cn/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&size=128&url='.$this->full_host;
+ $icon = file_get_contents($thrurl);
+ if($icon){
+ $this->_log_message("--https://t3.gstatic.com/{$this->full_host}/favicon.ico");
+ $this->data = $icon;
+ }
+ }
if ($this->data == NULL) {
//各个方法都试过了,还是获取不到。。。
@@ -469,7 +467,7 @@ class Favicon
* @param string $url
* @param bool $isimg 是否为图片
* @param int $timeout 超时值,默认为10秒
- * @return string 成功返回获取到的内容,同时设置 $this->content,失败返回FALSE
+ * @return string|array 成功返回获取到的内容,同时设置 $this->content,失败返回FALSE
*/
private function getFile($url, $isimg = false, $timeout = 2)
{
@@ -483,6 +481,13 @@ class Favicon
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+
+ /** @var mixed 只获取500kb的数据,如果目标图片超过500kb,则丢弃 */
+ $request_headers = array('Range: bytes=0-512000'); //500 KB
+ curl_setopt( $ch, CURLOPT_FORBID_REUSE, true );
+ $request_headers[] = 'Connection: close';
+ curl_setopt( $ch, CURLOPT_HTTPHEADER, $request_headers );
+
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
//执行重定向获取
$ret = $this->curlExecFollow($ch, 2);
@@ -501,7 +506,7 @@ class Favicon
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$arr = array(
- 'status' => ($status >= 200 && $status <= 299) ? TRUE : FALSE,
+ 'status' => ($status >= 200 && $status <= 299) ? 'OK' : 'FAIL',
'data' => $ret,
'real_url' => curl_getinfo($ch, CURLINFO_EFFECTIVE_URL)
);
diff --git a/get.php b/get.php
index 4e39dd5..d516ae3 100644
--- a/get.php
+++ b/get.php
@@ -4,7 +4,7 @@
* @author 一为
* @date 2019-11-27
* @link https://www.iowen.cn
- * @version 1.1.0
+ * @version 1.2.0
*/
if( !isset($_GET['url'])){
@@ -39,43 +39,50 @@ $url = $_GET['url'];
* 格式化 URL, 并尝试读取缓存
*/
$formatUrl = $favicon->formatUrl($url);
+if($formatUrl){
+ if($expire == 0){
+ $favicon->getFavicon($formatUrl, false);
+ exit;
+ } else {
+ $defaultMD5 = md5(file_get_contents($defaultIco));
+
+ /**
+ * 2023-02-20
+ * 增加刷新缓存参数:refresh=true 如:https://域名?url=www.iowen.cn&refresh=true
+ */
+ if( !isset($_GET['refresh']) || ( isset($_GET['refresh']) && $_GET['refresh']!='true' ) ){
+ $data = Cache::get($formatUrl,$defaultMD5,$expire);
+ if ($data !== NULL) {
+ foreach ($favicon->getHeader() as $header) {
+ @header($header);
+ }
+ echo $data;
+ exit;
+ }
+ }
+
+ /**
+ * 缓存中没有指定的内容时, 重新获取内容并缓存起来
+ */
+ $content = $favicon->getFavicon($formatUrl, TRUE);
+
+ if( md5($content) == $defaultMD5 ){
+ $expire = 43200; //如果返回默认图标,设置过期时间为12小时。Cache::get 方法中需同时修改
+ }
+
+ Cache::set($formatUrl, $content, $expire);
-if($expire == 0){
- $favicon->getFavicon($formatUrl, false);
- exit;
-}
-else{
- $defaultMD5 = md5(file_get_contents($defaultIco));
-
- $data = Cache::get($formatUrl,$defaultMD5,$expire);
- if ($data !== NULL) {
foreach ($favicon->getHeader() as $header) {
@header($header);
}
- echo $data;
+
+ echo $content;
exit;
}
-
- /**
- * 缓存中没有指定的内容时, 重新获取内容并缓存起来
- */
- $content = $favicon->getFavicon($formatUrl, TRUE);
-
- if( md5($content) == $defaultMD5 ){
- $expire = 43200; //如果返回默认图标,设置过期时间为12小时。Cache::get 方法中需同时修改
- }
-
- Cache::set($formatUrl, $content, $expire);
-
- foreach ($favicon->getHeader() as $header) {
- @header($header);
- }
-
- echo $content;
- exit;
+}else{
+ return http_response_code(404);
}
-
/**
* 缓存类
*/
@@ -138,6 +145,7 @@ class Cache
$imgdata = fopen($a, "w") or die("Unable to open file!"); //w 重写 a追加
fwrite($imgdata, $value);
fclose($imgdata);
+ clearstatcache();
}
}
}