目前分類:IT World Notes (61)
- Jan 31 Sun 2010 00:45
[PHP] PDO I
- Jan 24 Sun 2010 23:03
[PHP] 函數
取整數函數
round($n) 四捨五入
ceil($n) 無條件進位
floor($n) 無條件捨去
php裏面轉換大小寫strtolower() , strtoupper()
mysql裏面轉換大小寫 ucase() , lcase()
- Jan 22 Fri 2010 15:14
[PHP] 來源 IP 及國家代碼一覽表 The IP to Country Database
想知道來參觀您的網站的人來自於那個國家嗎?雖然網路上有提供許多類似的計數器服務了。
不過有時候會想針對這些東西做統計,可以搭配許多有趣的功能。
找了半天,發現了 The IP to Country Database 這個地方,它的資料庫一直有在持續更新,
最近一次更新是 2010 年 01 月 12 日。
- Jan 18 Mon 2010 23:19
[Drupal] 7個步驟讓您創建專屬的Drupal版型
以下將介紹使用Zen來建立自己的theme,zen theme是一個很容易擴充子theme且廣受歡迎的版型。
請您注意,最好不要修改zen/zen檔案夾下的檔案,請您依據以下的步驟操作。
0.請您先下載zen,並解壓縮到sites/all/themes下
1.將STARTERKIT檔案夾複製到 sites/all/themes下,並更改檔案夾名稱為您想要的名稱:比如您命名theme為abcd,那麼請將sites/all/themes/zen/STARTERKIT資料夾複製出來,更改名稱後,就會有sites/all/themes/abcd檔案夾了。
2.在您新建的目錄中,請您將STARTERKIT.info改名為您目錄名稱。然後請您開始編輯.info檔,將檔案中所有STARTERKIT改為您的目錄(版型)名稱。例如:延續剛剛例子,我們將abcd/STARTERKIT.info改為abc/abcd.info。 然後編輯abcd.info時,將STARTERKIT.css改為abcd.css, 更改”name = ”的內容為”ABCD”,還有更改”description = ” 為 “一個zen的子版型”
3.接下來我們要決定layout了,zen/zen中有兩個css與layout有關,一個是zen/zen/layout-liquid.css(變動的)另一個是zen/zen/layout-fixed.css(固定的),請您選擇需要的layout然後複製其檔案到sites/all/themes/abcd檔案夾下,並將檔名改為layout.css。
4.將zen/zen/print.css複製到sites/all/themes/abcd檔案夾下。
5. 將zen/zen/zen.css複製到sites/all/themes/abcd檔案夾下並且更改檔名為sites/all/themes/abcd/abcd.css。
6.編輯sites/all/themes/abcd檔案夾下的template.php 及 theme-settings.php兩個檔案。請將兩檔案中所有”STARTERKIT”改為”abcd”
7.登入網站後,請到管理 > 網站建置 > 版型 (admin/build/themes)中啟用您剛剛新建的abcd版型。
- Jan 16 Sat 2010 12:19
[DB] PostgreSQL note
# apt-get install postgresql phppgadmin
# su - postgres
建立管理者帳號
# createuser --password -a -d admin
密碼:
- Jan 16 Sat 2010 01:20
[Linux] Debian Mirror APT Site
有是您的組織單位裡不止一台 Debian Linux,每一台都要連外更新又浪費頻寬
debmirror 這個套件,可以讓您的其中一台 Debian Linux Server 成為 APT Source Site。
# apt-get install debmirror
# gpg --keyring /usr/share/keyrings/debian-archive-keyring.gpg --export| gpg --import
or
# gpg --keyserver keyring.debian.org --recv-keys 6070D3A1
# cp /usr/share/keyrings/debian-archive-keyring.gpg ~/.gnupg/trustedkeys.gpg
將底下指令加入排程就可以定期 mirror
debmirror -p -v -a i386 -d lenny -e rsync -r :debian -h ftp.tw.debian.org /var/www/debian
debmirror -p -v -a i386 -d lenny/updates -e http -r /debian-security -h security.debian.org /var/www/security
debmirror -p -v -a i386 -d lenny/volatile -e http -r /debian-volatile -h volatile.debian.org /var/www/volatile
修改 apt source.list
deb http://localhost/debian/ lenny main non-free contrib
deb-src http://localhost/debian/ lenny main non-free contrib
deb http://localhost/security/ lenny/updates main contrib non-free
deb-src http://localhost/security/ lenny/updates main contrib non-free
deb http://localhost/volatile lenny/volatile main contrib non-free
deb-src http://localhost/volatile lenny/volatile main contrib non-free
- Jan 14 Thu 2010 20:02
[html] table
表格標籤就是TABLE 基本結構為:
CODE
<TABLE>
<TR><TD></TD><TD></TD></TR>
<TR><TD></TD><TD></TD></TR>
</TABLE>
TR是指行(列),有幾個TR就有幾行。TD、TH則是欄的意思,每行中若有一個TD、一個TH則會有兩欄。因為TD和TH其實是同樣的東西,只是TH會將此格中的文字置中且加粗。
- Jan 12 Tue 2010 15:58
[Linux] Wget Mirror Site
我把一些 mirror 的時候用的到的參數說明一下...
例如,
我要 mirror http://www.php.net
當我第一次 mirror 的時候,
我會下:
wget -bcm -t0 -Yon http://www.php.net
-b : 在背景跑 wget
-c : 續傳
-m : 目錄安排完全按照被 mirror 端
-t : 斷線重試時間
-Y : 是否用 proxy (必須要在 shell 裡面設定 http_proxy 這個環境變數)
- Dec 23 Wed 2009 03:56
另一種AMP
- Dec 19 Sat 2009 14:14
[Web] 透視 WebMVC
轉載自 http://www.jaceju.net/resources/webmvc/
透視 WebMVC
Jace Ju 2007/03/16
前言
以往我所開發的 Web 專案,大部份都是把核心放在操作 HTML ;就算後來使用了 Smarty ,卻還是迷失在視覺為重的設計觀點裡,使得後續開發與維護都變得非常麻煩。後來我自己歸納出問題發生的原因,絕大部份在於我接觸的專案常常是「畫面先行」。
「畫面先行」是由視覺設計人員來主導專案的架構,而這個架構則通常是因應客戶在網站流程上的要求而建立的;這也使得我在開發程式時就必須地採用他們決定好的頁面來套用程式,最後的結果就是導致重複的業務邏輯遍布在整個專案裡。
不過就算使用了 Smarty ,這種問題也還是沒有得到更進一步的解決。原因就在於我只是把 PHP 程式和 HTML 頁面拆開,而實際上同樣的業務邏輯卻沒有能夠包裝起來重複使用。直到我接觸了物件導向的觀念後,我才驚覺這種設計真的是不堪一擊。
於是我很認真地使用物件導向來封裝我的業務邏輯,並天真地以為讓它們能夠 reuse 後,程式的複雜度就會降低;但是逐漸地我發現到,我花在修改這些物件的時間竟然變得比以前長,我必須不斷地為它加入不同的判斷條件,好讓它應付所有可能發生的變化。可是這不是我所希望發生的結果呀!到底為什麼會變成這樣呢?
我發現很多時候我讓物件在發生錯誤時,自行丟出一個訊息給瀏覽器,或是透過 Smarty 將這些訊息包裝成畫面。但是過了幾個月之後的改版,這個物件的重用性變得越來越差,而且也變得越來越大。另外它跟 Smarty 的耦合性也太高,畢竟有時候我根本不想在這個時候使用 Smarty 丟出畫面,而是想讓上一層程式自己去決定!
後來我歸納出這一切問題的原因,都是我錯把 Smarty 當成主角 - 也就是網站架構的核心!
剛接觸 Smarty 時,我同時也耳聞了 MVC 這個設計模式。不過那時剛剛接觸物件導向,也還不瞭解什麼是設計模式;只知道使用 Smarty 的前輩們倡導大型的應用項目都應該朝向 MVC 的架構去設計。雖然我那時仍不清楚 MVC 的核心概念,然而這個開發方式卻帶給我一個很大的思考空間:為什麼要把一個應用程式分成三個部份?而在 Web 上這種開發方式也行得通嗎?在參考過一些書籍,這些問題仍似有若無的存在我的心中,所以我的程式架構依然沒有什麼改進。
直到在寫「 PHP Smarty 樣版引擎」這本書時,我也剛好讀到了「深入淺出設計模式」這本好書;而該書對 MVC 模式的介紹,正好解開我長年以來的疑惑。
原來真正的 MVC 是將「資料處理邏輯」、「程式流程」與「資料呈現」三者分離,而 Smarty 只是扮演了「資料呈現」的角色而已!
不過懂是懂了,但要如何將這個概念融入 Web 開發中,這點讓我覺得很頭痛。雖然發現很早就有人把 MVC 帶進 PHP 裡了,只可惜用的人不多,文件也比較少。所以在我的書中的 MVC 架構用得非常簡陋,只能說是 WebMVC 的雛形而已。而這時 Ruby on Rails 剛好在網路界萌芽,號稱將 MVC 帶入了 Web 開發中;並且首開先例,用影片來示範一個 Blog 系統的誕生,所以我也不可免俗地去抓回來玩看看 (我想很多寫 Java 的人大概就是這點所吸引) 。可惜我一看到 Ruby 那個奇怪的語法,就覺得看不下去了,所以只是照本宣科地把範例作一作,最後不了了之 (後來想一想真是可惜) 。
直到又過了好一陣子,在 CakePHP 、 Code Igniter 等號稱 PHP 界的 Rails 開發框架出現後,我便興致勃勃地去下載回來研究。而參考了它們的範例後,這時我才猛然醒悟!原來 Web 上的 MVC 架構是長成這個樣子!後來為了專案需要,更把 LifeType 的程式碼追了一遍,這才發現 WebMVC 竟是如此彈性而富有變化!
由於深刻體認到物件導向所帶給我的衝擊,我不得不承認以往我所嚮往的開發方式仍然有很大的改進空間。所以我想就從架構的改進開始,讓自己重頭去認識新的 Web 開發方式。
- Dec 19 Sat 2009 13:03
[Vim] 刪除列
sed -e '12d' xxx # 將第 12 行清掉
sed -e '1,5d' xxx # 將第 1 ~ 5 行清掉
sed -e '1,5d' -e 's/test/check/' # 第 1 ~ 5 行清掉, 並將 test 取代成 check
awk '!(NR>=1 && NR<=5){print $0}' xxx # 將第 1 ~ 5 行清掉
- Dec 16 Wed 2009 01:12
[Linux] xargs 應用
xargs 可以用來連續執行同一個指令, 然後把另一個指令輸出的結果當成這個指令的參數:
例如清除暫存檔時:
$ find -name “*~” | xargs rm
或者作檔案內容的搜尋:
$ find -name “*.php” | xargs grep -l test
上面這個例子是以目前目錄開始, 找出所有內含 test 的 *.php 檔.
------------------------------------------------------------------------果然人老人記憶會變差 趕快把一些東西記錄下來
- Dec 13 Sun 2009 20:04
[Linux] Debian notes
PPPOE Config
pon dsl-provider 建立 DSL連線
poff 中斷連線
================================
eth static IP set
auto eth0
iface eth0 inet static
address 192.168.50.10
netmask 255.255.255.0
================================
APT LIST
deb http://ftp.tw.debian.org/debian/ lenny main non-free
deb-src http://ftp.tw.debian.org/debian/ lenny main
deb http://security.debian.org/ lenny/updates main non-free
deb-src http://security.debian.org/ lenny/updates main
deb http://volatile.debian.org/debian-volatile lenny/volatile main non-free
deb-src http://volatile.debian.org/debian-volatile lenny/volatile main
========================================================
- Dec 02 Wed 2009 18:37
常用 CSS 樣式
【長度單位】
CSS可使用長度單位 | ||
單位 | 單位說明 | 範例 |
pt | Point,就像是Word裡面的Point一樣大小 | font-size:10pt |
px | Pixels,依您螢幕解析度而決定大小 | font-size:10px |
pc | Pica,6個Pica是一英吋 | font-size:10pc |
mm | 公厘,用過尺...這個設定值完全不會因為其他設定而改變 | font-size:10mm |
cm | 公分,不會因為使用者設定而改變 | font-size:10cm |
% | 百分比,大部分是指所在位置寬度或者長度百分比 | font-size:10% |
- Nov 24 Tue 2009 00:58
[PHP] Cookies
轉錄自 http://km.tceb.edu.tw/~wsx/php/ch7-3.htm
Cookie函數 | ||||||||||||||||||||||
|
- Nov 24 Tue 2009 00:32
[PHP] Session
轉錄自 http://km.tceb.edu.tw/~wsx/php/ch7-2.htm
session 函式 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
如果要改變這些設定,可直接修改 php.ini 再重新啟動 Web Server,也可以利用 ini_set( )函數來設定,設定方式如下:
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
使用Session時,不外乎三個程序:
當然,如果想知道session的狀況,例如:
|
- Nov 23 Mon 2009 23:30
PHP & MySQL notes
一、連結資料庫
1. 建立連線:
$link = mysql_connect("Mysql主機名稱", "帳號", "密碼")
or die("無法連接資料庫: " . mysql_error( ));
2. 選擇資料庫:
mysql_select_db("資料庫名稱") or die("無法選擇資料庫");
二、執行SQL語法
1. 建立SQL語法
(查詢) $query = "SELECT * FROM my_table";
(新增) $query = "INSERT INTO my_table (c1,c2,...) VALUES ( value1,value2, ...)";
(修改) $query = "UPDATE my_table SET c1='abc' WHERE id='100' ";
(刪除) $query = "DELETE FROM my_table WHERE id='100' ";
2. 送出SQL語法到資料庫系統
$result = mysql_query($query) or die("無法送出" . mysql_error( ));
三、取得執行SQL語法後的結果 (指查詢部份)
while ( $row = mysql_fetch_array($result) ) {
echo $row[0]."<BR>";
}
四、釋放與Mysql的連線
mysql_free_result($result);
- Nov 20 Fri 2009 00:27
[PHP] 製作登入頁面
轉錄自 http://openlyu.com/forums/index.php?topic=1930.0
這個教學會教你怎麼用 PHP 和 MySQL 來製作會員的登入頁面。
它會用 cookie 來儲存會員的 session id,但不會用 PHP 內建的 session 功能。
完成之後只需要在任何的網頁裡面包含另一個驗證檔案就可以了。
這個教學共有五個檔案:
config.php - 登入資料庫的資料
login.php - 輸入帳號和密碼的網頁
actionlogin - 驗證會員的檔案
incsession.php - 檢查會員是否已登入
test.php - 需要驗證才能登入的網頁
- Nov 19 Thu 2009 13:52
JAVASCRIPT格式化輸出數字
function FormatNumber(num,decimal){
//=========================================================================='
//功能說明:傳入數字,及小數位數,傳回格式化後數字字串 '
//傳入參數: '
// num :傳入的數字。 '
// decimal :保留小數位數。 '
//傳回參數:Error : Return false '
// Success : Return 格式化後數字字串 '
//=========================================================================='
var tmpNumber1=num.toString();//轉成文字型態
var numlen=tmpNumber1.length;//取得字數
var decimalIdx=tmpNumber1.indexOf('.');//取得小數點所在位置
var Intlen;
var decimallen;
if(decimalIdx!=-1)
decimallen=numlen-decimalIdx-1;//依據小數點位置,算出整數長度
else
decimalIdx=0;
var tmpNumber2;
if(decimal!=0)
{
tmpNumber2 = num*(Math.pow(10,decimal));
tmpNumber2=Math.round(tmpNumber2)/(Math.pow(10,decimal));
}
else
tmpNumber2 = tmpNumber1 + '.0';
//四捨五入到指定位置結束
// window.alert('四捨五入後的數字:' + tmpNumber2);
var decimalNum='';//宣告小數點後文字
if(tmpNumber1.indexOf('.')!=-1)
decimalNum = tmpNumber2.toString().substring(tmpNumber2.toString().indexOf('.')+1,tmpNumber2.toString().indexOf('.')+decimal+1);//取得小數點位數
// window.alert('小數點文字:' + decimalNum);
var rtndecimal=decimalNum;
for(j=0;j<(decimal-decimalNum.length);j++)
rtndecimal = rtndecimal + '0';
// window.alert('補0後的小數後文字:' + rtndecimal);
var IntNum;//宣告整數文字
// window.alert('小數點位置:' + tmpNumber2.toString().indexOf('.'));
//取得整數文字
IntNum=tmpNumber2.toString().substring(tmpNumber2.toString().indexOf('.'),0);
if(tmpNumber2.toString().indexOf('.')==-1)
IntNum = tmpNumber2.toString();
if(tmpNumber2.toString().indexOf('.')==0)
IntNum = '0';
// window.alert('整數文字:' + IntNum);
var lpcnt = Math.floor(IntNum.length/3);
if(IntNum.substring(0,1)=='-')
lpcnt--;
// window.alert(lpcnt);
var tmpNumber3='';
for(i=0;i<lpcnt;i++)
{
tmpNumber3=',' + IntNum.substring(IntNum.length,IntNum.length-3).toString() + tmpNumber3;
IntNum=IntNum.substring(IntNum.length-3,0);
}
// window.alert('格式化後的整數:' + tmpNumber3)
tmpNumber3 = IntNum + tmpNumber3;
if(tmpNumber3.substring(0,1)==',')
tmpNumber3 = tmpNumber3.substring(1,tmpNumber3.length);
return tmpNumber3 + '.' + rtndecimal;
}
- Nov 18 Wed 2009 14:54
JavaScript 事件列表
事件 說明
onabort 圖片下載被中斷時
onblur 當游標離開元件時
onchange 當使用者更改欄位內容時
onclick 滑鼠單擊物件時
ondblclick 滑鼠雙擊物件時
onerror 載入文件或圖片發生錯誤時
onfocus 當游標定位在元件上時
onkeydown 當鍵盤的按鍵被壓下時
onkeypress 當鍵盤的按鍵被壓下再放開時
onkeyup 當鍵盤的按鍵被放開時
onload 當網頁或圖片載入完成時
onmousedown 滑鼠按鍵被壓下時
onmousemove 滑鼠指標移動時
onmouseout 滑鼠指標離開物件時
onmouseover 滑鼠指標移到物件上時
onmouseup 滑鼠按鍵被放開時
onreset 當reset按鍵被點擊時
onresize 當視窗或框架被改變大小時
onselect 當文字被選取時
onsubmit 當sumbit按鍵被點擊時
onunload 當使用者離開畫面時