目前分類:IT World Notes (61)

瀏覽方式: 標題列表 簡短摘要

來源網址:http://jax-work-archive.blogspot.com/2009/04/php-pdo_26.html

James Wu 發表在 痞客邦 留言(0) 人氣()

取整數函數

round($n)  四捨五入
ceil($n)   無條件進位
floor($n)  無條件捨去

php裏面轉換大小寫strtolower() , strtoupper()
mysql裏面轉換大小寫 ucase() , lcase()

文章標籤

James Wu 發表在 痞客邦 留言(1) 人氣()

想知道來參觀您的網站的人來自於那個國家嗎?雖然網路上有提供許多類似的計數器服務了。

不過有時候會想針對這些東西做統計,可以搭配許多有趣的功能。

找了半天,發現了 The IP to Country Database 這個地方,它的資料庫一直有在持續更新,

最近一次更新是 2010 年 01 月 12 日。

James Wu 發表在 痞客邦 留言(0) 人氣()

原文網址:http://drupal.dingwow.com.cn/specialtopic/7ge-bu-zou-rang-nin-chuang-jian-zhuan-shu-de-drupalban-xing

以下將介紹使用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版型。

James Wu 發表在 痞客邦 留言(1) 人氣()

# apt-get install postgresql phppgadmin

# su - postgres

建立管理者帳號

# createuser --password -a -d admin

密碼:

James Wu 發表在 痞客邦 留言(0) 人氣()

有是您的組織單位裡不止一台 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


James Wu 發表在 痞客邦 留言(0) 人氣()

表格標籤就是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會將此格中的文字置中且加粗。


James Wu 發表在 痞客邦 留言(0) 人氣()

我把一些 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 這個環境變數)

James Wu 發表在 痞客邦 留言(2) 人氣()

有在寫網頁程式的人,想必對 AMP 這個詞應該不陌生吧。

A = Apache

M = MySQL

P = PHP

要安裝這三樣東西,對熟悉 Linux 的使用者來說,都不會太困難,

各家 distributions(Fedora Core、Debian、Ubuntu 等),

都有相關的產品包(rpm、deb)。

而對 Windows 的使用者來說,雖然都有提供 Win32 版本了,但是還要

自己一個個找,一個個去裝還要設定,對許多使用者來說太麻煩了。

所以就有好心的人把這些東西整合在一起,最為大家熟知的,

應該就是 Appserv 了。(點這裡可以下載)

James Wu 發表在 痞客邦 留言(0) 人氣()

轉載自 http://www.jaceju.net/resources/webmvc/

 

透視 WebMVC

Jace Ju 2007/03/16

前言

以往我所開發的 Web 專案,大部份都是把核心放在操作 HTML ;就算後來使用了 Smarty ,卻還是迷失在視覺為重的設計觀點裡,使得後續開發與維護都變得非常麻煩。後來我自己歸納出問題發生的原因,絕大部份在於我接觸的專案常常是「畫面先行」。

「畫面先行」是由視覺設計人員來主導專案的架構,而這個架構則通常是因應客戶在網站流程上的要求而建立的;這也使得我在開發程式時就必須地採用他們決定好的頁面來套用程式,最後的結果就是導致重複的業務邏輯遍布在整個專案裡。

以 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 開發方式。

James Wu 發表在 痞客邦 留言(1) 人氣()

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 行清掉

James Wu 發表在 痞客邦 留言(0) 人氣()

xargs 可以用來連續執行同一個指令, 然後把另一個指令輸出的結果當成這個指令的參數:


例如清除暫存檔時:
$ find -name “*~” | xargs rm

或者作檔案內容的搜尋:
$ find -name “*.php” | xargs grep -l test

上面這個例子是以目前目錄開始, 找出所有內含 test 的 *.php 檔.

------------------------------------------------------------------------

果然人老人記憶會變差 趕快把一些東西記錄下來

James Wu 發表在 痞客邦 留言(1) 人氣()

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
========================================================

James Wu 發表在 痞客邦 留言(2) 人氣()

【長度單位】

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%

James Wu 發表在 痞客邦 留言(1) 人氣()

轉錄自 http://km.tceb.edu.tw/~wsx/php/ch7-3.htm


  Cookie函數
 
 

 

 

 在PHP中,要使用Cookie的指令只有一個

setcookie ( string name [, string value [, int expire [, string path [, string domain [, int secure]]]]])
 
換個寫法:setcookie("Cookie變數名稱","Cookie數值","期限","路徑","網域","安全")

 除了Cookie的「變數名稱」參數一定要有之外,其餘可省略;參數的說明如下表:

參數名稱
參數說明
Cookie名稱(Name) Cookie的名稱,以PHP來說,就是變數的名稱,例如 cookiename 就好比 $_COOKIE['cookiename']
Cookie值(Value) 就是Cookie名稱的值
留存時間(Expire) Cookie的留存時間,以「秒」為單位,例如要留存30天,那就要用「time( )+30*24*60*60」(
time( )函數表示取得現在的時間+30天*24小時*60分*60秒) ;如果沒有設定,當瀏覽器關掉時,cookie也跟著結束。
路徑(path) 指在哪些目錄下的檔案可以使用Cookie
網域名稱(Domain) 用來設定哪些網域可以使用Cookie
安全性(Secure) 如果結合HTTPS安全傳輸協定(SSL),就是「1」,一般則為「0」。

 

 使用setcookie( )函數時,得先注意下列事項:

  1.  
    1. 與session_start( )函數的狀況一樣,在使用setcookie( )函數時,之前都不可以有任何的結果輸出,例如不可以在setcookie( )之前使用echo 輸出變數或將setcookie ( )嵌入在網頁中,其他html語法先輸出,否則會出現錯誤訊息。
    2. 如果 php.ini 的「register_globals」設為 on,只要在cookie有效期限用,可以直接使用 $變數輸出變數的內容,但如果設成 off ,則需要用 $_COOKIE["名稱"]$HTTP_COOKIE_VARS["名稱"] 方式取得內容。
    3. 如果沒有設定留存時間,雖然有指定cookie名稱及數值,但因為一設定就過期,結果是無法讀取您寫入的 Cookie。
    4. 如果要刪除cookie的話,直接把要刪除cookie名稱的值設定為空白即可。

