夕口技術錄
專業上的小常識,備而用之~
Monthly Archives: 四月 2009
[MySQL] – INSERT … ON DUPLICATE KEY UPDATE
2009/04/24
Posted by 於 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
2009/04/21
Posted by 於 這是系統的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 的運算速度
2009/04/18
Posted by 於 <?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
2009/04/10
Posted by 於 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] – 無法(不能)輸入中文問題
2009/04/08
Posted by 於 [Apache][shell] – Apache 每天自動重啟程式
2009/04/07
Posted by 於
/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
2009/04/07
Posted by 於 使用 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 範例
2009/04/07
Posted by 於 使用者端網頁: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);
- open() 的第一個參數是 HTTP 的方法,看你的需要,以及 web server 支援的情形,你可以使用 GET、POST、或者 HEAD。建議使用大寫以符合 HTTP 的標準。
- open() 的第二個參數是你希望取得的資源的 URL。由於安全的機制, 你只能從同一個 web server 上取得資源。
- 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 = “ ";
}
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 傳輸變慢
2009/04/02
Posted by 於 關於這次要紀載的事項,
標題其實不知如何下 @@!!!!
就說明一下情況好了…
情況一、主機的整體 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
近期迴響