星期三, 六月 28, 2006

PHP Shell 執行不受 open_basedir 限制

PHP 的程式要在 Shell 下執行, 寫法很簡單, 只要在程式的最開頭加上如下:

#!/usr/bin/php
<?php
// ooxx
?>

記得要 chmod +x filename.php, 就可以執行了.

如果比較講究一點, 可以寫如下(以下都只寫程式第一行)

#!/usr/bin/php -q

遇到的比較嚴的 Server, 會去鎖 open_basedir(開檔、讀檔的目錄有限制) 時, 就要用以下的做法:

#!/usr/bin/php -q -d open_basedir=:.

加上 -d 的參數, 就可以不受開啟一般檔案, 不限制於 open_basedir, 不過只有在開發的時後才這樣子使用就好, 實際要上線時, 還是要限制好 open_basedir 的存取權限比較好.

星期日, 六月 18, 2006

Reset CSS - 取消 Html 原有樣式

在剛開始學 CSS 的時後, Html Tag 的原有樣式要取消是最頭大的, 正好看到 Yahoo! UI library 有 Reset CSS, 正好就是取消這些功能, 連 CSS 壓縮(濾空白, 合成一行等.)都做好了.

Yahoo! UI Library: Reset CSS

在取得檔案後, yui/build/reset 裡面有兩個檔案, reset.css 和 reset-min.css, reset-min.css 就是壓縮過的 CSS file.

使用方法:

  1. 解壓縮後, 將 reset-min.css 拷到 css template path.
  2. 改個名字~ mv reset-min.css reset.css (隨興囉~)
  3. 在頁面 head 中加上 <link rel="stylesheet" type="text/css" href="reset.css" /> 這段語法即可.
 (閱讀全文)

星期六, 五月 06, 2006

支援 XMLHttpRequest 的瀏覽器

支援 XMLHttpRequest 的瀏覽器 列表

  • Microsoft: Internet Explorer 4.0 之後版本
  • Mozilla: Firefox 1.0 之後版本
  • Netscape: 7之後版本(Mozilla M18:2001009 之後 / 1.0:20020530 之後較穩定)
  • Opera: 7.6 之後版本
  • Safari: 1.2 之後版本
  • Konqueror: 3 之後版本

取自: AJAX與Google Map API 入門實作 (書)

星期二, 五月 02, 2006

PHP header Location 寫成 function 的優缺點

我們很常用的一個寫法

header("Location: http://plog.longwin.com.tw/");

這個寫法基本上沒有什麼問題, 但是寫在 function 裡面就有些問題寫了, 詳見下述說明.

先簡單說結論就是:

若要寫成 function, 在 heade Location 下面要加 exit, 否則最好就不要寫成 function 來呼叫.

 (閱讀全文)

星期二, 四月 11, 2006

一行指令夾檔寄信(mail)

想要一行指令就把 file 夾在 mail 附件寄出的方法.

uuencode filename.zip Attachment.zip| mail -s "Subject" abc@domain
  • filename.zip : 要寄信的檔名
  • Attachment.zip: 收件者看到附件的名字
  • Subject: 信件標題
  • abc@domain: Email

星期日, 四月 09, 2006

cvs 合併 branch 回 trunk

cvs 將 branch 合併回 trunk 的做法,(cvs建分支的做法 可參考 "cvs 建分支 branch")

  1. cvs checkout trunk # 先把 trunk checkout 出來.
  2. cd trunk # 進入 trunk 的目錄中

先把書上的其它做法記一下, (可參考CVS Branch and Merge example)

  • # merge from branch to trunk
  • cvs update -j branchbasetag -j branchname
  • # merging a branch to the trunk
  • cvs update -j lastmergetag -j branchname
  • ex: cvs update -j beta_0-1_branck_root -j beta_0-1_branch
  • # merge from trunk to branch
  • cvs update -j beta_0-1_branch_root -j HEAD
  • # merging from branch to branch
  • cvs update -j branchbasetag -j otherbranch
 (閱讀全文)

星期一, 三月 27, 2006

Oracle 常用命令

Oracle 常用的指令簡單以 FAQ 的方式記錄一下:

查看 有哪些 DB(show databases)
select * from v$dbfile
查看有哪些 Table(show tables)
select * from v$tablespace
建立 DB(Tablespace)
create tablespace NAME datafile 'FILENAME.dbf' size 20M; (Create DB)
建立一個新的 USER, 並授權可連線, 建 table 等
  • create user USERNAME identified by PASSWORD;
  • grant connect to USERNAME;
  • grant resource to USERNAME;
  • conn USERNAME/PASSWOD;
  • create table t1 (c1 int);
  • insert into t1 values(1);
  • commit;

其它的等遇到問題再來做記錄囉~

 (閱讀全文)

星期四, 三月 16, 2006

MySQL InnoDB 的 Transaction 的簡易用法

MySQL 預設都會啟動 Auto Commit, 要在 InnoDB 做 Transaction 有分兩種方法:

  1. BEGIN 直到 COMMIT, ROLLBACK 結束
  2. SET AUTOCOMMIT=0 直到 SET AUTOCOMMIT=1 結束

