gusucode.com > 同城苏州黄页系统php源码程序 > lib/base.class.php

    <?
# 调试级别
define( '__DEBUG_NONE'		, 0 );		// 关闭调试
define( '__DEBUG_NOOPTION'	, 1 );		// 当 radio,checkbox 表单选项没有被设定时
define( '__DEBUG_OUTDATA'	, 2 );		// 输出 写入数据库的数据
define( '__DEBUG_OUTSQL'	, 3 );		// 输出 执行的 sql
//define( '__DEBUG_______'	, 4 );		// 暂无
//define( '__DEBUG_______'	, 5 );		// 暂无
//define( '__DEBUG_______'	, 6 );		// 暂无
//define( '__DEBUG_______'	, 7 );		// 暂无
define( '__DEBUG_RUNTIME'	, 8 );		// 输出运行时间
define( '__DEBUG_NODELETE'	, 9 );		// 不进行实质性的删除工作,用输出操作文本替代。如删除记录 或 图片


$DB_HANDLE = 0;
register_event( array('EVENT_NO_FUNC_INVOKE') ) ;


class base
{
	/*
	 * 影响网站的全局变量
	 */
	
	var $project_name	= '黄页' ;

	var $now ;

	# 数据库参数
	var $dbhost			='localhost';
	var $dbname			='wbrick';
	var $dbuser			='wbrick';
	var $dbpwd			='123456';	
	/*var $dbhost			='localhost';
	var $dbname			='yellowpage';
	var $dbuser			='root';
	var $dbpwd			='';*/

	# 文件路径参数

	var $site_url 		= 'http://qy.suzhou58.com/';
	var $domain 		= array( 'qy.suzhou58.com' );
	var $upload_dir		= 'upload/';

	var $root_path	;
	var $upload_path	;
	var $upload_url	;

	# 多语言 参数
	var $if_multilang	= false;				// 网站支持多语模板
	var $default_lang	= '';					// 默认的语言
	var $current_lang	= '';					// 当前的语言
	var $language_dirs	= array(				// 支持的语言目录
		'simplified'=>'简体中文',
		'traditional'=>'繁體中文',
		'english'=>'English',
		'japanese'=>'日本語',
		'korean'=>'韓國語'
	);
	var $lang_parameter_tag	='Multilang_Current_lang';
												// 语言参数 在 $_SESSION 和 $_GET 中的名称



	# 其它杂项
	var $upload_fld_input_type	= array('file','picture');
		
	
	/**
	 * Enter description here...
	 *
	 * __DEBUG_NONE			无任何异常信息
	 * __DEBUG_NOOPTION		当 radio,checkbox 表单选项没有被设定时
	 * __DEBUG_RUNTIME		运行时间输出
	 *
	 * @var unknown_type
	 */
	var $debug=__DEBUG_NONE;

	
	var $wrong_msg_style	= ' style="color:red"';
	var $succee_msg_style	= ' style="color:green"';
	var $system_msg			= array();
	

	// 对于 MySQL 4.1 UTF8 
	var $bIfMySQLConnUTF8 = true ;
	

	function base( $if_conn_db = true )
	{
		$this->site_url = 'http://'.$_SERVER['HTTP_HOST'].'/' ;

		$this->now = time() ;

		if( !array( $_SERVER['HTTP_HOST'], $this->domain ) )
			exit("本站域名:<a href='{$this->site_url}'>{$this->site_url}</a>");


		# 初始化 路径
		$this->root_path = dirname(__FILE__).'/../' ;
		$this->upload_path = $this->root_path . $this->upload_dir ;
		$this->upload_url = $this->site_url . $this->upload_dir ;		

		# 连接数据库
		global $DB_HANDLE;
		if( $if_conn_db and empty($DB_HANDLE) )
			$this->mysql_conn();

		# 获得当前使用的语言 信息
		$this->get_current_lang();

		if( $_SERVER['HTTP_HOST']!='qy.suzhou58.com' ) 
		{
			Header("HTTP/1.1 404 Not Found"); 
			exit("404 服务器遇到致命错误。<br />{$_SERVER['HTTP_HOST']}") ;
		}
mysql_connect($this->dbhost,$this->dbuser,$this->dbpwd);
mysql_query("SET NAMES 'utf8';") ;
	}

	
# 数据库 初始化函数 ==========================================
	function mysql_conn($dbname='')
	{
		global $DB_HANDLE;
		mysql_connect($this->dbhost,$this->dbuser,$this->dbpwd);
		if( !empty($dbname) )
			$DB_HANDLE = mysql_select_db($dbname);
		else
			$DB_HANDLE = mysql_select_db($this->dbname);

		if($this->bIfMySQLConnUTF8)
			mysql_query("SET NAMES 'utf8';") ;
	}


# 系统信息函数 ==========================================
	function create_msg($msg,$style='')
	{
		if(empty($msg))
			return false;
		
		$this->system_msg[]=array(
			'style'=>$style,
			'msg'=>$msg
		);
		
		return $this->out_msg();
	}
	
