jpgraph.php
来自「通达OA2007SE源代码 非常好的」· PHP 代码 · 共 2,039 行 · 第 1/5 页
PHP
2,039 行
<?php//=======================================================================// File: JPGRAPH.PHP// Description: PHP Graph Plotting library. Base module.// Created: 2001-01-08// Ver: $Id: jpgraph.php 770 2006-09-24 20:19:11Z ljp $//// Copyright 2006 (c) Aditus Consulting. All rights reserved.//========================================================================require_once('jpg-config.inc.php');require_once 'jpgraph_gradient.php';require_once 'jpgraph_errhandler.inc.php';// Version infoDEFINE('JPG_VERSION','2.1.3');// Minimum required PHP versionDEFINE('MIN_PHPVERSION','5.1.0');// Should the image be a truecolor image? // Note 1: Has only effect with GD 2.0.1 and above.// Note 2: GD 2.0.1 + PHP 4.0.6 on Win32 crashes when trying to use // trucolor.// Note 3: MUST be enabled to get background images working with GD2DEFINE('USE_TRUECOLOR',true);//------------------------------------------------------------------------// Automatic settings of path for cache and font directory// if they have not been previously specified//------------------------------------------------------------------------if(USE_CACHE) { if (!defined('CACHE_DIR')) { if ( strstr( PHP_OS, 'WIN') ) { if( empty($_SERVER['TEMP']) ) { $t = new ErrMsgText(); $msg = $t->Get(11,$file,$lineno); die($msg); } else { DEFINE('CACHE_DIR', $_SERVER['TEMP'] . '/'); } } else { DEFINE('CACHE_DIR','/tmp/jpgraph_cache/'); } }}elseif( !defined('CACHE_DIR') ) { DEFINE('CACHE_DIR', '');}if (!defined('TTF_DIR')) { if (strstr( PHP_OS, 'WIN') ) { $sroot = getenv('SystemRoot'); if( empty($sroot) ) { $t = new ErrMsgText(); $msg = $t->Get(12,$file,$lineno); die($msg); } else { DEFINE('TTF_DIR', $sroot.'/fonts/'); } } else { DEFINE('TTF_DIR','/usr/X11R6/lib/X11/fonts/truetype/'); }}//------------------------------------------------------------------// Constants which are used as parameters for the method calls//------------------------------------------------------------------// TTF Font families// Note: First font must be FF_COURIER and the last font family must// be given to _LAST_FONT. This is used for error checking in the text// handling routines.DEFINE("FF_COURIER",10);DEFINE("FF_VERDANA",11);DEFINE("FF_TIMES",12);DEFINE("FF_COMIC",14);DEFINE("FF_ARIAL",15);DEFINE("FF_GEORGIA",16);DEFINE("FF_TREBUCHE",17);// Gnome Vera font// Available from http://www.gnome.org/fonts/DEFINE("FF_VERA",18);DEFINE("FF_VERAMONO",19);DEFINE("FF_VERASERIF",20);// Chinese fontDEFINE("FF_SIMSUN",30);DEFINE("FF_CHINESE",31);DEFINE("FF_BIG5",31);// Japanese fontDEFINE("FF_MINCHO",40);DEFINE("FF_PMINCHO",41);DEFINE("FF_GOTHIC",42);DEFINE("FF_PGOTHIC",43);// Limits for fontsDEFINE("_FIRST_FONT",10);DEFINE("_LAST_FONT",43);// TTF Font stylesDEFINE("FS_NORMAL",9001);DEFINE("FS_BOLD",9002);DEFINE("FS_ITALIC",9003);DEFINE("FS_BOLDIT",9004);DEFINE("FS_BOLDITALIC",9004);//Definitions for internal font, new styleDEFINE("FF_FONT0",1);DEFINE("FF_FONT1",2);DEFINE("FF_FONT2",4);// Tick densityDEFINE("TICKD_DENSE",1);DEFINE("TICKD_NORMAL",2);DEFINE("TICKD_SPARSE",3);DEFINE("TICKD_VERYSPARSE",4);// Side for ticks and labels. DEFINE("SIDE_LEFT",-1);DEFINE("SIDE_RIGHT",1);DEFINE("SIDE_DOWN",-1);DEFINE("SIDE_BOTTOM",-1);DEFINE("SIDE_UP",1);DEFINE("SIDE_TOP",1);// Legend type stacked vertical or horizontalDEFINE("LEGEND_VERT",0);DEFINE("LEGEND_HOR",1);// Mark types for plot marksDEFINE("MARK_SQUARE",1);DEFINE("MARK_UTRIANGLE",2);DEFINE("MARK_DTRIANGLE",3);DEFINE("MARK_DIAMOND",4);DEFINE("MARK_CIRCLE",5);DEFINE("MARK_FILLEDCIRCLE",6);DEFINE("MARK_CROSS",7);DEFINE("MARK_STAR",8);DEFINE("MARK_X",9);DEFINE("MARK_LEFTTRIANGLE",10);DEFINE("MARK_RIGHTTRIANGLE",11);DEFINE("MARK_FLASH",12);DEFINE("MARK_IMG",13);DEFINE("MARK_FLAG1",14);DEFINE("MARK_FLAG2",15);DEFINE("MARK_FLAG3",16);DEFINE("MARK_FLAG4",17);// Builtin imagesDEFINE("MARK_IMG_PUSHPIN",50);DEFINE("MARK_IMG_SPUSHPIN",50);DEFINE("MARK_IMG_LPUSHPIN",51);DEFINE("MARK_IMG_DIAMOND",52);DEFINE("MARK_IMG_SQUARE",53);DEFINE("MARK_IMG_STAR",54);DEFINE("MARK_IMG_BALL",55);DEFINE("MARK_IMG_SBALL",55);DEFINE("MARK_IMG_MBALL",56);DEFINE("MARK_IMG_LBALL",57);DEFINE("MARK_IMG_BEVEL",58);// Inline definesDEFINE("INLINE_YES",1);DEFINE("INLINE_NO",0);// Format for background imagesDEFINE("BGIMG_FILLPLOT",1);DEFINE("BGIMG_FILLFRAME",2);DEFINE("BGIMG_COPY",3);DEFINE("BGIMG_CENTER",4);// Depth of objectsDEFINE("DEPTH_BACK",0);DEFINE("DEPTH_FRONT",1);// DirectionDEFINE("VERTICAL",1);DEFINE("HORIZONTAL",0);// Axis styles for scientific style axisDEFINE('AXSTYLE_SIMPLE',1);DEFINE('AXSTYLE_BOXIN',2);DEFINE('AXSTYLE_BOXOUT',3);DEFINE('AXSTYLE_YBOXIN',4);DEFINE('AXSTYLE_YBOXOUT',5);// Style for title backgroundsDEFINE('TITLEBKG_STYLE1',1);DEFINE('TITLEBKG_STYLE2',2);DEFINE('TITLEBKG_STYLE3',3);DEFINE('TITLEBKG_FRAME_NONE',0);DEFINE('TITLEBKG_FRAME_FULL',1);DEFINE('TITLEBKG_FRAME_BOTTOM',2);DEFINE('TITLEBKG_FRAME_BEVEL',3);DEFINE('TITLEBKG_FILLSTYLE_HSTRIPED',1);DEFINE('TITLEBKG_FILLSTYLE_VSTRIPED',2);DEFINE('TITLEBKG_FILLSTYLE_SOLID',3);// Style for background gradient fillsDEFINE('BGRAD_FRAME',1);DEFINE('BGRAD_MARGIN',2);DEFINE('BGRAD_PLOT',3);// Width of tab titlesDEFINE('TABTITLE_WIDTHFIT',0);DEFINE('TABTITLE_WIDTHFULL',-1);// Defines for 3D skew directionsDEFINE('SKEW3D_UP',0);DEFINE('SKEW3D_DOWN',1);DEFINE('SKEW3D_LEFT',2);DEFINE('SKEW3D_RIGHT',3);// Line stylesDEFINE('LINESTYLE_DOTTED',1);DEFINE('LINESTYLE_DASHED',2);DEFINE('LINESTYLE_LONGDASH',3);DEFINE('LINESTYLE_SOLID',4);// For internal use onlyDEFINE("_JPG_DEBUG",false);DEFINE("_FORCE_IMGTOFILE",false);DEFINE("_FORCE_IMGDIR",'/tmp/jpgimg/');function CheckPHPVersion($aMinVersion){ list($majorC, $minorC, $editC) = split('[/.-]', PHP_VERSION); list($majorR, $minorR, $editR) = split('[/.-]', $aMinVersion); if ($majorC > $majorR) return true; if ($majorC < $majorR) return false; // same major - check ninor if ($minorC > $minorR) return true; if ($minorC < $minorR) return false; // and same minor if ($editC >= $editR) return true; return true;}//// Make sure PHP version is high enough//if( !CheckPHPVersion(MIN_PHPVERSION) ) { JpGraphError::RaiseL(13,PHP_VERSION,MIN_PHPVERSION);}//// Make GD sanity check//if( !function_exists("imagetypes") || !function_exists('imagecreatefromstring') ) { JpGraphError::RaiseL(25001);//("This PHP installation is not configured with the GD library. Please recompile PHP with GD support to run JpGraph. (Neither function imagetypes() nor imagecreatefromstring() does exist)");}//// Setup PHP error handler//function _phpErrorHandler($errno,$errmsg,$filename, $linenum, $vars) { // Respect current error level if( $errno & error_reporting() ) { JpGraphError::RaiseL(25003,basename($filename),$linenum,$errmsg); }}if( INSTALL_PHP_ERR_HANDLER ) { set_error_handler("_phpErrorHandler");}////Check if there were any warnings, perhaps some wrong includes by the//user//if( isset($GLOBALS['php_errormsg']) && CATCH_PHPERRMSG && !preg_match('|Deprecated|', $GLOBALS['php_errormsg']) ) { JpGraphError::RaiseL(25004,$GLOBALS['php_errormsg']);}// Useful mathematical functionfunction sign($a) {return $a >= 0 ? 1 : -1;}// Utility function to generate an image name based on the filename we// are running from and assuming we use auto detection of graphic format// (top level), i.e it is safe to call this function// from a script that uses JpGraphfunction GenImgName() { // Determine what format we should use when we save the images $supported = imagetypes(); if( $supported & IMG_PNG ) $img_format="png"; elseif( $supported & IMG_GIF ) $img_format="gif"; elseif( $supported & IMG_JPG ) $img_format="jpeg"; if( !isset($_SERVER['PHP_SELF']) ) JpGraphError::RaiseL(25005);//(" Can't access PHP_SELF, PHP global variable. You can't run PHP from command line if you want to use the 'auto' naming of cache or image files."); $fname = basename($_SERVER['PHP_SELF']); if( !empty($_SERVER['QUERY_STRING']) ) { $q = @$_SERVER['QUERY_STRING']; $fname .= '_'.preg_replace("/\W/", "_", $q).'.'.$img_format; } else { $fname = substr($fname,0,strlen($fname)-4).'.'.$img_format; } return $fname;}class LanguageConv { private $g2312 = null ; function Convert($aTxt,$aFF) { if( LANGUAGE_GREEK ) { if( GREEK_FROM_WINDOWS ) { $unistring = LanguageConv::gr_win2uni($aTxt); } else { $unistring = LanguageConv::gr_iso2uni($aTxt); } return $unistring; } elseif( LANGUAGE_CYRILLIC ) { if( CYRILLIC_FROM_WINDOWS && (!defined('LANGUAGE_CHARSET') || stristr(LANGUAGE_CHARSET, 'windows-1251')) ) { $aTxt = convert_cyr_string($aTxt, "w", "k"); } if( !defined('LANGUAGE_CHARSET') || stristr(LANGUAGE_CHARSET, 'koi8-r') || stristr(LANGUAGE_CHARSET, 'windows-1251')) { $isostring = convert_cyr_string($aTxt, "k", "i"); $unistring = LanguageConv::iso2uni($isostring); } else { $unistring = $aTxt; } return $unistring; } elseif( $aFF === FF_SIMSUN ) { // Do Chinese conversion if( $this->g2312 == null ) { include_once 'jpgraph_gb2312.php' ; $this->g2312 = new GB2312toUTF8(); } return $this->g2312->gb2utf8($aTxt); } elseif( $aFF === FF_CHINESE ) { if( !function_exists('iconv') ) { JpGraphError::RaiseL(25006);//('Usage of FF_CHINESE (FF_BIG5) font family requires that your PHP setup has the iconv() function. By default this is not compiled into PHP (needs the "--width-iconv" when configured).'); } return iconv('BIG5','UTF-8',$aTxt); } elseif( ASSUME_EUCJP_ENCODING && ($aFF == FF_MINCHO || $aFF == FF_GOTHIC || $aFF == FF_PMINCHO || $aFF == FF_PGOTHIC) ) { if( !function_exists('mb_convert_encoding') ) { JpGraphError::RaiseL(25127); } return mb_convert_encoding($aTxt, 'UTF-8','EUC-JP'); } else return $aTxt; } // Translate iso encoding to unicode public static function iso2uni ($isoline){ $uniline=''; for ($i=0; $i < strlen($isoline); $i++){ $thischar=substr($isoline,$i,1); $charcode=ord($thischar); $uniline.=($charcode>175) ? "&#" . (1040+($charcode-176)). ";" : $thischar; } return $uniline; } // Translate greek iso encoding to unicode public static function gr_iso2uni ($isoline) { $uniline=''; for ($i=0; $i < strlen($isoline); $i++) { $thischar=substr($isoline,$i,1); $charcode=ord($thischar); $uniline.=($charcode>179 && $charcode!=183 && $charcode!=187 && $charcode!=189) ? "&#" . (900+($charcode-180)). ";" : $thischar; } return $uniline; } // Translate greek win encoding to unicode public static function gr_win2uni ($winline) { $uniline=''; for ($i=0; $i < strlen($winline); $i++) { $thischar=substr($winline,$i,1); $charcode=ord($thischar); if ($charcode==161 || $charcode==162) { $uniline.="&#" . (740+$charcode). ";"; } else { $uniline.=(($charcode>183 && $charcode!=187 && $charcode!=189) || $charcode==180) ? "&#" . (900+($charcode-180)). ";" : $thischar; } } return $uniline; }}//===================================================// CLASS JpgTimer// Description: General timing utility class to handle// time measurement of generating graphs. Multiple// timers can be started.//===================================================
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?