兩者差別在於:

  1. 使用 BEGIN 是當下的做 Transaction 的功能, 一直到 COMMIT 或 ROLLBACK 為止.(之後一樣是會 AUTO COMMIT)
  2. 使用 SET AUTOCOMMIT 的話, 只要設 0 就是 "在這次的 Connection" 都當做 AUTOCOMMIT是關閉的, 不管做幾次 COMMIT, ROLLBACK 都一樣, 直到設為 1 才算開啟 AUTO COMMIT.

不過以上的方法, 都要小心是否要做 Read Lock 的問題.

 (閱讀全文)

星期一, 三月 13, 2006

cvs 建分支 branch

一個版本要做重大改變, 但舊有版本還要維持原有版本, 繼續除錯.

此時就要將版本最分支, 1個維持現有版本(trunk), 另一個分支就稱branch.

 (閱讀全文)

星期四, 三月 02, 2006

Perl 四捨五入

方法1: 自己寫 round()

sub round {
    my $val = shift;
    my $col = shift;
    my $r = 10 ** $col;
    my $a = ($val > 0) ? 0.5 : -0.5;
    return int($val * $r + $a) / $r;
}
# 於要取的位數後 +0.5, 再取整數即可.
my $a = 10.335444;
print round($a, 2);

方法2: 使用 sprintf()

my $a = 10.335444;
print sprintf("%.2f", $a);

用法可參考: Perl 5.8.0 Documentation - sprintf

星期四, 二月 09, 2006

CVS 加 TAG 標籤

要 Release 一個新版本的時後, 可以順便做個 tag, 將此 release 的各個檔案版本資訊都記錄下來, 之後要取得也可以方便取的.

CVS 要加個 tag 的方法如下:

加 tag: cvs tag tag_name
EX: cvs tag public-release-2-0-20060105-stable
取出 tag 的版本: cvs co -r tag_name output_path
EX: cvs co -r public-release-2-0-20060105-stable work/plog/

星期四, 二月 09, 2006

防止表單送出兩次又能禁止留空

寫網頁的程式最怕的就是 Double Submit(同一時間重覆點擊), 只要簡單加上一段就可以解決這種問題. (於 input 點下去的時後, 馬上將此 button disable 掉)

加此行: onclick="this.disabled=true"

Ex:
<input type="button" name="Submit" value="Submit" onclick="this.disabled=true" />

星期六, 二月 04, 2006

PHP 截字、斷字專用 function

在寫網頁的時後常會遇到 80 個字要截字, 然後超過 80 字加 "...", 未滿 80 字不加.. 等等之類的問題.

之前用 substr 的寫法如下:

$string = strip_tags($string); // 先清掉 html tag, 以免 html tag 被破壞
$string = mb_substr($string, 0, 80, 'UTF-8');
$string .= (mb_strlen($string, 'UTF-8') > 80)?'...':'';

PHP 有支援很方便的 function 可以直接達到此功能.

$string = strip_tags($string);
$string = mb_strimwidth($string, 0, 80, '...', 'UTF-8');

在 UTF-8 的環境算字數用 strlen 或 mb_strlen 都不是很準, 所以可以用另一個做法, 算字的寬度, 也是個不錯的做法

echo mb_strwidth($string, 'UTF-8'); // 算字寬度

星期四, 二月 02, 2006

Perl 文字 / 字串 取代(Regex)

感謝 洪朝貴 老師 寫的 Regular Expression.

老師的教導, 而學生當時沒有好好學習.. 需要用到時才偷偷的溜回去看老師的網頁..

真是慚愧... 慚愧之餘.... 還是趕快把語法記下來.. :p

  • 取代法1: perl -pe 's/<?/<?php/g' 檔名
  • 取代法2: perl -pe 's/<?/<?php/g' action.php > action-new.php
  • 取代法3: perl -i -pe 's/<?/<?php/g' `find . -iname '*htm*'`

取代法3 後面的 find.. 可以改用其它你想改的檔名(ex: 改成 *.php), 以上三個範例都是要將 <? 改成 <?php 的做法..

取代法3 能將所有目錄中.你想取代的檔案都取代到(靠自己多嘗試學習吧!!)

此命令是要將 InnoDB 取代成 MyISM 並將原始檔案備份成 filename.sql.bak

perl -i.bak -pe 's#InnoDB#MyISAM#g' filename.sql

星期三, 十一月 23, 2005

MySQL Update 加字串進原始欄位中

MySQL 要對某個欄位做 Update, 而主要要做的事情, 是要將新增的資料塞在那個欄位前面或後面.

以前的做法都笨笨的 Select 出來, 再結合好塞回去, 原來有個很好用的 Function 可以解決這事情.

主要用的 Function 是 CONCAT(), (MySQL 內建函數).

ex: update T1 set t = CONCAT(t,'def'); // 把 def 加在此欄後面.

CONCAT = concatenate (連接)的意思.