2008-01-27

Ubuntu CVS 安裝 for Eclipse

現在工作時都要將 Eclipse 與 Dreamweaver 開啟,主要都是以 Eclipse 來編寫網頁,而 Dreamweaver 只是拿來做上傳同步,這兩個軟體都是出了名的肥,光是開啟就用 500 MB 的記憶體。
原本想用 CVS 做遠端同步,可惜 CVS 不是拿來做這種簡單的事,CVS 是用在多人開發間的同步橋樑,透過一個版本管理伺服器,去協調多個開發者的同步問題,所以不適合用在網頁上傳的同步處理

由於花了很久的時間在安裝這套工具上,其實要安裝這個工具是很簡單的,但為什麼我會花那麼的時間呢?這是個好問題,所以想為這些光陰來寫個詳細的安裝流程。

架設 CVS Server
1.安裝 CVS:
$sudo apt-get install cvs

2.安裝 CVSD:
$sudo apt-get install cvsd

3.在 /var/lib/cvsd 下建立 /myrepos 目錄,這是以後 CVS 的專案集(工作區)
$cd /var/lib/cvsd
$sudo mkdir myrepos

4.初始化這個/myrepos。
$sudo cvs -d /var/lib/cvsd/myrepos init

5.設置 myrepos 專案集的使用者認證方式,預設是使用系統中的帳號,為了安全還是使用 CVS 來管理使用者。
$sudo vi /var/lib/cvsd/myrepos/CVSROOT/config

加入以下設定:
# 關閉系統帳號的使用者連結 CVS
SystemAuth=no
PamAuth=no
# 設定 LockDir 的相對路徑
LockDir=/tmp/myrepos
然後保存退出。注意此處的/tmp/myrepos是指相對於RootJail的路徑。

6.建立 LockDir 目錄
$sudo mkdir /var/lib/cvsd/tmp/myrepos

7.增加 CVS 的用戶帳號
$sudo cvsd-passwd /var/lib/cvsd/myrepos cvsuser

8.編輯 CVSD 的設定檔。
$sudo vi /etc/cvsd/cvsd.conf
# 預設設定如下:
RootJail /var/lib/cvsd
Repos /myrepos。
# 連接阜(Port)
Listen * 2401

10.設定目錄權限,以後加入新專案時也要檢查權限設定。
$sudo chown -R cvsd:cvsd /var/lib/cvsd

11.重新啟動 CVSD。
$sudo /etc/init.d/cvsd restart

12.測試連線狀況
$cvs -d :pserver:cvsuser@localhost:/myrepos login
$cvs -d :pserver:cvsuser@localhost:/myrepos checkout

利用 Eclipse 連結 CVS (PS:記得先將本地端的專案備份)。
1.在 /myrepos 中建立專案 test
$cd /var/lib/cvsd/myrepos
$sudo mkdir test
$sudo chown -R cvsd:cvsd test

2.在 Eclipse 中建立專案 test
檔案→新建→專案
專案類型:(自訂)
專案名稱:test

3.切換工作至:團對同步化
CVS for Eclipse

4.建立新同步
CVS for Eclipse

5.選擇同步方式:CVS
CVS for Eclipse

6.填入連線設定:
儲存庫路徑上記得加上/
CVS for Eclipse

7.填入同步的專案名稱 (myrepos 中 test)
點選下一步
CVS for Eclipse

8.選擇初始的同步方式 (PS:如果沒選第三個會將本地端的專案給清空)
然後點選完成
CVS for Eclipse

9.再次點選新同步
CVS for Eclipse

10.選擇同步方式:CVS
CVS for Eclipse

11.這時候就會出現剛剛設定好的連線,選擇 test 按下完成。
CVS for Eclipse

參考資料:
分享Ubuntu Linux上边的CVS服务器的配置
Ubuntu CVS服务器设置
Ubuntu下CVS服务器的搭建
Ubuntu Linux操作系统CVS安装与配置详解

架站使用 UTF-8 要檢查的項目

一開始最基本的就是環境設定,Server 對於文字的編碼設定,這也是最重要的。

關於 Apache Server 的設定:
在 /etc/httpd/conf/httpd.conf(Red Hat) 或 /etc/apache2/conf.d/charset(Ubuntu) 中開啟對 UTF-8 編碼的設定:
AddDefaultCharset utf-8

關於 Mysql Server 的設定:
在使用 script 進行新增/修改時記得在 script 檔中加入:
SET NAMES 'utf8';
在 PHP 存取前也應該先宣告編碼方式:
mysql_query("SET NAMES 'UTF8'");

在建立文字欄位(TEXT, VARCHAR, ...)時也必須定義文字的編碼方式:
CHARACTER SET utf8 COLLATE utf8_unicode_ci

在編寫網頁文件時,除了要注意檔案是否使用 UTF-8 編碼外,還要記得加上編碼宣告,因為解讀器並沒有那麼聰明,沒辦法準確的辨別檔案的編碼方式,所以請一定要加上編碼宣告。

關於 HTML 文件的宣告:
<meta equiv="Content-Type" content="text/html; charset=UTF-8">

關於 XML 文件的宣告:
<?xml version="1.0" encoding="UTF-8"?>

