<?php 
#
# HLstatsX - Real-time player and clan rankings and statistics for Half-Life 2
# http://www.hlstatsx.com/
# Copyright (C) 2006 Tobias Oetzel ([email protected])
#
# HlstatsX is an enhanced version of HLstats made by Simon Garner
# HLstats - Real-time player and clan rankings and statistics for Half-Life
# http://sourceforge.net/projects/hlstats/
# Copyright (C) 2001  Simon Garner
#             
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
#
# Originally idea by Tankster
#  require("config.php");
 
    // Allows HLstats to work with register_globals Off
    if ( function_exists('ini_get') ) {
        $globals = ini_get('register_globals');
    } else {
        $globals = get_cfg_var('register_globals');
    }
    if ($globals != 1) {
        @extract($_SERVER, EXTR_SKIP);
        @extract($_COOKIE, EXTR_SKIP);
        @extract($_POST, EXTR_SKIP);
        @extract($_GET, EXTR_SKIP);
        @extract($_ENV, EXTR_SKIP);
    }    // Check PHP configuration    if (version_compare(phpversion(), "4.1.0", "<"))
    {
        error("HLstats requires PHP version 4.1.0 or newer (you are running PHP version " . phpversion() . ").");
    }    if (!get_magic_quotes_gpc())
    {
        error("HLstats requires <b>magic_quotes_gpc</b> to be <i>enabled</i>. Check your php.ini or refer to the PHP manual for more information.");
    }    if (get_magic_quotes_runtime())
    {
        error("HLstats requires <b>magic_quotes_runtime</b> to be <i>disabled</i>. Check your php.ini or refer to the PHP manual for more information.");
    }    // this doesn't work with php 4.0.3+
    /*if (!ini_get("track_vars"))
    {
        error("HLstats requires <b>track_vars</b> to be <i>enabled</i>. Check your php.ini or refer to the PHP manual for more information.");
    }*/    error_reporting(E_ALL ^ E_NOTICE);
  // Test if flags exists
  function flag_exists($flag, $default="0.gif")  {
    global $g_options;
    
    if ($flag == $default)
      return $flag;
      
    $url = $g_options["imgdir"] .  "/flags/". $flag;
    if ($g_options["imgpath"])
      $path = $g_options["imgpath"] . "/flags/".$flag;
    else {
      // figure out absolute path of image
      if (!ereg("^/", $g_options["imgdir"]))  {
         ereg("(.+)/[^/]+$", $_SERVER["SCRIPT_NAME"], $regs);
         $path = $regs[1] . "/" . $url;
      } else
        $path = $url;
      $path = $_SERVER["DOCUMENT_ROOT"] . $path;
    }
    
    if (file_exists($path))
      return $flag;  
    else
      return $default; 
  }    function f_num($number) {
    if (($number >= 10) &&($number < 20))
      return $number."th";
    else    {
      switch ($number % 10) {
        case 1:
          return $number."st";
          break;
        case 2:
          return $number."nd";
          break;
        case 3:
          return $number."rd";
          break;
        default:
          return $number."th";
          break;
      }
    }
  }  ///
  /// Classes
  ///  // Load database classes
  require(INCLUDE_PATH . "/db.inc");
  // array getOptions (void)
  //
  // Retrieves HLstats option and style settings from the database.
  //  function getOptions()
  {
    global $db;    $result  = $db->query("SELECT keyname, value FROM hlstats_Options");
    $numrows = $db->num_rows($result);    if ($numrows)
    {
        while ($rowdata = $db->fetch_row($result))
        {
            $options[$rowdata[0]] = $rowdata[1];
        }
        return $options;
    }
    else
    {
        error("Warning: Could not find any options in table " .
            "<b>hlstats_Options</b>, database <b>" . DB_NAME . "</b>. Check HLstats configuration.");
        return array();
    }
  }
    
  $web_dir = IMAGE_PATH_URL;
  
  if (file_exists(IMAGE_PATH."/sig_".$player_id.".png")) {
    $file_timestamp = filemtime(IMAGE_PATH."/sig_".$player_id.".png");
    if ($file_timestamp + IMAGE_UPDATE_INTERVAL > time()) {
      if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
        $browser_timestamp = strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']);
        if ($browser_timestamp + IMAGE_UPDATE_INTERVAL > time()) {
          header('HTTP/1.0 304 Not Modified');
          exit; 
        }
      }          
      $mod_date = date('D, d M Y H:i:s \G\M\T', $file_timestamp);
      header('Last-Modified:'.$mod_date);
      header("Location: ".$web_dir."/hlstatsimg/progress/sig_".$player_id.".png");
      exit;
    }  
  }     ////
  //// Initialization
  ////  define("VERSION", "1.01");  $db_classname = "DB_" . DB_TYPE;
  $db = new $db_classname;  $g_options = getOptions();
  if (!$g_options["scripturl"])
    $g_options["scripturl"] = $PHP_SELF;
    
  $g_options["scripturl"] = str_replace("/status.php", "", $g_options["scripturl"]);  ////
  //// Main
  ////  $player_id = 0;  
  if ((isset($_GET['player_id'])) && (is_numeric($_GET['player_id'])))
    $player_id = $_GET['player_id'];
  $show_flags = 1;  
  if ((isset($_GET['show_flags'])) && (is_numeric($_GET['show_flags'])))
    $show_flags = $_GET['show_flags'];
    

解决方案 »

  1.   

    $background = 1;  
      if ((isset($_GET['background'])) && ( (($_GET['background'] > 0) && ($_GET['background'] < 11)) || ($_GET['background']=="random")) )
        $background = $_GET['background'];
        
      if ($background == "random")
        $background = rand(1,10);
      $hlx_sig = "hlx_sig".$background.".png";
        
      switch ($background) {
        case 1:   $caption_color = array("red" => 0, "green" => 0, "blue" => 255);
                  $link_color = array("red" => 0, "green" => 155, "blue" => 0);
                  $color = array("red" => 0, "green" => 0, "blue" => 0);
                  break;
        case 2:   $caption_color = array("red" => 147, "green" => 23, "blue" => 18);
                  $link_color = array("red" => 147, "green" => 23, "blue" => 18);
                  $color = array("red" => 0, "green" => 47, "blue" => 34);
                  break;
        case 3:   $caption_color = array("red" => 150, "green" => 180, "blue" => 99);
                  $link_color = array("red" => 150, "green" => 180, "blue" => 99);
                  $color = array("red" => 255, "green" => 255, "blue" => 255);
                  break;
        case 4:   $caption_color = array("red" => 255, "green" => 203, "blue" => 4);
                  $link_color = array("red" => 255, "green" => 203, "blue" => 4);
                  $color = array("red" => 255, "green" => 255, "blue" => 255);
                  break;
        case 5:   $caption_color = array("red" => 255, "green" => 255, "blue" => 255);
                  $link_color = array("red" => 122, "green" => 122, "blue" => 122);
                  $color = array("red" => 0, "green" => 0, "blue" => 0);
                  break;
        case 6:   $caption_color = array("red" => 103, "green" => 103, "blue" => 103);
                  $link_color = array("red" => 0, "green" => 0, "blue" => 0);
                  $color = array("red" => 255, "green" => 255, "blue" => 255);
                  break;
        case 7:   $caption_color = array("red" => 255, "green" => 255, "blue" => 255);
                  $link_color = array("red" => 100, "green" => 100, "blue" => 100);
                  $color = array("red" => 196, "green" => 36, "blue" => 2);
                  break;
        case 8:   $caption_color = array("red" => 255, "green" => 255, "blue" => 255);
                  $link_color = array("red" => 255, "green" => 255, "blue" => 255);
                  $color = array("red" => 255, "green" => 255, "blue" => 255);
                  break;
        case 9:   $caption_color = array("red" => 255, "green" => 255, "blue" => 255);
                  $link_color = array("red" => 0, "green" => 0, "blue" => 0);
                  $color = array("red" => 144, "green" => 106, "blue" => 95);
                  break;
        case 10:  $caption_color = array("red" => 255, "green" => 255, "blue" => 255);
                  $link_color = array("red" => 39, "green" => 71, "blue" => 94);
                  $color = array("red" => 255, "green" => 255, "blue" => 255);
                  break;
        default:  $caption_color = array("red" => 0, "green" => 0, "blue" => 255);
                  $link_color = array("red" => 0, "green" => 155, "blue" => 0);
                  $color = array("red" => 0, "green" => 0, "blue" => 0);
                  break;
      }       
      /** 
        * Convert colors Usage:  color::hex2rgb("FFFFFF")
        * 
        * @author      Tim Johannessen <[email protected]>
        * @version    1.0.1
      */
      function hex2rgb($hexVal = "") { 
        $hexVal = eregi_replace("[^a-fA-F0-9]", "", $hexVal); 
        if (strlen($hexVal) != 6) { return "ERR: Incorrect colorcode, expecting 6 chars (a-f, 0-9)"; } 
        $arrTmp = explode(" ", chunk_split($hexVal, 2, " ")); 
        $arrTmp = array_map("hexdec", $arrTmp); 
        return array("red" => $arrTmp[0], "green" => $arrTmp[1], "blue" => $arrTmp[2]); 
      } 
      if ((isset($_GET['color'])) && (is_string($_GET['color'])))
        $color = hex2rgb($_GET['color']);
      if ((isset($_GET['caption_color'])) && (is_string($_GET['caption_color'])))
        $caption_color = hex2rgb($_GET['caption_color']);
      if ((isset($_GET['link_color'])) && (is_string($_GET['link_color'])))
        $link_color = hex2rgb($_GET['link_color']);
      
      if ($player_id > 0)  {
        $db->query("SELECT
                      playerId, 
                      game, 
                      FROM_UNIXTIME((last_event), '%a %D %b %k:%H') as lastevent, 
                      connection_time,
                      last_skill_change,
                      lastName,
                      country,
                      flag,
                      kills, 
                      deaths, 
                      suicides, 
                      skill, 
                      shots, 
                      hits, 
                      headshots, IFNULL(ROUND(headshots/kills * 100), '-') AS hpk, 
                      IFNULL(kills/deaths, '-') AS kpd, 
                      IFNULL(ROUND((hits / shots * 100), 1), 0.0) AS acc, 
                      IF(".MINACTIVITY." > (UNIX_TIMESTAMP() - last_event), ((100/".MINACTIVITY.") * (".MINACTIVITY." - (UNIX_TIMESTAMP() - last_event))), -1) as activity, 
                      hideranking 
                    FROM 
                      hlstats_Players 
                    WHERE 
                      playerId='$player_id'");
        if ($db->num_rows() != 1)
          error("No such player '$player'.");
            
        $playerdata = $db->fetch_array();
        $db->free_result();
        
        $pl_name = $playerdata["lastName"];
        if (strlen($pl_name) > 30)
          $pl_shortname = substr($pl_name, 0, 27) . "...";
        else
          $pl_shortname = $pl_name;
    //    $pl_name      = htmlentities($pl_name, ENT_COMPAT, "UTF-8");
    //    $pl_shortname = htmlentities($pl_shortname, ENT_COMPAT, "UTF-8");
        $pl_urlname   = urlencode($playerdata["lastName"]);
        
        $db->query("
                    SELECT
                           COUNT(*) as count
                    FROM
                           hlstats_Players
                    WHERE
                           game='".$playerdata['game']."'");
        $pl_count = $db->fetch_array();
        $db->free_result();
                            
        
        
        if (($playerdata['activity'] > 0) && ($playerdata['hideranking'] == 0))
      

  2.   

    {            
           $db->query("
                        SELECT
                              COUNT(*)
                        FROM
                              hlstats_Players
                        WHERE
                              game='".$playerdata['game']."' 
                              AND skill>'".$playerdata['skill']."' 
                              AND hideranking = 0
                              AND kills >= 1
                              AND IF(".MINACTIVITY." > (UNIX_TIMESTAMP() - last_event), UNIX_TIMESTAMP() - last_event, -1) >= 0
                      ");
           list($rank) = $db->fetch_row();
           $rank++;       $result = $db->query("
                                 SELECT
                                       playerId,
                                       IFNULL(kills / deaths, '-') AS kpd
                                 FROM
                                       hlstats_Players
                                 WHERE
                                       game='".$playerdata['game']."' 
                                       AND skill='".$playerdata['skill']."' 
                                       AND hideranking = 0
                                       AND kills >= 1
                                       AND IF(".MINACTIVITY." > (UNIX_TIMESTAMP() - last_event), UNIX_TIMESTAMP() - last_event, -1) >= 0
                                       ORDER BY kpd DESC, lastName ASC
                               ");
           while ($rowdata = $db->fetch_array($result))  {
             if ($rowdata['playerId'] == $playerdata['playerId'])
               break;
             $rank++;
           }    
        } else {
          if ($playerdata['hideranking'] == 1)
            $rank = "Hidden";
          elseif ($playerdata['hideranking'] == 2)
            $rank = "Cheater";
          else                
            $rank = "Not active";
        }      
        
        if ($playerdata['activity'] == -1)
          $playerdata['activity'] = 0;
          
        $skill_change = "0";
        if ($playerdata['last_skill_change'] > 0)
          $skill_change = $playerdata['last_skill_change'];
        else if ($playerdata['last_skill_change'] < 0)
          $skill_change = $playerdata['last_skill_change'];  
        
        
        $image         = imagecreate(400, 75);
        $white         = imagecolorallocate($image, 255, 255, 255); 
        $bgray         = imagecolorallocate($image, 192, 192, 192); 
        $yellow        = imagecolorallocate($image, 255, 255,   0); 
        $black         = imagecolorallocate($image,   0,   0,   0); 
        $red           = imagecolorallocate($image, 255,   0,   0); 
        $green         = imagecolorallocate($image,   0, 155,   0); 
        $blue          = imagecolorallocate($image,   0,   0, 255); 
        $grey_shade    = imagecolorallocate($image, 204, 204, 204); 
        $font_color    = imagecolorallocate($image, $color["red"], $color["green"], $color["blue"]);
        $caption_color = imagecolorallocate($image, $caption_color["red"], $caption_color["green"], $caption_color["blue"]);
        $link_color    = imagecolorallocate($image, $link_color["red"], $link_color["green"], $link_color["blue"]);    $background_img = imagecreatefrompng($g_options["imgpath"].'/'.$hlx_sig);
        if ($background_img) {
          imagecopy($image, $background_img, 0, 0, 0, 0, 400, 75); 
          imagedestroy($background_img);
        }   
        
        if ($background == 1)
          imagerectangle($image, 0, 0, 399, 74, $bgray);
          
        $start_header_name = 8;
        if ($show_flags > 0)  {
          $flag = imagecreatefromgif($g_options["imgpath"].'/flags/'.flag_exists(strtolower($playerdata["flag"]).".gif"));
          if ($flag) {
            imagecopy($image, $flag, 8, 4, 0, 0, 18, 12); 
            $start_header_name += 22;
            imagedestroy($flag);
          }   
        }  
        
        $timestamp   = $playerdata['connection_time'];
        $days        = floor($timestamp / 86400);
        $hours       = $days * 24;   
        $hours       += floor($timestamp / 3600 % 24);
        if ($hours < 10)
          $hours = "0".$hours; 
        $min         = floor($timestamp / 60 % 60); 
        if ($min < 10)
          $min = "0".$min; 
        $sec         = floor($timestamp % 60);
        if ($sec < 10)
          $sec = "0".$sec; 
        $con_time = $hours.":".$min.":".$sec;
        
        if ($playerdata['last_skill_change'] == "")
          $playerdata['last_skill_change'] = 0;
        if ($playerdata['last_skill_change'] == 0)
          $trend_image_name = $g_options["imgpath"]."/t1.gif";
        elseif ($playerdata['last_skill_change'] > 0)
          $trend_image_name = $g_options["imgpath"]."/t0.gif";
         elseif ($playerdata['last_skill_change'] < 0)
          $trend_image_name = $g_options["imgpath"]."/t2.gif";
        $trend = imagecreatefromgif($trend_image_name);
        imagestring($image, 9, $start_header_name, 2, $playerdata['lastName'], $caption_color);
        imagestring($image, 9, 325, 2, iconv("UTF-8","量子排名系统"), $caption_color);
        
        
        imageline($image, 0, 19, 399, 19, $bgray); 
        imagestring($image, 2, 15, 23, "UTF-8","排名第", $font_color);
        if (is_numeric($rank)) {
          imagestring($image, 3, 70, 23, number_format($rank), $font_color);
          $start_pos_x = 70 + (imagefontwidth(3) * strlen(number_format($rank))) + 7;
        } else {  
          imagestring($image, 3, 70, 23, $rank, $font_color);
          $start_pos_x = 70 + (imagefontwidth(3) * strlen($rank)) + 7;
        }  
        imagestring($image, 2, $start_pos_x, 23, "of ".$pl_count['count']." players with ".$playerdata['skill']." (", $font_color);
        $start_pos_x += (imagefontwidth(2) * strlen("of ".$pl_count['count']." players with ".$playerdata['skill']." ("));
        if ($trend) {
          imagecopy($image, $trend, $start_pos_x, 26, 0, 0, 7, 7); 
          $start_header_name += 22;
          imagedestroy($trend);
          $start_pos_x += 10;
        }
        imagestring($image, 2, $start_pos_x, 23, $skill_change.") points", $font_color);
        imagestring($image, 2,  15, 35, "Frags: ".$playerdata['kills']." kills : ".$playerdata['deaths']." deaths (".$playerdata['kpd']."), ".$playerdata['headshots']." headshots (".$playerdata['hpk']."%)", $font_color);
        imagestring($image, 2,  15, 46, "Activity: ".$playerdata['lastevent']." (".$playerdata['activity']."%), Time: ".$con_time." hours", $font_color);
        imagestring($image, 2,  15, 57, "Statistics: ", $font_color);imagestring($image, 2,  85, 57, $g_options['siteurl'], $link_color);    imagepng($image, IMAGE_PATH."/sig_".$player_id.".png");
        imagedestroy($image);
        $mod_date = date('D, d M Y H:i:s \G\M\T', time());
        header('Last-Modified:'.$mod_date);
        header("Location: ".$web_dir."/hlstatsimg/progress/sig_".$player_id.".png");
          }   
    ?>
      

  3.   

    我都是把中文用utf-8的形式写到程序里,显示出来的就是好的了
    比如
    "我是中文",如果我要显示这四个字,我会在程序里写"&#25105;&#26159;&#20013;&#25991;"
      

  4.   

    我写过的,出来的是&#25105;&#26159;&#20013;&#25991
      

  5.   

    imagestring好象只能显示英文吧。
    换成imagettftext试试。
      

  6.   

    http://blog.csdn.net/kingerq/archive/2004/10/06/125873.aspx
    不知道这个你是不是需要
      

  7.   

    function text_out(&$img,$text,$x=5,$y=16,$color=0,$size=12)
    {
    $text=iconv("GBK","UTF-8",$text);
    @imagefttext($img,$size,0,$x,$y,$color,'SIMSUN.TTC',$text);
    return true;
    }这一个函数可以输出中文的。注意'SIMSUN.TTC'字库必须存在。不行你就写绝对路径或换别的字库。
      

  8.   

    楼上的是正解,PHP4里好像ICONV需要安装的
      

  9.   

    iconv已经打开的
    原程序中的:    imageline($image, 0, 19, 399, 19, $bgray); 
        imagestring($image, 2, 15, 23, "UTF-8","排名第", $font_color);改成    imageline($image, 0, 19, 399, 19, $bgray); 
        imagettftext($image, 2, 0,15, 23, $font_color,"SIMSUN.TTC",iconv("bgk","utf-8","第"));字库加了绝对路径,也不行。
      

  10.   

    iconv("bgk","utf-8","第"));-------------------------
    iconv("gb2312","utf-8","第"));
      

  11.   

    bgk错别字 -> gbk另外如果你是linux系统自编译的话,不知道freetype有没编译进去?freetype应该是字库支持,我一向都编译进去的,不知道这个会不会影响。window版的php我测试过上面的程序是可以出汉字的。
      

  12.   

    高手请帮忙!
    我已经将iconv("bgk","utf-8","第"));改正为iconv("gbk","utf-8","第"));或者iconv("gb2312","utf-8","第"));,均无显示,而字库的绝对路径也加上了,或者COPY到当前目录下,也还是没有显示:
    imagettftext($image, 2, 0,15, 23, $font_color,"c:\windows\fonts\SIMSUN.TTC",iconv("gb2312","utf-8","第"));图片显示结果:http://www.shait.net/HLstats/hlstatsimg/progress/sig_586.png请问该如何解决?能否加入什么代码来检测目前的字符状态?
      

  13.   

    你这不是已经好了吗?哪还有乱码?
    http://www.shait.net/hlstats/hlstatsimg/progress/sig_586.png
      

  14.   

    是的,已经解决好了,昨天想来结帖子的,可昨天好像CSDN有问题,呵呵。问题的根本在于,这个程序文件不能以UTF-8保存,要以ANSI来保存,然后里面用iconv来进行gb2312到utf-8的转换。转换的代码如下:imagettftext($image, 9, 0,15, 58, $font_color,"c:/windows/fonts/SIMSUN.TTC",iconv("gb2312","utf-8","最后连接"));这里特别感谢Gdj(陈水.智商只有129.非卖品)!