星期三, 六月 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 壓縮(濾空白, 合成一行等.)都做好了.
在取得檔案後, yui/build/reset 裡面有兩個檔案, reset.css 和 reset-min.css, reset-min.css 就是壓縮過的 CSS file.
使用方法:
- 解壓縮後, 將 reset-min.css 拷到 css template path.
- 改個名字~ mv reset-min.css reset.css (隨興囉~)
- 在頁面 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")
- cvs checkout trunk # 先把 trunk checkout 出來.
- 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 有分兩種方法:
- BEGIN 直到 COMMIT, ROLLBACK 結束
- SET AUTOCOMMIT=0 直到 SET AUTOCOMMIT=1 結束
兩者差別在於:
- 使用 BEGIN 是當下的做 Transaction 的功能, 一直到 COMMIT 或 ROLLBACK 為止.(之後一樣是會 AUTO COMMIT)
- 使用 SET AUTOCOMMIT 的話, 只要設 0 就是 "在這次的 Connection" 都當做 AUTOCOMMIT是關閉的, 不管做幾次 COMMIT, ROLLBACK 都一樣, 直到設為 1 才算開啟 AUTO COMMIT.
不過以上的方法, 都要小心是否要做 Read Lock 的問題.
(閱讀全文)星期一, 三月 13, 2006
星期四, 三月 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 (連接)的意思.



