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 + -
显示快捷键?