懶惰是金 介紹幾個(gè)php通用的函數(shù)第2/2頁
更新時(shí)間:2008年04月23日 23:18:37 作者:
PHP是一門高效的網(wǎng)絡(luò)編程語言,由于它具有編寫靈活、運(yùn)行快速等優(yōu)點(diǎn),迅速成為Web程序員的首選語言。前不久的一份權(quán)威調(diào)查表明,現(xiàn)在已經(jīng)有31.6%的網(wǎng)站使用PHP作為主要的服務(wù)器端編程語言。
3. 控制Log信息的函數(shù)
調(diào)試PHP程序的另外一種重要的方法就是查看Log信息。如果能夠方便地控制Log信息的級別以及Log信息的顯示內(nèi)容,將會給程序調(diào)試帶來更多的便利。下面的幾個(gè)函數(shù)可以方便地實(shí)現(xiàn)這個(gè)功能。
$ss_log_level = 0;
$ss_log_filename = /tmp/ss-log;
$ss_log_levels = array(
NONE => 0,
ERROR => 1,
INFO => 2,
DEBUG => 3);
function ss_log_set_level ($level = ERROR) {
global $ss_log_level;
$ss_log_level = $level;
}
function ss_log ($level, $message) {
global $ss_log_level, $ss-log-filename;
if ($ss_log_levels[$ss_log_level] < $ss_log_levels[$level]) {
// 不顯示Log信息
return false;
}
$fd = fopen($ss_log_filename, "a+");
fputs($fd, $level. - [.ss_timestamp_pretty().] - .$message."n");
fclose($fd);
return true;
}
function ss_log_reset () {
global $ss_log_filename;
@unlink($ss_log_filename);
}
在上面的函數(shù)中,有四個(gè)Log級別變量。運(yùn)行PHP程序時(shí),只有當(dāng)Log的級別低于預(yù)設(shè)的級別值時(shí),Log信息才可以被記錄和顯示出來。例如,在程序中加入如下的一條語句:
ss_log_set_level(INFO);
那么,運(yùn)行PHP程序時(shí),只有ERROR和INFO級別的LOG信息才能被記錄和顯示出來,DEBUG級的信息則被忽略了。除此之外,我們還可以設(shè)定顯示的信息內(nèi)容,其語句如下:
ss_log(ERROR, "testing level ERROR");
ss_log(INFO, "testing level INFO");
ss_log(DEBUG, "testing level DEBUG");
你也可以隨時(shí)使用下面的語句清空LOG信息:
ss_log_reset();
4.速度測試函數(shù)
為了優(yōu)化代碼,我們需要一種可以測試代碼運(yùn)行時(shí)間的方法,從而來選擇最優(yōu)的代碼。下面的函數(shù)可以測試運(yùn)行代碼所需的時(shí)間:
function ss_timing_start ($name = default) {
global $ss_timing_start_times;
$ss_timing_start_times[$name] = explode( , microtime());
}
function ss_timing_stop ($name = default) {
global $ss_timing_stop_times;
$ss_timing_stop_times[$name] = explode(, microtime());
}
function ss_timing_current ($name = default) {
global $ss_timing_start_times, $ss_timing_stop_times;
if (!isset($ss_timing_start_times[$name])) {
return 0;
}
if (!isset($ss_timing_stop_times[$name])) {
$stop_time = explode(, microtime());
}
else {
$stop_time = $ss_timing_stop_times[$name];
}
$current = $stop_time[1] -$ss_timing_start_times[$name][1];
$current += $stop_time[0] -$ss_timing_start_times[$name][0];
return $current;
}
現(xiàn)在可以輕松地檢查任何一段代碼的執(zhí)行時(shí)間了,甚至我們可以同時(shí)使用多個(gè)計(jì)時(shí)器,只需在使用上述的幾個(gè)函數(shù)時(shí)設(shè)定不同的參數(shù)作為計(jì)時(shí)器的名稱就可以了。
5.調(diào)試和優(yōu)化數(shù)據(jù)庫的操作
對于數(shù)據(jù)庫來說,運(yùn)行速度是至關(guān)重要的。盡管很多書籍和文章都講授了一些快速運(yùn)行數(shù)據(jù)庫的方法,但是所有的方法都必須經(jīng)過實(shí)踐的檢驗(yàn)。下面我們將把PHPLib函數(shù)庫中的query()函數(shù)和上面介紹的幾個(gè)函數(shù)綜合起來編寫成新的query()函數(shù),和原先的函數(shù)相比,這個(gè)函數(shù)增加了運(yùn)行時(shí)間的監(jiān)測功能。
function query($Query_String, $halt_on_error = 1) {
$this->connect();
ss_timing_start();
$this->Query_ID = @mysql_query($Query_String,$this->Link_ID);
ss_timing_stop();
ss_log(INFO, ss_timing_current(). Secs - .$Query_String);
$this->Row = 0;
$this->Errno = mysql_errno();
$this->Error = mysql_error();
if ($halt_on_error && !$this->Query_ID) {
$this->halt("Invalid SQL: ".$Query_String);
}
return $this->Query_ID;
}
相關(guān)文章
PHP實(shí)現(xiàn)守護(hù)進(jìn)程的示例代碼
守護(hù)進(jìn)程到底是怎么實(shí)現(xiàn)的?為什么有的程序既可以自己就成為守護(hù)進(jìn)程,又可以通過systemd 來后臺運(yùn)行?本文將為大家具體講解,感興趣的可以了解一下2022-05-05php中ob(Output Buffer 輸出緩沖)函數(shù)使用方法
php中ob(Output Buffer 輸出緩沖)函數(shù)使用方法...2007-07-07php實(shí)現(xiàn)的mongoDB單例模式操作類
這篇文章主要介紹了php實(shí)現(xiàn)的mongoDB單例模式操作類,結(jié)合實(shí)例形式分析了php基于單例模式操作MongoDB數(shù)據(jù)庫的數(shù)據(jù)庫封裝類相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-01-01PHP函數(shù)實(shí)現(xiàn)從一個(gè)文本字符串中提取關(guān)鍵字的方法
這篇文章主要介紹了PHP函數(shù)實(shí)現(xiàn)從一個(gè)文本字符串中提取關(guān)鍵字的方法,涉及php針對字符串的遍歷與查找等操作技巧,需要的朋友可以參考下2015-07-07PHP面向?qū)ο蟪绦蛟O(shè)計(jì)之對象生成方法詳解
這篇文章主要介紹了PHP面向?qū)ο蟪绦蛟O(shè)計(jì)之對象生成方法,簡單介紹了php常見對象生成模式并結(jié)合實(shí)例形式分析了php對象生成的單例模式、工廠模式、原形模式等概念與實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-12-12PHP實(shí)現(xiàn)web socket長鏈接流程詳解
這篇文章主要介紹了PHP實(shí)現(xiàn)web socket長鏈接流程,了解內(nèi)部原理是為了幫助我們做擴(kuò)展,同時(shí)也是驗(yàn)證了一個(gè)人的學(xué)習(xí)能力,如果你想讓自己的職業(yè)道路更上一層樓,這些底層的東西你是必須要會的2023-03-03