2008年12月30日 星期二

TortoiseSVN教學

http://www.dev.idv.tw/mediawiki/index.php/TortoseSVN%E4%BD%BF%E7%94%A8%E7%B0%A1%E4%BB%8B

刪除subversion的帳號&密碼

C:\Documents and Settings\user\Application Data\Subversion\auth

把svn.simple,svn.ssl.server,svn.username刪除即可

mysql_connect ERROR

情境:
mysql_connect('IP','mysql_user','mysql_password')去連線
但卻出現connection ERROR,會用mysql_user@PC_HOST_NAME , 去連線

解決:
MySQL Server的WinXP的防火牆關掉即可

2008年12月29日 星期一

[Window]手動安裝PHP+MySQL+Apache+phpMyAdmin

安裝版本

1. Apache2 2.2.11
2. PHP 5.2.8
3. MySQL 5.1.30
4. phpMyAdmin 3.1.1

請準備以上項目的 zip 壓縮版本,而不要用安裝版本(.exe),備齊這些資料就可以開始了。

示範平台:

OS : Windows XP
RAM : 2G


一、Apache
只有非官方的 Apache on Windows (Apache2) 才能直接在 Windows 安裝,安裝步驟如下:
1. 請先安裝 Visual C++ 2005 Redistributable Package
http://www.apachelounge.com/download/vcredist_x86-sp1.exe

2. 將 Apache2 解壓縮到 C:\ (例:C:\Apache2)

3.
開始 > 執行 > 輸入 cmd > 確定
cd\apache2\bin
httpd -k install
httpd -k start
(P.S. httpd -k uninstall 為移除 Apache2 服務)

4. 開啟一個瀏覽器,在網址列輸入 http://localhost 測試,出現「It works!」字樣即為安裝成功。(預設網站資料夾為 C:\Apache2\htdocs)

二、PHP
安裝 PHP
將 PHP 檔案解壓縮到資料夾 C:\php (沒有請新增)
將 c:\php\php5ts.dll、c:\php\libmysql.dll copy 到 C:\Apache2\bin
將 c:\php\php.ini-dist copy 到 C:\Windows 並更名為 php.ini

設定 php.ini
找到 extension_dir = "./" 改成 extension_dir = "C:\php\ext"
找到 ;extension=php_mbstring.dll 改成 extension=php_mbstring.dll
找到 ;extension=php_mysql.dll 改成 extension=php_mysql.dll
找到 ;date.timezone = 改成 date.timezone = "Asia/Taipei"
(如果你不在台灣,請改成你的時區.. )
將 php.ini 存檔後關閉

設定 Apache,以模組方式載入 PHP
開啟 C:\Apache2\conf\httpd.conf

找到 #LoadModule vhost_alias_module modules/mod_vhost_alias.so
在下方加入 LoadModule php5_module "c:/php/php5apache2_2.dll"

找到 AddType application/x-gzip .gz .tgz
在下方加入 AddType application/x-httpd-php .php

找到 DocumentRoot "c:/Apache2/htdocs" ,改成你的網站資料夾
(例 www)DocumentRoot "c:/www"

找到 ,改成你的網站資料夾
(例 www)

找到 DirectoryIndex index.html ,改成
DirectoryIndex index.html index.htm index.php

設定 Apache,開啟 rewrite 模組(不需要者可略過)
找到 #LoadModule rewrite_module modules/mod_rewrite.so
改成 LoadModule rewrite_module modules/mod_rewrite.so

搜尋 AllowOverride None (可找到三個結果)
全部改成 AllowOverride All

重新啟動 Apache
開始 > 執行... > 輸入 cmd > 確定
cd\apache2\bin
httpd -k restart

測試 PHP 環境
請在你的網站資料夾裡新建檔案 c:\www\phpinfo.php ,內容只有一行如下:

<?php phpinfo() ?>


開啟一個瀏覽器,並在網址列輸入 http://localhost/phpinfo.php
如果有出現 php 相關訊息就代表安裝成功了。\

三、MySQL
將 MySQL 檔案解壓縮到 C:\ 並將資料夾 mysql-noinstall-5.1.30-win32 更名為 mysql,
(例C:\mysql)

依下列程序安裝 MySQL 服務
開始 > 搜尋列
輸入 C:\mysql\bin\mysqld -install 按確定

MySQL 講座(懂了就可以跳過,請確認 MySQL 已啟動)
一般在 WindowsNT/2000/XP/Vista,MySQL需要安裝成為一個系統服務。
你可以在以下程序看到 MySQL 服務。
我的電腦上按右鍵選管理
服務及應用程式 > 服務
在 MySQL 上點兩下(如果沒有找到代表你安裝不成功)
啟用類型: 自動.. 服務狀態: 已啟動 才是正常,如果不是請設定成這樣。經過此設定後,MySQL 服務將會在你每次開機後自行啟動。