關於 PHP 文件的宣告:
header('Content-type: text/html; charset=utf-8');

參考文章:UTF-8 checklist - soledad penadés

2008-01-22

cookie 路徑問題

在 PHP 中使用 Cookie 是一個簡單又快樂的事
你可以用下面的方法設置一個暫存 1800 秒的 Cookie 變數:
setcookie ("a", "123", time()+1800);

如果你想要一個能暫存七天的 Cookie 變數:
setcookie("a","123",mktime(0,0,0,date("m"),date("d")+7, date("Y")));

然後利用下面的方法去取得 Cookie 變數,這也是既簡單又快樂的事
$_COOKIE['a']

但是要是不瞭解 Cookie 的路徑設定,你可能會發生非常不快樂的問題,造成其他頁面無法取的某路徑下的 Cookie,所以 Cookie 路徑設定這時候就會變的很重要,關於詳細的 Cookie 設定如下
setcookie ( string name [, string value [, int expire [, string path [, string domain [, int secure]]]]])

參數說明
(name) Cookie的變數名稱
(value) Cookie名稱的值
(expire) Cookie的留存時間,以「秒」為單位,如果沒有設定,當瀏覽器關掉時,cookie也跟著結束。
(path) 指在哪些目錄下的檔案可以使用Cookie
(Domain) 設定哪些網域可以使用Cookie
(Secure) 安全性-如果結合HTTPS安全傳輸協定(SSL),就是「1」,一般則為「0」。

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

參考文章:PHP程式設計講義區

2008-01-06

TinyMCE 好用的 HTML 編輯器

這是個不錯的 HTML 編輯器,完全只使用 JavaScript 寫成,可以在沒有 Web server 的狀況下 work,有非常強大的功能,可以自行開發外掛模組,而且有詳細的參數設定,可以根據個人的需求加一改寫,支援多國語言,有官方語言包,而且也支援各種的瀏覽器。

官方網站-下載頁面
中文設定說明

<script language="javascript" type="text/javascript"
src="../jscripts/tiny_mce/tiny_mce.js"></script>
<script language="javascript" type="text/javascript">
tinyMCE.init({
mode: "textareas",
/* (textareas) 將所有 textarea 轉換成編輯器。*/
/* (exact) 只轉換特定的元素。
在 elements 設定中指定那些元素的 ID 或 name 。*/
theme: "advanced",
/* (advanced) 這是TinyMCE的高級主題,*/
/* 這個主題允許用戶增加刪除按鈕/面板,並且比簡單或默認主題更加靈活。*/
/* (simple) 這是TinyMCE最簡單的主題,只包括最基本的功能。*/

language: "zh_tw_utf8",
/* 設定多國語言的檔案名稱*/

content_css: "example_full.css",
/* 用於編輯器內部(可編輯區域)的 CSS文件*/

plugins: "devkit,style,layer,...",
/* TinyMCE 的外掛插件,也可以載入自己寫的外掛*/

theme_advanced_buttons1_add_before: "save,newdocum...",
theme_advanced_buttons1_add: "fontselect,fontsizes...",
theme_advanced_buttons2_add: "separator,insertdate...",
theme_advanced_buttons2_add_before: "cut,copy,paste...",
theme_advanced_buttons3_add_before: "tablecontrols...",
theme_advanced_buttons3_add: "emotions,iespell,...",
theme_advanced_buttons4: "insertlayer,moveforward,...",
/*共有三類的方法設定按鈕列的配置,所有按鈕的清單*/
/* theme_advanced_buttons<1-n> 直接設置按鈕的清單*/
/* theme_advanced_buttons<1-n>_add 在預設的清單後面加入額外的按鈕*/
/* theme_advanced_buttons<1-n>_add_before 在預設的清單前面加入額外的按鈕*/


theme_advanced_toolbar_location: "top",
/* 按鈕列的位置 "top", "bottom", "none"*/

theme_advanced_toolbar_align: "left",
/* 按鈕列的對齊方式。left, right, center。*/

theme_advanced_path_location: "bottom",
/*路徑及調整大小按鈕的狀態列的位置。
"top", "bottom", "none"*/
theme_advanced_resize_horizontal: false,
theme_advanced_resizing: true,
nonbreaking_force_tab: true,
apply_source_formatting: true,
relat2ive_urls: false,
rem2ove_script_host: false,
});
</script>

2008-01-05

PHP 上傳變數 $_FILES

在 PHP 中可以透過 $HTTP_POST_FILES 或 $_FILES 變數來存取所上傳的檔案詳細內容。輸入元素名為 inputfile,其中資訊有:
$_FILES['inputfile']['name']
// 檔案在客戶端電腦上的檔案名稱

$_FILES['inputfile']['type']
// 檔案的 MIME 類型,例如 "image/gif"

$_FILES['inputfile']['size']
// 上傳檔案的檔案大小,單為為 bytes

$_FILES['inputfile']['tmp_name']
// 上傳檔案儲存在伺服器端的暫存檔案名

$_FILES['inputfile']['error']
// 在 PHP 4.2.0 或更新的片本才有的這個陣列元素,上傳檔案的錯誤號碼


參考頁面:
PHP Developer Channel
PHP5網管實驗室