網絡技術日誌

關於 PHP, Linux, Open Source 及個人生活記載的網誌。
RSS icon
  • PHP 的 is_file() 及 file_exists()

    Posted on December 9th, 2011 Sam Tang No comments

    PHP 的 is_file() 及 file_exists() 都是用作檢查檔案是否存在,它們的分別是 file_exists() 輸入的參數是目錄也會回傳 TRUE,而 is_file() 則只會對檔案回傳 TRUE:

    PHP:
    1. <?php
    2. $path ="/path/to/dir";
    3. if(file_exists($path)){
    4.     echo "File Exists";
    5. }else{
    6.     echo "File not Exists";
    7.  
    8. // 如果 /path/to/dir 目錄存在會回傳 TRUE
    9. ?>

    但如果用 is_file(),即使 /path/to/dir 目錄存在,仍然會回傳 FALSE:

    PHP:
    1. <?php
    2. $path ="/path/to/dir";
    3. if(is_file($path)){
    4.     echo "File Exists";
    5. }else{
    6.     echo "File not Exists";
    7.  
    8. // 如果 /path/to/dir 目錄存在會回傳 TRUE
    9. ?>


  • MySQL 的流程控制

    Posted on December 8th, 2011 Sam Tang No comments

    MySQL 有幾個流程控制的 functions,以下是它們的用法簡介:

    1. CASE
    它就如同其他程式語言的 switch:

    // Below will return zero
    SELECT CASE 0 WHEN 0 THEN 'zero' WHEN 1 THEN 'one' ELSE 'no one' END;

    // Below will return true
    SELECT CASE WHEN 5>2 THEN 'true' ELSE 'false' END;

    2. IF
    SELECT IF(expr1,expr2,expr3);

    // return yes
    SELECT IF(1<5,'yes','no');

    3. IFNULL
    SELECT IFNULL(expr1, expr2);

    // Return 5
    SELECT IFNULL(5,0);

    // Return 10
    SELECT IFNULL(NULL,10);

    4. NULLIF
    SELECT NULLIF(expr1,expr2);

    // Return NULL
    SELECT NULLIF(5,5);

    // Return 10
    SELECT NULLIF(10,4);


  • MySQL 的 Safe Update Mode

    Posted on December 6th, 2011 Sam Tang No comments

    最近要更新 MySQL 資料表內其中一個欄位的所有資料,只是用以下這個 SQL 指令:

    UPDATE table_name SET field_name=0;

    個 MySQL 回傳的錯誤訊息為:

    "You are using safe update mode and you tried to update a table without a WHERE clause that uses a KEY column."

    查看一些資料後,原來 MySQL 在沒有 WHERE 或 LIMIT 條件下會拒絕執行 UPDATE 或 DELETE querey,即使是沒有 KEY column 的 WHERE 條件也會拒絕執行。

    要解決就是將 MySQL 的 Safe Update Mode 關閉:

    SET SQL_SAFE_UPDATES=0;
    UPDATE table_name SET field_name=0;

    如果要重新啟用 Safe Update Mode,只要執行:

    SET SQL_SAFE_UPDATES=1;


  • 刪除 tarball 內的檔案

    Posted on December 5th, 2011 Sam Tang No comments

    如果想刪除 tarball 內的個別檔案,可以用 tar 指令實現,首先用以下指令查看 tarball 內的檔案內容:

    # tar -tvf test.tar

    然後就可以用以下指令刪除檔案,以下會假設刪除 del_file.txt 檔案:

    # tar --delete -f test.tar del_file.txt

    如果想一次過刪除多個檔案,也可以用 * 符號配合 --wildcards 選項:

    # tar --wildcards --delete -f test.tar 'del_file.*'

    請注意,以上方法只支援 tarball 檔案,而並不支援 tar.gz 或 tar.bz2。


  • 免費省電軟件 — Granola

    Posted on December 2nd, 2011 Sam Tang No comments

    Granola 是一套智能省電軟件,它可以在不影響電腦正常使用的情況下節省用電,原理就是當電腦閒置時使用較少的 CPU 資源,而且 Granola 支援 Windows 及 Linux 平台。

    Granola 官方網站


  • 取消 Firefox 安裝插件時倒數計時

    Posted on December 1st, 2011 Sam Tang No comments

    在 Firefox 安裝插件時,預設會倒數幾秒鐘才可以安裝,如果覺得麻煩可以這樣取消:

    1. 在網址列輸入 "about:config",再按 "我發誓,我一定會小心的!"。

    2. 找出 "security.dialog_enable_delay"。

    3. 將數值條改為 "0" 再按確定就完成了。


  • ScanGauge 讀取 ATF 溫度

    Posted on November 10th, 2011 Sam Tang No comments

    之前買到的 ScanGauge 有編程功能,只要車上的 ECU 有這個數據,又知道查詢的 PID,可以自行寫入指令,以下是查詢 ATF 波箱油溫度的指令,在我的 NZE 121 上可以正常顯示:

    TXD: 686AF101B4
    RXF: 044105B40000
    RXD: 2808
    MTH: 00010001FFD8
    NAME: ATF

    上面會顯示攝氏溫溫,如果想顯示華氏溫度,只要將 MTH 一行改成: 00090005FFD8


  • 淘寶買的 ScanGauge Plus 及 MaxiScan MS509

    Posted on September 1st, 2011 Sam Tang 1 comment

    今次是第一次在淘寶購物,原來除了用信用咭付款後,到 OK 便利店也可以給支付寶充值,但匯率好貴,每 1 人民幣對 1.26 港元。付款後當天店家便出貨,在香港第二天就收到貨了,但順豐速遞會對偏遠地區收取 $30 的附加費。

    今次買的兩件產品也與汽車有關,分別是 ScanGauge Plus 及 MaxiScan MS509,兩件貨品連同匯率及送到香港的運費大概 $900。

    這個是 ScanGauge Plus

    ScanGauge Plus 的功能很多,包括實時油耗、水溫、進氣溫度、轉數、節氣門開啟角度等等..... 還可以讀取固障碼及清除固障碼,在我的 NZE 121 安裝後操作正常。

    另一個是 MaxiScan MS509

    這個沒什麼特別,用作讀取固障碼及清除固障碼,測試後操作正常。


  • Shell Script 輸出顏色文字

    Posted on August 24th, 2011 Sam Tang No comments

    Shell Script 可以控制輸出文字的顏色,做法與 html 相似,只是使用 ANSI escape codes 控制顏色輸出。顯示顏色文字的格式如下:

    \33[ 樣式 ; 文字顏色 ; 背景顏色 m
    輸出文字
    \33[0m

    以下是樣色、顏色及背景顏色的可供選項:

    文字樣式:
    0 一般樣式
    1 粗體
    4 加底線
    5 灰底
    7 文字及背景顏色對調

    文字顏色:
    30 黑色
    31 紅色
    32 綠色
    33 黃色
    34 藍色
    35 紫色
    36 青綠
    37 白色

    背景顏色:
    40 黑色
    41 紅色
    42 綠色
    43 黃色
    44 藍色
    45 紫色
    46 青綠
    47 白色

    以下是在 shell script 的使用方法:

    PHP:
    1. #!/bin/bash
    2. # This script echoes colors and codes
    3.  
    4. echo -e "\n\033[4;31mLight Colors\033[0m  \t\t\033[1;4;31mDark Colors\033[0m"
    5.  
    6. echo -e "\e[0;30;47m Black    \e[0m 0;30m \t\e[1;30;40m Dark Gray  \e[0m 1;30m"
    7. echo -e "\e[0;31;47m Red      \e[0m 0;31m \t\e[1;31;40m Dark Red   \e[0m 1;31m"
    8. echo -e "\e[0;32;47m Green    \e[0m 0;32m \t\e[1;32;40m Dark Green \e[0m 1;32m"
    9. echo -e "\e[0;33;47m Brown    \e[0m 0;33m \t\e[1;33;40m Yellow     \e[0m 1;33m"
    10. echo -e "\e[0;34;47m Blue     \e[0m 0;34m \t\e[1;34;40m Dark Blue  \e[0m 1;34m"
    11. echo -e "\e[0;35;47m Magenta  \e[0m 0;35m \t\e[1;35;40m DarkMagenta\e[0m 1;35m"
    12. echo -e "\e[0;36;47m Cyan     \e[0m 0;36m \t\e[1;36;40m Dark Cyan  \e[0m 1;36m"
    13. echo -e "\e[0;37;47m LightGray\e[0m 0;37m \t\e[1;37;40m White      \e[0m 1;37m"


  • Unix 及 Windows 文字檔案轉換

    Posted on August 23rd, 2011 Sam Tang No comments

    在 Unix 及 Windows 裡面所儲存的文字檔案,最大分別是換新一行的顯示。Unix 會使用 EOL 作為跳行;而 Windows 則會使用 Ctrl-m (^M)。在 Linux 下可以用 dos2unix 及 unix2dos 將 Unix 及 Windows 的文字檔轉換:

    $ unix2dos unix_text.txt win_text.txt

    以上指令就會將 unix_text.txt 轉換成 windows 格式,並儲存到 win_text.txt,如果要將 windows 文字檔轉成 unix 文字檔,只要這樣:

    $ dos2unix win_text.txt unix_text.txt


  • Linux — 檢視 kernel module (驅動程式) 版本

    Posted on August 22nd, 2011 Sam Tang No comments

    要檢視 Linux 下 kernel module (驅動程式) 的版本,可以透過 modinfo 指令實現。首先要知道要查詢的 kernel module 名稱,輸入 lsmod 指令使會列出所有載入的 modules。

    例如要找出 mptscsih 所使用的版本,只要輸入:

    # modinfo mptscsih

    然後系統便會列出關於 mptscsih 所資訊,其中 Version 就是 module 的版本。


  • Linux — 列出一個進程正在使用的檔案

    Posted on August 19th, 2011 Sam Tang No comments

    要找出一個進程正在使用的檔案,首先要知道檔案的 process ID,可以用 ps 指令實現:

    # ps aux | grep mysql

    記下進程的 process ID 後,可以透過 /proc 檔案系統或 lsof 指令查詢,它們的使用方法如下:

    /proc
    假如 process ID 為 4252,只要用 ls 指令查視 /proc/4252/fd 目錄:

    # ls -l /proc/4252/fd

    lsof 指令

    # lsof -a -p 4252


  • 阻檔嘗試入侵的 IP — Fail2Ban

    Posted on August 17th, 2011 Sam Tang No comments

    Fail2Ban 是一套用 Python 寫成的系統安全工具,它會監察伺服器的紀錄檔,當出現多次登入錯誤後,便會觸發一些安全動作,例如將 IP 封鎖或用 Email 通知系統管理員等。Fail2Ban 相當具彈性,可以針對自己的需求設定不同的過濾規則,而 Fail2Ban 已經內建多個過濾規則,包含一些熱門伺服器軟件的過濾規則,支援 sshd, web server, ftp server, dns server 等。

    安裝方法:

    1. Fail2Ban 是以 Python 寫成,所以要先確定系統有安裝 Python,在 Redhat 安裝 Python 的方法是:
    # yum install python python-devel gamin-python

    2. 然後安裝 EPEL Repos 及 Fail2Ban

    Centos 5 x86_64:
    # rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm

    CentOS 5 i386:
    # rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm

    CentOS 4:
    # rpm -Uvh http://download.fedora.redhat.com/pub/epel/4/i386/epel-release-4-10.noarch.rpm

    安裝 fail2ban:
    # yum install fail2ban

    設定方法:
    安裝 Fail2Ban 後,可以開啟 /etc/fail2ban/jail.conf 進行設定,主要的幾個設定為:

    ignoreip = 127.0.0.1 ( 忽略的 ip )
    bantime = 86400 ( 封鎖 ip 的時間, 以秒為單位, 這裡是 1 天 )
    findtime = 600 ( 錯誤登入的時間 )
    maxretry = 3 ( 在 findtime 時間內發生的錯誤發入次數 )

    設定 SSHD
    在 /etc/fail2ban/jail.conf 內找到 [ssh-iptables] 段落,將 enabled 設定成 true,例如:

    [ssh-iptables]
    enabled = true
    filter = sshd
    action = iptables[name=SSH, port=SSH, protocol=tcp]
    logpath = /var/log/secure
    maxretry = 3

    修改檔案後,要重新啟動 Fail2Ban:
    # /etc/rc.d/init.d/fail2ban restart

    要觀察 Fail2Ban 的狀態,可以查看紀錄檔 /var/log/fail2ban.log,或者用 iptables 查看:
    # iptables -nvL


  • 透過 htaccess 設定 Character Set

    Posted on August 15th, 2011 Sam Tang No comments

    要設定網站的 Character Set,除了在 httpd.conf 設定外,還可以在 .htaccess 對個別網站設定,格式如下:

    AddDefaultCharset utf-8

    以上這行便會設定網站預設使用 utf-8 編碼,如果只想對特定檔案設定 Character Set,可以這樣做:

    AddCharset utf-8 .html .htm .css .js .xml .json .rss

    這樣就可以設定 .html, .htm, .css, .js, .xml, .json 及 .rss 的預設 Character Set 使用 utf-8.


  • MySQL 效能優化工具 — MySQLTuner

    Posted on August 9th, 2011 Sam Tang No comments

    MySQLTuner 是一個針對 MySQL 效能的分析 Perl script,它會根據採集到的數據,給予修改 my.cnf 的設定值建議,從而改善 MySQL 的執行效率。

    要執行 MySQLTuner 十分簡單,只要下載後並給予執行權限便可直接執行:

    wget http://mysqltuner.com/mysqltuner.pl
    chmod +x mysqltuner.pl

     
    然後便可以直接執行 mysqltuner.pl:

    ./mysqltuner.pl

     
    這時 MySQLTuner 會詢問 mysql 的管理員用戶名稱及密碼,然後便會採集數據並產生報告。而報告的最後是 Recommendations 部份,是可以在 my.cnf 的 [mysqld] 調整的設定值,修改的設定值後需要重新啟動 mysql 才會生效。