如果要移除 MySQL 服務,請作以下動作
先停止 MySQL 服務,我的電腦上按右鍵選管理
服務及應用程式 > 服務
在 MySQL 上點兩下
啟用類型: 自動.. 服務狀態: 已停止,設定成這樣。
開始 > 執行
輸入 C:\mysql\bin\mysqld -remove 按確定
需注意,若沒有這個動作自行刪除 MySQL 檔案,這裡的 MySQL 服務就會變成無法移除了!

設定 MySQL 編碼
copy C:\mysql\my-huge.ini 到 C:\WINDOWS\ 之下,更名為 my.ini ,設定 MySQL 預設編碼為 UTF-8 (或其他)

my.ini

[mysqld]
default-character-set=utf8

[client]
default-character-set=utf8



重新啟動 MySQL
我的電腦上按右鍵選管理
服務及應用程式 > 服務
在 MySQL 上按右鍵 > 重新啟動

四、phpMyAdmin
安裝 phpMyAdmin
將 phpMyAdmin 檔案解壓縮到 (你的網站資料夾)\phpmyadmin,
(例C:\www\phpmyadmin)

設定 phpMyAdmin
copy c:\www\phpMyAdmin\config.sample.inc.php 至 c:\www\phpMyAdmin\,並更名為config.inc.php


<?php
$cfg['blowfish_secret'] = 'ba17c1ec07d65003'; // use here a value of your choice

$i=0;
$i++;
$cfg['Servers'][$i]['auth_type'] = 'cookie';
?>


參考網址:http://blog.raienet.com/330

2008年12月23日 星期二

[PHP]現在寫 PHP6-compatible 的一些技巧

Becoming PHP 6 Compatible 這篇裡面提到的五個技巧,現在遵循這些習慣,等到 PHP6 正式推出的時候程式碼才不會改太多:

-不要再依賴 register_globals:register_globals 將 $_GET、$_POST、$_COOKIE 這三個的變數內容直接對應到全域變數。這在目前的 PHP4 與 PHP5 預設都是關閉的,但還是有文件書籍會「建議」你打開。
在 PHP6 中,這個功能將直接消失。不過,還是可以透過 extract() 達到一樣的效果。

-不要使用 magic_quotes:這個功能在目前的 PHP4 與 PHP5 預設是開啟的,但在 PHP6 將會消失 (而非改為關閉),所以,在開發軟體時最好以 magic_quotes 關閉的情況下開發。

-不要使用 $HTTP_POST_VARS 或 $HTTP_GET_VAR,改用 $_POST 及 $_GET。這點可以用編輯器的字串代換很快的換完。就算真的是很多的程式碼,也可以一次換一些。

-使用 preg_*,而不要再用 ereg_*。現在就用 preg_* 是因為執行速度比 ereg_* 快,另外在 PHP6 將會廢掉 ereg_*。不過應該會有人寫出 PECL extensions 放回來。

-直接拿原作者的 code 比較清楚:
$a = & new object(); // Do not do
$a = new object(); // Do this as of PHP 6

上面所提到的改變,會強迫使用者不能再用壞習慣寫程式,對於 PHP 的發展會是相當好的事情。

補充:
-把mb_開頭的函數改回不帶mb_開頭的函數,因為PHP6有了Unicode模組,將會把MBString模組廢掉~

摘自:http://blog.gslin.org/archives/2007/09/25/1318/

2008年12月15日 星期一

[PHP]抓取變數名稱


function varname($var){

return (isset($var))? array_search($var, $GLOBALS) : false;

}

$boogie = 'tonight';

echo varname($boogie);

Photoshop切圖出來的HTML在Firefox中,版型跑掉

情境:
美工同事用Photoshop切圖出來的HTML,套版後,在IE看是正常,
但在Firefox中,版型卻跑掉

解決:
原來是Photoshop切圖會產生一個間距檔「間距.gif」,
把它改成space.gif,Firefox的版型即可恢復正常

2008年12月13日 星期六

Ajax 跨網域問題的解決之道

Ajax 跨網域問題的解決之道
根據 Same Origin Policy 政策的安全性考量,客戶端的程式碼 (通常是 Javascript) 存在著跨網域存取資料的限制,而好死不死剛好 Ajax 就是屬於這一類型的程式碼。但 Web 2.0 又很流行 Mush Up 把各個不同網站的內容混搭在一起,如果這時候你希望能夠使用 Ajax 來取得來不同網域 (domain) 中的資料,就會遭遇到安全性的問題而無法取得跨網域的資料。

要如何解決 Ajax 跨網域存取資料的問題呢? 既然基本的政策不允許,那麼山不轉就人轉吧! 讓我們耍點小技巧。目前想到的方式有兩種:

一、透過 proxy 程式
這裡所謂的 proxy 並不是大家常聽到網路設定裡面的那個 proxy 伺服器。而是:

1. 自行用 "伺服器端的程式語言" 例如 PHP, ASP.NET 寫一個程式去取得跨網域的資料,這樣的程式我們將它稱為 proxy。因為它是伺服器端的程式,所以當然沒有跨網域的問題。而且在這個程式裡面也可以將取得的資料處理成 JSON 方便給 Ajax 使用。
2. 將這個 proxy 程式放到自己的伺服器上,必須和 Ajax 在同一個網域內。
3. Ajax 不要直接去取得跨網域的資料,因為根本取不到。而改為去跟這個 proxy 程式要資料,所以 proxy 程式就是代替 Ajax 跨網域去取得資料的那個中間人或跳板 (知道為什麼要稱它為 proxy 了吧)。

請特別注意的是: 建議一定要在 proxy 的程式碼中做檢查,呼叫它的程式是否來自於同一個網域,否則每個人都可以寫程式來呼叫你的 proxy,伺服器一定被操翻了 (當然你不介意讓大家公開使用的話也無所謂)。例如 PHP 可以用這段程式碼取得呼叫它的程式的網址:

$referrer = getenv('HTTP_REFERER');

這裡也有現成寫好的 proxy 程式可供使用 http://www.ajax-cross-domain.com/ ,它是使用 Perl 寫的。

二、利用 DOM 動態載入外部 JS 檔案
如果你很幸運,剛好跨網域要讀取的網址所傳回的資料就已經是正確的 JSON 格式了。有可能是自己或別人寫好的 Web API,那麼你可以用這個省時省力又有效率的方法:

1. 用 DOM 動態建立一個 <script> 節點
2. 將這個節點的 file 屬性設成為那個 API 的 URL (可以帶參數)。
3. 這時 API 傳回的內容就會當成是一個外部 JS 檔案直接載入進來了。
然後你便能夠在 Javascript 中直接使用載入進來的 JSON 資料。

這種方法只是利用 <script> 標籤而不是 Ajax,所以壓根不會有跨網域的問題,但一樣可以動態載入外部資料。請特別注意的是: 只有在要動態讀取的資料內容已經是正確的 JSON 格式或 Javascript 程式碼時,才能直接透過動態建立<script> 節點來載入資料哦! 否則的話只能用第一種方法。

第二種方法使用 YUI 裡面的 Get Utility 就能馬上幫您做到。


摘自:http://tw.myblog.yahoo.com/class2u-com/article?mid=1869&prev=2450&next=974&l=f&fid=7

2008年12月1日 星期一

有沒有強制換行的CSS

table是按百分比定義的,中文字TD裡能自動折行,但是字母和數字的時候並不會折行,而是在一行顯示下去,有沒有強制折行CSS呢?

對於div,p等塊級元素

正常文字的換行(亞洲文字和非亞洲文字)元素擁有默認的white-space:normal,當定義的寬度之後自動換行
html
程序代碼 程序代碼
正常文字的換行(亞洲文字和非亞洲文字)元素擁有默認的white-space:normal,當定義

css
#wrap{white-space:normal; width:200px; }


1.(IE瀏覽器)連續的英文字符和阿拉伯數字,使用word-wrap : break-word ;或者word-break:break-all;實現強制斷行

#wrap{word-break:break-all; width:200px;}
或者
#wrap{word-wrap:break-word; width:200px;}

程序代碼 程序代碼
abcdefghijklmnabcdefghijklmnabcdefghijklmn111111111



效果:可以實現換行

2.(Firefox瀏覽器)連續的英文字符和阿拉伯數字的斷行,Firefox的所有版本的沒有解決這個問題,我們只有讓超出邊界的字符隱藏或者,給容器添加滾動條

程序代碼 程序代碼
#wrap{word-break:break-all; width:200px; overflow:auto;}
abcdefghijklmnabcdefghijklmnabcdefghijklmn111111111



效果:容器正常,內容隱藏

對於table

1. (IE瀏覽器)使用 table-layout:fixed;強制table的寬度,多餘內容隱藏

程序代碼 程序代碼




abcdefghigklmnopqrstuvwxyz1234567890ssssssssssssss



效果:隱藏多餘內容

2.(IE瀏覽器)使用 table-layout:fixed;強制table的寬度,內層td,th採用word-break : break-all;或者word-wrap : break-word ;換行

程序代碼 程序代碼





abcdefghigklmnopqrstuvwxyz 1234567890
abcdefghigklmnopqrstuvwxyz 1234567890



效果:可以換行

3. (IE瀏覽器)在td,th中嵌套div,p等採用上面提到的div,p的換行方法

4. (Firefox瀏覽器)使用 table-layout:fixed;強制table的寬度,內層td,th採用word-break : break-all;或者word-wrap : break-word ;換行,使用overflow:hidden;隱藏超出內容,這裡overflow:auto;無法起作用

程序代碼 程序代碼





abcdefghigklmnopqrstuvwxyz1234567890abcdefghigklmnopqrstuvwxyz1234567890



效果:隱藏多於內容

摘自:http://220.135.241.51/blog/article.asp?id=1976

wibiya widget