$val){ $header = str_replace('{' . $keyword . '}', $val, $header); } return fwrite($fp, $header); } /** * 写入结果到最终文件 * * @param array $arr_src * @param $arr_format * @param array $arr_whitelist * @return false|int */ public static function write_to_file(array $arr_src, array $arr_format, $arr_whitelist = array()){ if(count($arr_src) < 1){ return false; } $str_result = ''; $line_count = 0; $arr_written = []; foreach($arr_src as $main_domain => $arr_subdomains){ if(array_key_exists($main_domain, $arr_whitelist) && ($arr_whitelist[$main_domain] > 0)){ continue; } if(empty($main_domain)){//不匹配记录(一般是不合法域名或者未收录的后缀) continue; } $arr_subdomains = array_unique($arr_subdomains); if( (1 !== $arr_format['full_domain']) && (in_array($main_domain, $arr_subdomains) || in_array('www.' . $main_domain, $arr_subdomains)) && (!array_key_exists($main_domain, $arr_whitelist) || $arr_whitelist[$main_domain] > 0) ){ $str_result .= str_replace('{DOMAIN}', $main_domain, $arr_format['format']) . "\n"; $line_count ++; continue; } foreach($arr_subdomains as $subdomain){ if(array_key_exists($subdomain, $arr_whitelist)){ continue; } if(1 === $arr_format['full_domain']){ $str_result .= str_replace('{DOMAIN}', $subdomain, $arr_format['format']) . "\n"; $line_count ++; $arr_written[] = $subdomain; continue; } $arr_tmp_domain = explode('.', $subdomain); $tmp_domain_len = count($arr_tmp_domain); if($tmp_domain_len < 3){ $str_result .= str_replace('{DOMAIN}', $subdomain, $arr_format['format']) . "\n"; $line_count ++; $arr_written[] = $subdomain; continue; } $matched_flag = false; for($pos = 3; $pos <= $tmp_domain_len; $pos ++){ $arr_tmp = array_slice($arr_tmp_domain, -1 * $pos); $tmp = implode('.', $arr_tmp); if(array_key_exists($tmp, $arr_whitelist)){ if($arr_whitelist[$tmp] === 1){ $matched_flag = true; }else{ $matched_flag = false; $arr_written[] = $tmp; } break; }elseif(($tmp === $subdomain) || in_array($tmp, $arr_subdomains)){ if(!in_array($tmp, $arr_written)){ $str_result .= str_replace('{DOMAIN}', $tmp, $arr_format['format']) . "\n"; $line_count ++; $arr_written[] = $tmp; } $matched_flag = true; break; } } if($matched_flag){ continue; } if(!in_array($subdomain, $arr_written)){ $str_result .= str_replace('{DOMAIN}', $subdomain, $arr_format['format']) . "\n"; $line_count ++; $arr_written[] = $subdomain; } } } unset($arr_written); $fp = fopen(ROOT_DIR . $arr_format['filename'], 'w'); $write_len = self::write_conf_header($fp, $arr_format['header'], array('COUNT' => $line_count)); $write_len += fwrite($fp, $str_result); return $write_len; } }