懶惰是金 介紹幾個(gè)php通用的函數(shù)第2/2頁(yè)
更新時(shí)間:2008年04月23日 23:18:37 作者:
PHP是一門高效的網(wǎng)絡(luò)編程語(yǔ)言,由于它具有編寫(xiě)靈活、運(yùn)行快速等優(yōu)點(diǎn),迅速成為Web程序員的首選語(yǔ)言。前不久的一份權(quán)威調(diào)查表明,現(xiàn)在已經(jīng)有31.6%的網(wǎng)站使用PHP作為主要的服務(wù)器端編程語(yǔ)言。
3. 控制Log信息的函數(shù)
調(diào)試PHP程序的另外一種重要的方法就是查看Log信息。如果能夠方便地控制Log信息的級(jí)別以及Log信息的顯示內(nèi)容,將會(huì)給程序調(diào)試帶來(lái)更多的便利。下面的幾個(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級(jí)別變量。運(yùn)行PHP程序時(shí),只有當(dāng)Log的級(jí)別低于預(yù)設(shè)的級(jí)別值時(shí),Log信息才可以被記錄和顯示出來(lái)。例如,在程序中加入如下的一條語(yǔ)句:
ss_log_set_level(INFO);
那么,運(yùn)行PHP程序時(shí),只有ERROR和INFO級(jí)別的LOG信息才能被記錄和顯示出來(lái),DEBUG級(jí)的信息則被忽略了。除此之外,我們還可以設(shè)定顯示的信息內(nèi)容,其語(yǔ)句如下:
ss_log(ERROR, "testing level ERROR");
ss_log(INFO, "testing level INFO");
ss_log(DEBUG, "testing level DEBUG");
你也可以隨時(shí)使用下面的語(yǔ)句清空LOG信息:
ss_log_reset();
4.速度測(cè)試函數(shù)
為了優(yōu)化代碼,我們需要一種可以測(cè)試代碼運(yùn)行時(shí)間的方法,從而來(lái)選擇最優(yōu)的代碼。下面的函數(shù)可以測(cè)試運(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ù)庫(kù)的操作
對(duì)于數(shù)據(jù)庫(kù)來(lái)說(shuō),運(yùn)行速度是至關(guān)重要的。盡管很多書(shū)籍和文章都講授了一些快速運(yùn)行數(shù)據(jù)庫(kù)的方法,但是所有的方法都必須經(jīng)過(guò)實(shí)踐的檢驗(yàn)。下面我們將把PHPLib函數(shù)庫(kù)中的query()函數(shù)和上面介紹的幾個(gè)函數(shù)綜合起來(lái)編寫(xiě)成新的query()函數(shù),和原先的函數(shù)相比,這個(gè)函數(shù)增加了運(yùn)行時(shí)間的監(jiān)測(cè)功能。
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安全之register_globals的on和off的區(qū)別
這篇文章主要介紹了PHP安全之register_globals的on和off的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
淺談PHP定義命令空間的幾個(gè)注意點(diǎn)(推薦)
下面小編就為大家?guī)?lái)一篇淺談PHP定義命令空間的幾個(gè)注意點(diǎn)(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-10-10
PHP set_time_limit(0)長(zhǎng)連接的實(shí)現(xiàn)分析
每次我們?cè)L問(wèn)PHP腳本的時(shí)候,都是當(dāng)所有的PHP腳本執(zhí)行完成后,我們才得到返回結(jié)果。如果我們需要一個(gè)腳本持續(xù)的運(yùn)行,那么我們就要通過(guò)php長(zhǎng)連接的方式,來(lái)達(dá)到運(yùn)行目的。2010-03-03

