網絡技術日誌

關於 PHP, Linux, Open Source 及個人生活記載的網誌。
RSS icon
  • ScanGauge 走線安裝

    Posted on January 25th, 2012 Sam Tang No comments

    早前在淘寶買的 ScanGauge 很好用,但當初只是將它貼在標板下面,要看裡面的資訊很不方便,昨天將它安裝到安響的空格內,雖然不是很完美,但瀏覽資訊時就方便多了。

    ScanGauge Plus


  • .htaccess – Invalid command ‘AuthUserFile’ 錯誤

    Posted on January 17th, 2012 Sam Tang No comments

    在主機上的 Apache 用 .htaccess 設定了密碼保目錄,但發覺升級 Apache 後就出現 Internal Server Error,再查看 apache 的 error log,發現以下的錯誤訊息:

    .htaccess: Invalid command ‘AuthUserFile’, perhaps misspelled or defined by a module not included in the server configuration

    解決方法只要開啟 httpd.conf 並開啟 authn_file module 便可以,打開 httpd.conf,找到 mod_authn_file 一行並將最開端的註釋符號刪除,改成:

    LoadModule authn_file_module modules/mod_authn_file.so

    然後重新啟動 apache 便完成了。


  • Linux 下找出體積最大的檔案/目錄

    Posted on January 5th, 2012 Sam Tang No comments

    當發現系統硬碟空間突然上升時,想知道那個檔案或目錄佔用最多空間,可以用 du + sort + head 指令完成,它們的作用分別為:

    du: 計算目錄所使用的空間
    sort: 將輸入的資料排序
    head: 將輸入資料的最開頭幾行資料輸出

    假如發現 /home 裡面的空間使用異常時,可以用以下指令查看 /home 裡面頭 10 個使用最多硬碟空間的檔案或目錄:

    # du -a /home | sort -n -r | head -n 10

  • MySQL: [ERROR] Unknown character set 問題

    Posted on January 1st, 2012 Sam Tang No comments

    早前升級一台主機的 MySQL Server,升級後發現部份資料表無法開啟,報出的錯誤訊息是:

    Unknown character set: ‘BIG5′

    出現這個問題的原因是新版本 MySQL 安裝時沒有安裝額外的字集,而對上一個版本的 MySQL 是用 YUM 安裝,所有透過套件工具安裝的 MySQL 也會預設安裝所有字集,解決方法是重新編譯 MySQL 並加上所有的字集的選擇 –with-extra-charsets=complex,編譯語法如下:

    ./configure — prefix=/usr/local/mysql –with-extra-charsets=complex

    如果在 FreeBSD 遇上這個問題,而 FreeBSD 內的 MySQL 是透過 ports 安裝的話,便要使用 WITH_XCHARSET=all 參數:

    make WITH_XCHARSET=all install clean


  • 汽車保養週期

    Posted on December 28th, 2011 Sam Tang No comments

    這是根據我自己的駕駛習慣整理出來的汽車保養週期,駕駛模式大約為 70% highway, 30% 市區,大多情況都不會滿坐,並溫和駕駛。這個保養週期會根據車種的不同及駕駛風格而有所區別:

    機油及機油濾芯: 5000KM 或半年
    ATF 波箱油: 20000KM 或 1 年
    波箱隔: 50000KM
    火咀: 15000KM (白金及長效型銥金可 100000KM 才換,競技型銥金則 20000KM)
    風隔(空氣濾芯): 5000KM
    水箱水: 20000KM 或 1 年
    煞車油: 20000KM 或 2 年
    電油隔(汽油濾芯): 50000KM


  • Linux 下編譯 Apache 的 mod_rewrite

    Posted on December 28th, 2011 Sam Tang No comments

    要為 Apache 加載 mod_rewrite 模組,如果 Apache 並未安裝,可以在編譯時加上 –enable-rewrite 便可以,但如果 Apache 已經安裝好,而又不想重新編譯 Apache 的話,可以用以下方法:

    1. 首先 cd 到 Apache 的源代碼目錄並到 mod_rewrite.c 檔案,

    1. 在apache的源码安装目录中寻找mod_rewrite.c文件

    # find ./ -name mod_rewrite.c

     
      
    2. 進入 mod_rewrite.c 的目錄並用 apxs 編譯 mod_rewrite.c

    # cd PATH/to/mod_rewrite.c
    # /usr/local/apache/bin/apxs -c mod_rewrite.c
    # /usr/local/apache/bin/apxs -i -a -n mod_rewrite mod_rewrite.la

     

    3. 編譯好 mod_rewrite.c 後,便開啟 httpd.conf 加入以下內容:

    LoadModule rewrite_module modules/mod_rewrite.so

    然後重新啟動 Apache 便可以了。


  • Centos 安裝及設定 MRTG

    Posted on December 22nd, 2011 Sam Tang No comments

    MRTG 是一套十分出名的網路流量監察工具,它會透過 SNMP 協定取得網路流量資料,並以網頁介面輸出。要安裝 MRTG,需要安裝以下套件:

    mrtg: MRTG 的主程式
    net-snmp: NET-SNMP 內建幾個 SNMP 工具,包括 snmpd 及 snmptrapd daemons 及文檔等。
    net-snmp-utils: 內建一些 NET-SNMP 工具。

    以下是在 Centos 安裝及設定 MRTG 的步驟:

    1. 安裝 MRTG:

    在 Centos 下輸入以下指令安裝所需套件:

    # yum install mrtg net-snmp net-snmp-utils

     
    2. 設定 SNMP:
    開啟 /etc/snmp/snmpd.conf,加入以下下一行: Read the rest of this entry »


  • service httpd does not support chkconfig 問題

    Posted on December 21st, 2011 Sam Tang No comments

    在 Redhat 或 Centos 下手動編譯安裝 Apache 後,將 apachectl 放到 init.d 裡面,然後用 chkconfig 自動啟動,即以下動作會得出 service httpd does not support chkconfig 錯誤:

    # cp /usr/local/apache/bin/apachectl /etc/rc.d/init.d/httpd
    chkconfig httpd on

     
    service httpd does not support chkconfig

    解決方法是開啟 /etc/rc.d/init.d/httpd,把以下兩行加入到第二行便完成了。

    # chkconfig: 35 85 15
    # description: Apache is a World Wide Web server.


  • Redhat/Centos 架設 DNS Server

    Posted on December 19th, 2011 Sam Tang No comments

    安裝環境 Centos 5.7

    http://yacnoss.blogspot.com/2008/07/dnsbind.html

    1. 安裝 DNS 所需套件:
    只要用 yum 指令便可以一次過想所需的套件安裝。

    # yum install bind bind-chroot bind-utils caching-nameserver

     
    在預設的情況下 Centos 不會建立 named.conf,要用以下方法建立:

    # cd /etc
    grep -v ‘//’ named.rfc1912.zones > named.conf
    chown root.named named.conf
    chmod 640 named.conf

     

    2. 更新 root.zone

    到 ftp://rs.internic.net/domain/root.zone 下載最新的 root.zone 資料檔,然後放到 /var/named/var/named/ 裡面。

    然後就可以用 /etc/rc.d/init.d/named start 啟動 DNS Server。

    啟動後可以輸入以入指令測試 DNS Server 是否正常運作:

    # dig www.google.com @127.0.0.1

     
    關於在 DNS Server 加入 zone 及其他設定,可以參考以下文章:
    http://linux.vbird.org/linux_server/0350dns.php


  • Linux — 將一個用戶的進程全部 kill 掉

    Posted on December 19th, 2011 Sam Tang No comments

    當某個用戶使用過多系統資源時,可以用以下指令將他開啟的所有進程 kill 掉:

    kill -9 `ps -u USERNAME -o “pid=”`

    使用上只要將以上指令的 USERNAME 改成用戶名稱。


  • Redhat/Centos Yum 安裝 MySQL 問題

    Posted on December 16th, 2011 Sam Tang No comments

    今日在一台伺服器上升級 PHP 的版本,伺服器原來已經用 Yum 安裝了 MySQL,在手動編譯 PHP 時一直出現以下錯誤訊息:

    configure: error: mysql configure failed. Please check config.log for more information.

    原來我在編譯 PHP 時用了錯誤的參數,原本我是用 “–with-mysql=/usr/”,要將這個參數改成 “–with-mysql-dir=/usr/” 才可以編譯成功。


  • 找出隱藏的 process 及 port

    Posted on December 15th, 2011 Sam Tang No comments

    很多 rootkits 用了一些隱藏技巧,用 netstat 也找不出來,這個時候可以用 chkrootkit 這類工具掃瞄,另外還可以用 Unhide 搜索是否有不尋常的 process 及 port。
    Unhide 是一個輕巧的安全工具,可以找出 rootkit 所開啟的 process 或 TCP/UDP ports,除了 Unix 版本外,它還有 Windows 版本。

    如果是使用 Redhat,可以到 pkgs.org 下載相應版本的 rpm 檔案裝。

    在 Debian / Ubuntu 則較簡單,用 apt-get 安裝就好了。

    # apt-get install unhide

    至於使用上也是很簡單,一般上以下幾個指令就會搜索系統內隱藏的 process 及 ports:

    # unhide-posix proc
    # unhide-posix sys
    # unhide-tcp

  • 升級 WordPress 後的亂碼問題

    Posted on December 12th, 2011 Sam Tang No comments

    昨天將 WordPress 從 2.0.x 升級到 3.2.1 後發覺全站的中文變成亂碼,但恢復舊版本的 WordPress 又可以正常顯示,那就是設定的問題。

    最根本的問題是原來的資料使用 latin 1 編碼,而 WordPress 預設是使用 UTF8 編碼,要徹底解決就要用 mysqldump 將資料匯出並修改編碼。

    但不想這麼麻煩,反正一直用得好好的,找到一個最簡單的方法是開啟 wp-config.php,找到以下兩行然後注釋掉:

    // define(‘DB_CHARSET’, ‘utf8′);
    // define(‘DB_COLLATE’, ”);


  • PHP 取得用戶真實 IP

    Posted on December 12th, 2011 Sam Tang No comments

    要用 PHP 取得用戶的 IP 十分容易,只要用 $_SERVER['REMOTE_ADDR'] 變數就可以知道用戶的 IP,但如果用戶使用了 proxy server 上網的話,$_SERVER['REMOTE_ADDR'] 只會得到 proxy 的 IP 地址。

    以下方法會使用 $_SERVER["HTTP_CLIENT_IP"] 及 $_SERVER["HTTP_X_FORWARDED_FOR"] 解決這個問題:

    PHP:
    1. <?php
    2. if (!empty($_SERVER["HTTP_CLIENT_IP"])){
    3.     $ip = $_SERVER["HTTP_CLIENT_IP"];
    4. }elseif(!empty($_SERVER["HTTP_X_FORWARDED_FOR"])){
    5.     $ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
    6. }else{
    7.     $ip = $_SERVER["REMOTE_ADDR"];
    8. }
    9.  
    10. echo $ip;
    11. ?>


  • 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. ?>