	function clear_msg()
	{
		$this->system_msg = array();
	}

	function bad($msg)
	{
		return $this->create_msg($msg,$this->wrong_msg_style);
	}
	
	function ok($msg)
	{
		return $this->create_msg($msg,$this->succee_msg_style);
	}


	function out_msg($idx=-1)
	{
		if( $idx<0 or $idx+1>count($this->system_msg) )
			$thisMsg=end($this->system_msg);
		else
			$thisMsg=$this->system_msg[$idx];
		
		return "<label{$thisMsg['style']}>{$thisMsg['msg']}</label>";
	}
	function out_msg_all()
	{
		function process_msg($thisMsg){
			return "<label{$thisMsg['style']}>{$thisMsg['msg']}</label>";}
		return implode( "<br>\r\n",array_map('process_msg',$this->system_msg) );
	}
	function has_msg()
	{
		return count($this->system_msg);
	}
	
	function get_other_msg($Ob)
	{
		$this->system_msg=array_merge($this->system_msg,$Ob->system_msg);
	}
	
	function set_config( $conf, $ignore=array() )
	{
		foreach ($conf as $name=>$value)
		{
			if( isset($this->$name) and !in_array($name,$ignore) )
				$this->$name = $value ;
		}
	}


# 多语言 ==========================================
	function get_current_lang()
	{
		if( !$this->if_multilang )
			return false;

		# 默认语言
		if( !isset($_SESSION[ $this->lang_parameter_tag ]) )
			$_SESSION[ $this->lang_parameter_tag ] = $this->default_lang ;
		
		# 更换语言
		if( isset($_GET[ $this->lang_parameter_tag ]) 
			and key_exists( $_GET[ $this->lang_parameter_tag ],$this->language_dirs ) )
		{
			$_SESSION[ $this->lang_parameter_tag ] = $_GET[ $this->lang_parameter_tag ] ;
		}
		
		$this->current_lang = $_SESSION[ $this->lang_parameter_tag ] ;

	}


# 事件机制 ==========================================
	function _touch_user_event( $event_name,
			$parameters_1=null,
			$parameters_2=null,
			$parameters_3=null,
			$parameters_4=null,
			$parameters_5=null,
			$parameters_6=null,
			$parameters_7=null,
			$parameters_8=null,
			$parameters_9=null,
			$parameters_10=null )
	{
		$parameters = func_get_args();

		# 调用 用户事件函数
		if( function_exists($event_name) )
		{
			return $event_name(
						&$this,
						$parameters_1,
						$parameters_2,
						$parameters_3,
						$parameters_4,
						$parameters_5,
						$parameters_6,
						$parameters_7,
						$parameters_8,
						$parameters_9,
						$parameters_10
					);
		}
		# 调用 统一的 Invoke 事件函数
		elseif( function_exists('Invoke') )
		{
			return Invoke(
						&$this, $event_name,
						$parameters_1,
						$parameters_2,
						$parameters_3,
						$parameters_4,
						$parameters_5,
						$parameters_6,
						$parameters_7,
						$parameters_8,
						$parameters_9,
						$parameters_10
					);
		}

		return EVENT_NO_FUNC_INVOKE ;
	}
}


# 调试工具 ==========================================

/**
 * 跟踪流程的函数
 *
 * tt(); 每在程序段里被执行一次,则输出一个累加的数据 和 换行符。
 * 该行数用于检验所在的程序段是否被执行,或执行多少次
 * 例如:
 * for($i=0;$i<3;$i++)
 * {
 * 		……;(其他代码)
 * 		tt();
 * }
 * 则屏幕上显示:
 * 1
 * 2
 * 3
 *
 */
function tt()
{
	global $tlaalt_for_tt;
	if( empty($tlaalt_for_tt) )
		$tlaalt_for_tt=0;

    $tlaalt_for_tt ++;
	print  $tlaalt_for_tt."<br />\r\n";
}

function clear_tt()
{
	global $tlaalt_for_tt;
	$tlaalt_for_tt = 0;
}




if( !function_exists('file_put_contents') )
{
	define( 'FILE_APPEND', 1 );
	define( 'FILE_USE_INCLUDE_PATH', 2 );
	function file_put_contents( $filename, $str, $flag=0 )
	{
		if( $flag == FILE_APPEND )
			$modul = 'a+';
		else
			$modul = 'w+';
		if( !$p=fopen($filename,$modul) )
			return false;
		
		if( !fwrite($p,$str) )
			return false;
		
		fclose($p);
		return true;
	}
}


