⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adodb-session.php

📁 一个bug追踪工具的PHP编写的源代码
💻 PHP
📖 第 1 页 / 共 2 页
字号:
		if (!is_object($rs)) {			return;		}		require_once ADODB_SESSION.'/../tohtml.inc.php';		rs2html($rs);	}	/////////////////////	// public methods	/////////////////////	/*!		Create the connection to the database.		If $conn already exists, reuse that connection	*/	function open($save_path, $session_name, $persist = null) {		$conn =& ADODB_Session::_conn();		if ($conn) {			return true;		}		$database	= ADODB_Session::database();		$debug		= ADODB_Session::debug();		$driver		= ADODB_Session::driver();		$host		= ADODB_Session::host();		$password	= ADODB_Session::password();		$user		= ADODB_Session::user();		if (!is_null($persist)) {			ADODB_Session::persist($persist);		} else {			$persist = ADODB_Session::persist();		}# these can all be defaulted to in php.ini#		assert('$database');#		assert('$driver');#		assert('$host');		// cannot use =& below - do not know why...		$conn =& ADONewConnection($driver);		if ($debug) {			$conn->debug = true;//			ADOConnection::outp( " driver=$driver user=$user pwd=$password db=$database ");		}		if ($persist) {			switch($persist) {			default:			case 'P': $ok = $conn->PConnect($host, $user, $password, $database); break;			case 'C': $ok = $conn->Connect($host, $user, $password, $database); break;			case 'N': $ok = $conn->NConnect($host, $user, $password, $database); break;			}		} else {			$ok = $conn->Connect($host, $user, $password, $database);		}		if ($ok) $GLOBALS['ADODB_SESS_CONN'] =& $conn;		else			ADOConnection::outp('<p>Session: connection failed</p>', false);		return $ok;	}	/*!		Close the connection	*/	function close() {		$conn =& ADODB_Session::_conn();		if ($conn) {			$conn->Close();		}		return true;	}	/*		Slurp in the session variables and return the serialized string	*/	function read($key) {		$conn	=& ADODB_Session::_conn();		$data	= ADODB_Session::dataFieldName();		$filter	= ADODB_Session::filter();		$table	= ADODB_Session::table();		if (!$conn) {			return '';		}		assert('$table');		$qkey = $conn->quote($key);		$binary = $conn->dataProvider === 'mysql' ? '/*! BINARY */' : '';		$sql = "SELECT $data FROM $table WHERE $binary sesskey = $qkey AND expiry >= " . time();		$rs =& $conn->Execute($sql);		//ADODB_Session::_dumprs($rs);		if ($rs) {			if ($rs->EOF) {				$v = '';			} else {				$v = reset($rs->fields);				$filter = array_reverse($filter);				foreach ($filter as $f) {					if (is_object($f)) {						$v = $f->read($v, ADODB_Session::_sessionKey());					}				}				$v = rawurldecode($v);			}			$rs->Close();			ADODB_Session::_crc(strlen($v) . crc32($v));			return $v;		}		return '';	}	/*!		Write the serialized data to a database.		If the data has not been modified since the last read(), we do not write.	*/	function write($key, $val) {		$clob			= ADODB_Session::clob();		$conn			=& ADODB_Session::_conn();		$crc			= ADODB_Session::_crc();		$data			= ADODB_Session::dataFieldName();		$debug			= ADODB_Session::debug();		$driver			= ADODB_Session::driver();		$expire_notify	= ADODB_Session::expireNotify();		$filter			= ADODB_Session::filter();		$lifetime		= ADODB_Session::lifetime();		$table			= ADODB_Session::table();		if (!$conn) {			return false;		}		assert('$table');		$expiry = time() + $lifetime;		$binary = $conn->dataProvider === 'mysql' ? '/*! BINARY */' : '';		// crc32 optimization since adodb 2.1		// now we only update expiry date, thx to sebastian thom in adodb 2.32		if ($crc !== false && $crc == (strlen($val) . crc32($val))) {			if ($debug) {				echo '<p>Session: Only updating date - crc32 not changed</p>';			}			$sql = "UPDATE $table SET expiry = ".$conn->Param('0')." WHERE $binary sesskey = ".$conn->Param('1')." AND expiry >= ".$conn->Param('2');			$rs =& $conn->Execute($sql,array($expiry,$key,time()));			ADODB_Session::_dumprs($rs);			if ($rs) {				$rs->Close();			}			return true;		}		$val = rawurlencode($val);		foreach ($filter as $f) {			if (is_object($f)) {				$val = $f->write($val, ADODB_Session::_sessionKey());			}		}		$arr = array('sesskey' => $key, 'expiry' => $expiry, $data => $val, 'expireref' => '');		if ($expire_notify) {			$var = reset($expire_notify);			global $$var;			if (isset($$var)) {				$arr['expireref'] = $$var;			}		}		if (!$clob) {	// no lobs, simply use replace()			$arr[$data] = $conn->qstr($val);			$rs = $conn->Replace($table, $arr, 'sesskey', $autoQuote = true);			ADODB_Session::_dumprs($rs);		} else {			// what value shall we insert/update for lob row?			switch ($driver) {				// empty_clob or empty_lob for oracle dbs				case 'oracle':				case 'oci8':				case 'oci8po':				case 'oci805':					$lob_value = sprintf('empty_%s()', strtolower($clob));					break;				// null for all other				default:					$lob_value = 'null';					break;			}			// do we insert or update? => as for sesskey			$rs =& $conn->Execute("SELECT COUNT(*) AS cnt FROM $table WHERE $binary sesskey = $qkey");			ADODB_Session::_dumprs($rs);			if ($rs && reset($rs->fields) > 0) {				$sql = "UPDATE $table SET expiry = $expiry, $data = $lob_value WHERE  sesskey = $qkey";			} else {				$sql = "INSERT INTO $table (expiry, $data, sesskey) VALUES ($expiry, $lob_value, $qkey)";			}			if ($rs) {				$rs->Close();			}			$err = '';			$rs1 =& $conn->Execute($sql);			ADODB_Session::_dumprs($rs1);			if (!$rs1) {				$err = $conn->ErrorMsg()."\n";			}			$rs2 =& $conn->UpdateBlob($table, $data, $val, " sesskey=$qkey", strtoupper($clob));			ADODB_Session::_dumprs($rs2);			if (!$rs2) {				$err .= $conn->ErrorMsg()."\n";			}			$rs = ($rs && $rs2) ? true : false;			if ($rs1) {				$rs1->Close();			}			if (is_object($rs2)) {				$rs2->Close();			}		}		if (!$rs) {			ADOConnection::outp('<p>Session Replace: ' . $conn->ErrorMsg() . '</p>', false);			return false;		}  else {			// bug in access driver (could be odbc?) means that info is not committed			// properly unless select statement executed in Win2000			if ($conn->databaseType == 'access') {				$sql = "SELECT sesskey FROM $table WHERE $binary sesskey = $qkey";				$rs =& $conn->Execute($sql);				ADODB_Session::_dumprs($rs);				if ($rs) {					$rs->Close();				}			}		}		return $rs ? true : false;	}	/*!	*/	function destroy($key) {		$conn			=& ADODB_Session::_conn();		$table			= ADODB_Session::table();		$expire_notify	= ADODB_Session::expireNotify();		if (!$conn) {			return false;		}		assert('$table');		$qkey = $conn->quote($key);		$binary = $conn->dataProvider === 'mysql' ? '/*! BINARY */' : '';		if ($expire_notify) {			reset($expire_notify);			$fn = next($expire_notify);			$savem = $conn->SetFetchMode(ADODB_FETCH_NUM);			$sql = "SELECT expireref, sesskey FROM $table WHERE $binary sesskey = $qkey";			$rs =& $conn->Execute($sql);			ADODB_Session::_dumprs($rs);			$conn->SetFetchMode($savem);			if (!$rs) {				return false;			}			if (!$rs->EOF) {				$ref = $rs->fields[0];				$key = $rs->fields[1];				//assert('$ref');				//assert('$key');				$fn($ref, $key);			}			$rs->Close();		}		$sql = "DELETE FROM $table WHERE $binary sesskey = $qkey";		$rs =& $conn->Execute($sql);		ADODB_Session::_dumprs($rs);		if ($rs) {			$rs->Close();		}		return $rs ? true : false;	}	/*!	*/	function gc($maxlifetime) {		$conn			=& ADODB_Session::_conn();		$debug			= ADODB_Session::debug();		$expire_notify	= ADODB_Session::expireNotify();		$optimize		= ADODB_Session::optimize();		$sync_seconds	= ADODB_Session::syncSeconds();		$table			= ADODB_Session::table();		if (!$conn) {			return false;		}		assert('$table');		$time			= time();		$binary = $conn->dataProvider === 'mysql' ? '/*! BINARY */' : '';		if ($expire_notify) {			reset($expire_notify);			$fn = next($expire_notify);			$savem = $conn->SetFetchMode(ADODB_FETCH_NUM);			$sql = "SELECT expireref, sesskey FROM $table WHERE expiry < $time";			$rs =& $conn->Execute($sql);			ADODB_Session::_dumprs($rs);			$conn->SetFetchMode($savem);			if ($rs) {				$conn->BeginTrans();				$keys = array();				while (!$rs->EOF) {					$ref = $rs->fields[0];					$key = $rs->fields[1];					$fn($ref, $key);					$del = $conn->Execute("DELETE FROM $table WHERE sesskey='$key'");					$rs->MoveNext();				}				$rs->Close();				$conn->CommitTrans();			}		} else {			$sql = "DELETE FROM $table WHERE expiry < $time";			$rs =& $conn->Execute($sql);			ADODB_Session::_dumprs($rs);			if ($rs) {				$rs->Close();			}			if ($debug) {				ADOConnection::outp("<p><b>Garbage Collection</b>: $sql</p>");			}		}		// suggested by Cameron, "GaM3R" <gamr@outworld.cx>		if ($optimize) {			$driver = ADODB_Session::driver();			if (preg_match('/mysql/i', $driver)) {				$sql = "OPTIMIZE TABLE $table";			}			if (preg_match('/postgres/i', $driver)) {				$sql = "VACUUM $table";			}			if (!empty($sql)) {				$conn->Execute($sql);			}		}		if ($sync_seconds) {			$sql = 'SELECT ';			if ($conn->dataProvider === 'oci8') {				$sql .= "TO_CHAR({$conn->sysTimeStamp}, 'RRRR-MM-DD HH24:MI:SS')";			} else {				$sql .= $conn->sysTimeStamp;			}			$sql .= " FROM $table";			$rs =& $conn->SelectLimit($sql, 1);			if ($rs && !$rs->EOF) {				$dbts = reset($rs->fields);				$rs->Close();				$dbt = $conn->UnixTimeStamp($dbts);				$t = time();				if (abs($dbt - $t) >= $sync_seconds) {					global $HTTP_SERVER_VARS;					$msg = __FILE__ .						": Server time for webserver {$HTTP_SERVER_VARS['HTTP_HOST']} not in synch with database: " .						" database=$dbt ($dbts), webserver=$t (diff=". (abs($dbt - $t) / 3600) . ' hours)';					error_log($msg);					if ($debug) {						ADOConnection::outp("<p>$msg</p>");					}				}			}		}		return true;	}}ADODB_Session::_init();// for backwards compatability onlyfunction adodb_sess_open($save_path, $session_name, $persist = true) {	return ADODB_Session::open($save_path, $session_name, $persist);}// for backwards compatability onlyfunction adodb_sess_gc($t){	return ADODB_Session::gc($t);}?>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -