星期一, 三月 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(同一時間重覆點擊), 只要簡單加上一段就可以解決這種問題.

加此行: 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 文字取代

感謝 洪朝貴 老師 寫的 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 (連接)的意思.

星期六, 九月 10, 2005

Oracle 刪除 10分鐘前資料

Oracle 要刪除掉 10 分鐘前資料的語法,

delete from TableName where ColumnName < sysdate - 10/60/24

sysdate: Oracle 內建系統時間的參數(Define)

星期日, 六月 26, 2005

PHP 日期轉換

PHP 抓昨天日期的程式碼

date("d/m/y", time()-24*3600);

其它一些日期 code 的應用.

Mysql日期和時間函數不求人
所有 Mysql 日期函數 應該全都用到了吧.. XD

 (閱讀全文)

星期五, 六月 10, 2005

每 n 個字加 WBR

若是連續的英文字(或網址), 在整個頁面顯示上是不會斷行的, 會把整個頁面撐開.

這時後就要使用 <wbr> 的 tag(或塞空白), 大約每 30 個字就塞一個. 是塞空白可能會影響到原始資料, 還是加 <wbr> 比較好.

 (閱讀全文)

星期二, 五月 17, 2005

Perl 印出 hash 和 array

Perl 要印出 hash 的全部內容, 有以下幾種方法:

  1. while(my ($key, $val) = each(%hash)) { print "$key $val" }
  2. %hash = qw / car 600k bike 70k /; print $_ , $hash{$_} , "\n" foreach (keys %hash);
  3. print "$_ $hash{$_}\n" foreach (keys %hash);
  4. print "$_ $h{$_}\n" for keys %h;

Perl 印出 Array 的內容:

  1. print $_."\n" for @a;
  2. print @a;
  3. push @a, split for <>; print @a;

星期三, 五月 11, 2005

PHP get Global Varable

php 在 4.x 版以後要抓全域變數都要用 $_POST, $_GET, $_COOKIE... etc.
雖然只要在 php.ini 中, 去設定 register_globals 就可以了,
不過為了安全考量, 還是別這樣子改比較好,
但是自己懶得打那麼長的字怎麼辦?
所以還是來寫個小程式來搞定它.

foreach ($_REQUEST as $key => $val) {
$$key = $val;
}
這是全域的處理法, 還是不太建議使用,

因為這就跟之前一樣意思了, 還是有限制的使用比較好,

自己一定知道前一頁是如何傳送變數過來的,

所以用以下此程式碼會比較好一點.

foreach ($_POST as $key => $val) {
$$key = $val;
}

$_POST 可改為 $_COOKIE, $_SESSION, $_GET ... 等.

星期三, 五月 11, 2005

php_flag in .htaccess

看了 php_flag in .htaccess 這篇文章, 相當的實用.

htaccess 還有很多的功能, 簡單的來列一些.

ex:

DirectoryIndex index.html index.htm index.php
AddType application/x-httpd-php .html .htm
php_value auto_prepend_file /.../refer.php
php_value default_charset utf-8
上面四行意思為.

  1. 此頁面預設的頁面要抓哪個. 依序排列.
  2. 將 .html, .htm 也當 .php 一樣, 輸出前要經過處理.
  3. 在每個檔案前面都加上 refer.php
  4. 設定預設語系為 UTF-8
 (閱讀全文)

星期三, 五月 04, 2005

CSS and Html 編碼問題

CSS file 若是 Big5 編碼, 網頁頁面是 UTF-8 編碼, 會發現 CSS 完全沒有作用.

因為 瀏覽器會判斷不出來, 而無法轉換. 因此那 CSS 會 load 不進來.

CSS 樣式表的編碼 要 跟網頁編碼 都一樣才行.

星期二, 四月 26, 2005

Html: label (radio bottom)小技巧

<input type="radio" id="abc" /><label for="abc">這是oo</label>
<input type="radio" id="def" /><label for="def">這是xx</label>
<label><input type="radio">這是oo</label>
<label> <input type="radio">這是xx</label>

用 label tag 能做到, 並非一定要點到圓圈的 Radio Button才能選取, 只要點到文字就可以選擇到 radio 的圈圈了~~

使用 label

沒用 label

這是oo 這是xx