/**
 * 简单格式化输出
 * 
 * 传递多个参数,则使用 第一个参数为分隔符,依次 格式化输出后面的参数
 *
 * @param mix $s 输出对象,或多个对象之间的分隔符
 */
function pp($s)
{
	echo "\r\n<pre>\r\n";
	if( func_num_args() == 1 )
	    print_r($s);
	else
	{
		$arg = func_get_args();
		$sp = array_shift($arg);
		
		foreach ($arg as $idx=>$v)
		{
			if($idx)
				echo $sp;
			if( is_string($v) )
				echo $v;
			else
				print_r($v);
		}
	}
	
	echo "\r\n</pre>\r\n";
}

function esc_var_name($name)
{
	return str_replace('-','_',$name);
}


# 將一個任意維數的數組,壓縮成一個一維數組
function cutdownArr($arr)
{
	if(!is_array($arr))
		return false;

	$re=array();
	foreach ($arr as $key=>$item)
	{
		if( is_array($item) )
			$re=array_merge($re,cutdownArr($item));
		else
			$re[$key]=$item;
	}
	
	return $re;
}


function check_email($str)
{
	return preg_match("/^[_\-\.\w]+@[_\-\.\w]+\.[a-z]{2,4}$/i",$str);
}

function &load_class( $class_name, $if_init=false )
{
	global $root_path;
	if( !class_exists($class_name) )
		include_once("{$root_path}lib/{$class_name}.class.php");
	
	if( $if_init )
	{
		$parameter = func_get_args();
		$obj = &new $class_name(
			isset($parameter[2])? $parameter[2]:Null ,
			isset($parameter[3])? $parameter[3]:Null ,
			isset($parameter[4])? $parameter[4]:Null ,
			isset($parameter[5])? $parameter[5]:Null ,
			isset($parameter[6])? $parameter[6]:Null ,
			isset($parameter[7])? $parameter[7]:Null ,
			isset($parameter[8])? $parameter[8]:Null ,
			isset($parameter[9])? $parameter[9]:Null ,
			isset($parameter[10])? $parameter[10]:Null ,
			isset($parameter[11])? $parameter[11]:Null 
		) ;
		
		return $obj;
	}
}

function getSystem( $itemName )
{
	if( !$r = mysql_query("select `value` from `system_parameters` where `key`='{$itemName}'") 
				or
		!$arr = mysql_fetch_assoc($r)
				or
		empty($arr)		
	)
		return false;
	
	return $arr['value'];
}
function setSystem( $itemName, $value )
{
	return mysql_query("update `system_parameters` set `value`='{$value}'  where `key`='{$itemName}'") ;
}

function register_event( $events )
{
	$helpStr = '' ;
	foreach ($events as $eventTag)
	{
		$eventName = 'On'.str_replace( ' ', '', ucwords(strtolower( str_replace( '_', ' ', str_replace('EVENT_','',$eventTag) ) )) );
		define( $eventTag, $eventName );
		
		$helpStr.="		# --- {$eventTag} ---
		case '{$eventName}':
/* -- event function {$eventName} start -- */
			# ... ...
			# ... ...
/* -- event function {$eventName} end -- */
			break;

";
	
	}
	
	// file_put_contents( './events.txt', $helpStr ) ;
}




function zoomSize( &$srcW, &$srcH, $limitW, $limitH )
{
	if( $limitW > $srcW and $limitH > $srcH )		// 长宽均小于限制尺寸
		return ;									// 无需压缩
	else if( $srcW/$srcH = $limitW/$limitH )
	{
		$srcH = $limitH ;
		$srcW = $limitW ;
	}
	else if( $srcW/$srcH < $limitW/$limitH )		// 宽的压缩幅度 比较大
	{
		$srcW = ( $limitH/$srcH ) * $limitW ;
		$srcH = $limitH ;
	}
	else
	{
		$srcH = ( $limitW/$srcW ) * $limitH ;
		$srcW = $limitW ;
	}
}

if( !function_exists('http_build_query') )
{
	function http_build_query( $data=array(), $val_name_pre='' )
	{
		if( empty($data) )
			$data = $_REQUEST ;

		$restr = '';
		foreach($data as $key=>$val)
		{
			if( !empty($restr) )
				$restr.= '&' ;
			$val_name_pre ?	$key = "{$val_name_pre}%5B{$key}%5D" : null ;
	
			if( is_array($val) )
			{
				$return = http_build_query( $val, $key );
				if( empty($return) )
					continue ;
				$restr.= $return;
			}
			else
				$restr.="{$key}={$val}";
		}
		
		return $restr;
	}
}

function today()
{
	return  mktime(0,0,0,date('m'),date('d'),date('Y'))/100;
}
?>