夕口技術錄

專業上的小常識,備而用之~

Monthly Archives: 四月 2009

[MySQL] – INSERT … ON DUPLICATE KEY UPDATE

MySQL 自4.1版,
支援 INSERT … ON DUPLICATE KEY UPDATE 語法,
一方面因同事發現,

使用 REPLACE , LOCK Table,
太大量的使用 REPLACE 會造成其他的 Query 被鎖住而變慢
問題,
因此建議相關 Replace 動作改為
INSERT … ON DUPLICATE KEY UPDATE

舉例:

INSERT INTO arptable VALUES('192.168.0.1', 'ooxxooxx') ON DUPLICATE KEY UPDATE mac='mac_value';

注意,使用此語句,
必須有一個唯一索引或主鍵

 ON DUPLICATE KEY UPDATE 動作其實只會針對 mac='mac_value' 欄位進行更新,
其它欄位則不會進行更動,
因此如有二個欄位遇 ON DUPLICATE KEY UPDATE 都要更新時,
則 … ON DUPLICATE KEY UPDATE mac='mac_value' , mac2='mac2_value';

延申閱讀 mysql insert的几点操作(DELAYED 、IGNORE、ON DUPLICATE KEY UPDATE )

[Linux][sendmail] – /var/spool/mqueue

這是系統的Mail Queue,
凡是傳送中,或是傳送失敗的郵件都會被存放在此一目錄
,等待傳送。
每一封信在這個目錄下都會有兩個檔,
一個檔名是以"df"開頭,存放的是mail body,
另一個檔名則是以"qf"開頭,存放mail header,
這兩個檔檔名的其餘部份相同。
指令"mailq“可以讓你看見/var/spool/mqueue中等待傳送信件的情況。
mail queue位置在sendmail.cf下為一Option,
定義方式為 O QueueDirectory=/var/spool/mqueue ,你可以自行定義之。

[PHP][if-else] – 測試三元運算符與 if else 的運算速度

<?php
/**
* 以微秒为单位
* @return float
*/
function getMicrotime()
{
list($usec, $sec) = explode( , microtime());
return ((float)$usec + (float)$sec);
}


$fStartTime = getMicrotime();

for ($i=0; $i<100000; $i++){
$a = b;
if ($a==b) {
$a=c;
}
else{
$a=d;
}
}

$fEndTime = getMicrotime();

print $fEndTime $fStartTime;

print<br>;

$fStartTime = getMicrotime();

for ($i=0; $i<100000; $i++){
$a =
b;
$a = ($a==
b) ? c : ‘d;
}

$fEndTime = getMicrotime();

print $fEndTime $fStartTime;

?>
结果如下
0.133780002594  <- if else
0.106215000153  <- 三元
三元運算符比 if (){}else{} 快一些

[SSH][DNS] – Disable SSH DNS lookup

On default installation SSH daemon is setup to lookup the name of the client IP. This can take to a substantial delay, or in case your DNS servers are not working properly, can lead to an impossibility to connect.

You can disable DNS lookup by setting UseDNS no in /etc/ssh/sshd_config.

[Win][MSN] – 無法(不能)輸入中文問題

將~的MSN最近常常不能使用中文輸入法,

其實原因出自於偉大的微軟多餘的設計…唉~

以下就提供解決的方法。
1.首先找到電腦「桌面」msn的捷徑。

2.點選捷徑按右鍵,選擇內容。

3.然後選擇相容性,在將關閉這個應用程式的進階

[桌面軟體] – 4Windows

111

同事 TB 推薦 的桌面美化軟體,

試用後覺得很好用

fences

[Apache][shell] – Apache 每天自動重啟程式


/usr/local/server/bin/shell_process_restart
#!/usr/local/server/bin/php -q

<?php

$ns_path = "/usr/local/server/";

//SIKO-> step.1 stop
$apache_process_stop = escapeshellcmd($ns_path."bin/apachectl stop");
$apache_process_test = escapeshellcmd("pgrep httpd");
do{
exec($apache_process_stop);
system($apache_process_test,$ptset);
$i++;
}
while($ptset == 0 && $i < 10000);

//SIKO-> step.2 start
$apache_process_start = escapeshellcmd($ns_path."bin/apachectl start");
do{
exec($apache_process_start);
system($apache_process_test,$ptset);
$j++;
}
while($ptset == 1 && $j < 10000);

?>

[crontab]
00 01 * * * /usr/local/server/bin/lockrun --lockfile=/usr/local/server/log/shell_process_restart.lock -- /usr/local/server/bin/shell_process_restart > /dev/null 2>&1

[snmpwalk][cisco] – search port flow

使用 snmpwalk + vlanitem 是否有設定 + cisco mib 就可以達到 search port 的功能

/usr/bin/snmpwalk -c public@1 10.1.1.200 -v1 1.3.6.1.2.1.17.4.3.1.1  -t 3 -r 1
/usr/bin/snmpwalk -c public@1 10.1.1.200 -v1 1.3.6.1.2.1.17.4.3.1.2 -t 3 -r 1
/usr/bin/snmpwalk -c public@1 10.1.1.200 -v1 1.3.6.1.2.1.17.1.4.1.2 -t 3 -r 1
/usr/bin/snmpwalk -c public@1 10.1.1.200 -v1 1.3.6.1.2.1.31.1.1.1.1 -t 3 -r 1
/usr/bin/snmpwalk -c public@1 10.1.1.200 -v1 1.3.6.1.2.1.2.2.1.2 -t 3 -r 1