James Wu 發表在 痞客邦 留言(0) 人氣()

轉錄自 http://km.tceb.edu.tw/~wsx/php/ch7-2.htm


 

session 函式

 


 
當PHP在使用Session的功能之前,由於 php.ini 的一些設定值會影響session函數的使用,所以應先了解 有關session在php.ini 的有關設定:

參數名稱
預設值
說明
參數可變更性
session.save_path
/tmp
session檔案存放路徑 可任意修改
session.name
PHPSESSID
session 的名稱(類似cookie的變數名稱) 可任意修改
session.save_handler
files
處理session存取的模式(預設:檔案) 可任意修改
session.auto_start
0
自動啟動(預設:關) 可任意修改
session.gc_probability
1

「垃圾收集」(garbage collection,資源回收筒)的處理機率

可任意修改
session.gc_maxlifetime
1440
「垃圾收集」(garbage collection,資源回收筒)被處理前的存活週期(預設:1440「秒」) 可任意修改
session.serialize_handler
php
處理連續資料方式的模式,本功能只有 WDDX 模組或 PHP 內部使用。內定值為 php。 可任意修改
session.cookie_lifetime
0
session使用cookie的存活週期;以「秒」為單位(預設:隨瀏覽器關閉即消失) 可任意修改
session.cookie_path
/
session使用cookie的路徑(預設:與domain相同或根路徑) 可任意修改
session.cookie_domain
session使用cookie的網域名稱 可任意修改
session.cookie_secure
session使用cookie的安全性 可任意修改
session.use_cookies
1
session使用cookie的功能(預設:啟用) 可任意修改
session.use_only_cookies
0
僅使用cookie方式來傳遞session,不可利用URLs方式(預設:關) 可任意修改
session.referer_check
 
session在重新整理時檢查session是否還存在 可任意修改
session.entropy_file
 
特別設定 session 值的檔案 可任意修改
session.entropy_length
0
特別設定 session 值的長度(預設:關) 可任意修改
session.cache_limiter
nocache
使用cache限制器(預設:不用要cache) 可任意修改
session.cache_expire
180
使用cache存活時間 可任意修改
session.use_trans_sid
0
使用sid值(session id)傳送模式(基於安全,預設:關閉) 須在php.ini
或ttp.conf修改
url_rewriter.tags
a=href,
area=href,
frame=src,
input=src,
form=fakeentry
網址(url)重新導向的標籤(tag) 可任意修改

 如果要改變這些設定,可直接修改 php.ini 再重新啟動 Web Server,也可以利用 ini_set( )函數來設定,設定方式如下:

ini_set ("參數名稱", "新的參數值");
 

 使用Session時,不外乎三個程序:

第一:啟動session功能 ─ 使用 session_start( ) 函數

第二:註冊session變數 ─ 使用 session_register( ) 函數
    (或用$_SESSION、$HTTP_SESSION_VARS )

第三:清除session變數或檔案 ─ 使用 session_unregister( )session_destroy( )函數

 當然,如果想知道session的狀況,例如:

取得 session 的id值(與session檔案名稱,就是sess_後面接的32字元) ─ 使用 session_id ( )函數

查看要傳遞的變數是否已被註冊 ─ 使用 session_is_registerd( ) 函數

James Wu 發表在 痞客邦 留言(0) 人氣()

一、連結資料庫
      

         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);

James Wu 發表在 痞客邦 留言(0) 人氣()

轉錄自 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 - 需要驗證才能登入的網頁

文章標籤

James Wu 發表在 痞客邦 留言(32) 人氣()

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;
}

 

James Wu 發表在 痞客邦 留言(0) 人氣()

事件                  說明

onabort            圖片下載被中斷時

onblur              當游標離開元件時

onchange         當使用者更改欄位內容時

onclick             滑鼠單擊物件時

ondblclick        滑鼠雙擊物件時

onerror            載入文件或圖片發生錯誤時

onfocus            當游標定位在元件上時

onkeydown      當鍵盤的按鍵被壓下時

onkeypress      當鍵盤的按鍵被壓下再放開時

onkeyup           當鍵盤的按鍵被放開時

onload              當網頁或圖片載入完成時

onmousedown  滑鼠按鍵被壓下時

onmousemove  滑鼠指標移動時

onmouseout      滑鼠指標離開物件時

onmouseover    滑鼠指標移到物件上時

onmouseup       滑鼠按鍵被放開時

onreset             當reset按鍵被點擊時

onresize            當視窗或框架被改變大小時

onselect            當文字被選取時

onsubmit           當sumbit按鍵被點擊時

onunload           當使用者離開畫面時

James Wu 發表在 痞客邦 留言(0) 人氣()

Close

您尚未登入,將以訪客身份留言。亦可以上方服務帳號登入留言

請輸入暱稱 ( 最多顯示 6 個中文字元 )

請輸入標題 ( 最多顯示 9 個中文字元 )

請輸入內容 ( 最多 140 個中文字元 )

reload

請輸入左方認證碼:

看不懂,換張圖

請輸入驗證碼