当前位置: 首页 > 图文教程 > 网络编程 > PHP > DISCUZ架构:misc.func.php文件分析一
| 以下为引用的内容: /** * 这个函数看着很长,其实要实现的功能很少,就是通过ip地址返回一个对应的地理位置 * @para string $ip //给定的ip,要符合点分十进制 * * @return string */ function convertip($ip) { if(!preg_match("/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/", $ip)) { return ''; } if($fd = @fopen(DISCUZ_ROOT.'./ipdata/wry.dat', 'rb')) { $ip = explode('.', $ip); $ipNum = $ip[0] * 16777216 + $ip[1] * 65536 + $ip[2] * 256 + $ip[3]; $DataBegin = fread($fd, 4); $DataEnd = fread($fd, 4); $ipbegin = implode('', unpack('L', $DataBegin)); if($ipbegin < 0) $ipbegin += pow(2, 32); $ipend = implode('', unpack('L', $DataEnd)); if($ipend < 0) $ipend += pow(2, 32); $ipAllNum = ($ipend - $ipbegin) / 7 + 1; $BeginNum = 0; $EndNum = $ipAllNum; while($ip1num > $ipNum || $ip2num < $ipNum) { $Middle= intval(($EndNum + $BeginNum) / 2); fseek($fd, $ipbegin + 7 * $Middle); $ipData1 = fread($fd, 4); if(strlen($ipData1) < 4) { fclose($fd); return '- System Error'; } $ip1num = implode('', unpack('L', $ipData1)); if($ip1num < 0) $ip1num += pow(2, 32); if($ip1num > $ipNum) { $EndNum = $Middle; continue; } $DataSeek = fread($fd, 3); if(strlen($DataSeek) < 3) { fclose($fd); return '- System Error'; } $DataSeek = implode('', unpack('L', $DataSeek.chr(0))); fseek($fd, $DataSeek); $ipData2 = fread($fd, 4); if(strlen($ipData2) < 4) { fclose($fd); return '- System Error'; } $ip2num = implode('', unpack('L', $ipData2)); if($ip2num < 0) $ip2num += pow(2, 32); if($ip2num < $ipNum) { if($Middle == $BeginNum) { fclose($fd); return '- Unknown'; } $BeginNum = $Middle; } } $ipFlag = fread($fd, 1); if($ipFlag == chr(1)) { $ipSeek = fread($fd, 3); if(strlen($ipSeek) < 3) { fclose($fd); return '- System Error'; } $ipSeek = implode('', unpack('L', $ipSeek.chr(0))); fseek($fd, $ipSeek); $ipFlag = fread($fd, 1); } if($ipFlag == chr(2)) { $AddrSeek = fread($fd, 3); if(strlen($AddrSeek) < 3) { fclose($fd); return '- System Error'; } $ipFlag = fread($fd, 1); if($ipFlag == chr(2)) { $AddrSeek2 = fread($fd, 3); if(strlen($AddrSeek2) < 3) { fclose($fd); return '- System Error'; } $AddrSeek2 = implode('', unpack('L', $AddrSeek2.chr(0))); fseek($fd, $AddrSeek2); } else { fseek($fd, -1, SEEK_CUR); } while(($char = fread($fd, 1)) != chr(0)) $ipAddr2 .= $char; $AddrSeek = implode('', unpack('L', $AddrSeek.chr(0))); fseek($fd, $AddrSeek); while(($char = fread($fd, 1)) != chr(0)) $ipAddr1 .= $char; } else { fseek($fd, -1, SEEK_CUR); while(($char = fread($fd, 1)) != chr(0)) $ipAddr1 .= $char; $ipFlag = fread($fd, 1); if($ipFlag == chr(2)) { $AddrSeek2 = fread($fd, 3); if(strlen($AddrSeek2) < 3) { fclose($fd); return '- System Error'; } $AddrSeek2 = implode('', unpack('L', $AddrSeek2.chr(0))); fseek($fd, $AddrSeek2); } else { fseek($fd, -1, SEEK_CUR); } while(($char = fread($fd, 1)) != chr(0)) $ipAddr2 .= $char; } fclose($fd); if(preg_match('/http/i', $ipAddr2)) { $ipAddr2 = ''; } $ipaddr = "$ipAddr1 $ipAddr2"; $ipaddr = preg_replace('/CZ88\.NET/is', '', $ipaddr); $ipaddr = preg_replace('/^\s*/is', '', $ipaddr); $ipaddr = preg_replace('/\s*$/is', '', $ipaddr); if(preg_match('/http/i', $ipaddr) || $ipaddr == '') { $ipaddr = '- Unknown'; } return '- '.$ipaddr; } else { $datadir = DISCUZ_ROOT.'./ipdata/'; $ip_detail = explode('.', $ip); if(file_exists($datadir.$ip_detail[0].'.txt')) { $ip_fdata = @fopen($datadir.$ip_detail[0].'.txt', 'r'); } else { if(!($ip_fdata = @fopen($datadir.'0.txt', 'r'))) { return '- Invalid IP data file'; } } for($i = 0; $i <= 3; $i++) { $ip_detail[$i] = sprintf('%03d', $ip_detail[$i]); } $ip = join('.', $ip_detail); do { $ip_data = fgets($ip_fdata, 200); $ip_data_detail = explode('|', $ip_data); if($ip >= $ip_data_detail[0] && $ip <= $ip_data_detail[1]) { fclose($ip_fdata); return '- '.$ip_data_detail[2].$ip_data_detail[3]; } } while(!feof($ip_fdata)); fclose($ip_fdata); return '- UNKNOWN'; } } |
| 以下为引用的内容: /** * 目前发现这个函数在两个地方用到,search.php和digest.php,这个函数的用处是把从数据库中得到的帖子处理一下,然后给前端显示。 * @para array $thread //从数据库中取出的帖子原始数据 * * @return array */ function procthread($thread) { global $dateformat, $timeformat, $timeoffset, $ppp, $colorarray; if(empty($colorarray)) { $colorarray = array('', 'red', 'orange', 'yellow', 'green', 'cyan', 'blue', 'purple', 'gray'); } $thread['forumname'] = $GLOBALS['_DCACHE']['forums'][$thread['fid']]['name']; $thread['dateline'] = gmdate($dateformat, $thread['dateline'] + $timeoffset * 3600); $thread['lastpost'] = gmdate("$dateformat $timeformat", $thread['lastpost'] + $timeoffset * 3600); $thread['lastposterenc'] = rawurlencode($thread['lastposter']); if($thread['replies'] > $thread['views']) { $thread['views'] = $thread['replies']; } $postsnum = $thread['replies'] + 1; $pagelinks = ''; if($postsnum > $ppp) { $posts = $postsnum; $topicpages = ceil($posts / $ppp); for($i = 1; $i <= $topicpages; $i++) { $pagelinks .= '<a href="viewthread.php?tid='.$thread['tid'].'&page='.$i.'" target="_blank">'.$i.'</a> '; if($i == 6) { $i = $topicpages + 1; } } if($topicpages > 6) { $pagelinks .= ' .. <a href="viewthread.php?tid='.$thread['tid'].'&page='.$topicpages.'" target="_blank">'.$topicpages.'</a> '; } $thread['multipage'] = ' ( <img src="'.IMGDIR.'/multipage.gif" class="absmiddle" border="0" alt="" /> '.$pagelinks.')'; } else { $thread['multipage'] = ''; } if($thread['highlight']) { $string = sprintf('%02d', $thread['highlight']); $stylestr = sprintf('%03b', $string[0]); $thread['highlight'] = 'style="'; $thread['highlight'] .= $stylestr[0] ? 'font-weight: bold;' : ''; $thread['highlight'] .= $stylestr[1] ? 'font-style: italic;' : ''; $thread['highlight'] .= $stylestr[2] ? 'text-decoration: underline;' : ''; $thread['highlight'] .= $string[1] ? 'color: '.$colorarray[$string[1]] : ''; $thread['highlight'] .= '"'; } else { $thread['highlight'] = ''; } if($thread['attachment']) { require_once DISCUZ_ROOT.'./include/attachment.func.php'; $thread['attachment'] = attachtype($thread['attachment']).' '; } else { $thread['attachment'] = ''; } return $thread; } |
评论 (0) All