[Ajax] – 直接傳回結果+讀取cache file 範例

使用者端網頁:index.html

<head>
<script language="Javascript">

http_request = false ;
function refresh() {
http_request = false ;
if (window.XMLHttpRequest) { // Mozilla, Safari,…
http_request = new XMLHttpRequest();
//http_request.overrideMimeType(‘text/xml’);
} else if (window.ActiveXObject) { // IE
http_request = new ActiveXObject(“MSXML2.XMLHTTP.3.0″);
}
http_request.onreadystatechange = updatePage;
http_request.open(‘GET’, ‘./get_user_info.php‘, true);
http_request.send(null);

  1. open() 的第一個參數是 HTTP 的方法,看你的需要,以及 web server 支援的情形,你可以使用 GET、POST、或者 HEAD。建議使用大寫以符合 HTTP 的標準。
  2. open() 的第二個參數是你希望取得的資源的 URL。由於安全的機制, 你只能從同一個 web server 上取得資源。
  3. open() 的第三個參數是代表這個呼叫是不是非同步(即 AJAX 的 第一個 A)。因此,在大部分的情形下都是設為 true 代表在跟遠端取得 資源的同時,browser 可以繼續執行 Javascript 的內容。這個時候其實有兩件 事情同時在進行,一個是從遠端取得資料,另一個是繼續執行 JavaScript 的內容, 或者使用者可以繼續處理網頁上的資料,這也就是非同步的定義。

// 5秒自動重整讀取
setTimeout(“refresh()", “600000″) ;
}

function updatePage() {
if (http_request.readyState < 4) {
document.getElementById(“shows“).innerHTML = “資料載入中,請稍後…";
}
if (http_request.readyState == 4) {
var response = http_request.responseText;
if(response==1){
document.getElementById(“shows“).innerHTML = “&nbsp;";
}
else{
document.getElementById(“shows“).innerHTML = response;
}
}
事件處理函數首先要檢查的是目前 web server 對於我們之前 送出去的 http_request 的處理狀態為何。處理狀態的屬性名稱為 readyState, 它所有可能的值為

  • 0 (尚未初始化; 還沒呼叫 open())
  • 1 (載入中; http_request 已經設定好了,但是還沒呼叫 send())
  • 2 (載入完成; http_request 已經送給 server 了,server 已經開始 處理了,你可以取得 content header 了。)
  • 3 (可以互動的; http_request 已經部份完成了,所以有可能取得 部份處理完的資料)
  • 4 (完成的; compelte)

接收來自 web server 的資料,http_request 提供兩種方式來 存取資料:

  • http_request.responseText 也就是 web server 回傳的資料是以一串的文字,你需要利用字串的處理函數。
  • http_request.responseXML 也就是 web server 回傳的資料是一份 XMLDocuemnt 的物件,你可以利用 JavaScript 的 DOM APIs 來存取 這份 XML 物件。

}

refresh();

</style>
</head>

<body>

<div id=’shows‘></div>

</body>

Ajax 動作程式 get_user_info.php

########### Step.1 -> 十分內讀取第二次時,則接 cache file 內容
//->SIKO : Read Cache File
$filename = “../../tmp/".$ecstart[“user"][“ruserid"]."@@.htm";
if (file_exists($filename)) {

$now_time = time() ;
$file_time = date(“Y-m-d H:i:s.", filemtime($filename));
if($now_time – ecstart_unix_timestamp($file_time) < 600){
//->SIKO : Cache file time < 10m than read cache file
//echo $now_time – ecstart_unix_timestamp($file_time);
$handle = fopen($filename, “r");
echo fread($handle, filesize($filename));
fclose($handle);
exit;
}
}
########### Step.2-> 第一次執行時,則由資料庫拉資料,直接傳回結果
$Record = SQL…..

//第一次執行時直接傳回結果
echo $Record
########### Step.3 -> 將上面結果寫入 cache file ,以利第二次並十分內接資料用
//先將資料寫到tmp資料夾內
$content = iconv(“big5″,"utf8″,$content); //Ajax 中文 亂碼 問題
$fileHandle = fopen($filename, “w+");
fwrite($fileHandle, $content);
fclose($fileHandle);
//print_r($path_root."/www/html");

//chown
$cmd = “/bin/chown -R netsecure.netsecure “.$filename;
system($cmd);

//chmod
$cmd = “/bin/chmod -R 755 “.$filename;
system($cmd);

[Linux][DNS][SSH][速度] – 主機整體速度變慢或 ssh 傳輸變慢

關於這次要紀載的事項,

標題其實不知如何下 @@!!!!

就說明一下情況好了…

情況一、主機的整體 Loading 良好,但網頁及commend的速度就是超慢。

情況二、使用 ssh commend 的操作非常的不順,卡卡的情況很嚴重。

有以上二種情況時,

請檢查主機上的DNS設定第一個是否指向離自已最近的(例公司內部)

#vi /etc/resolv.conf

; generated by /sbin/dhclient-script
; 10.1.1.1 公司內部DNS
nameserver 10.1.1.1
; 中華電信DNS
nameserver 168.95.1.1
search localdomain