2011年6月29日 星期三

FTP的主動模式( active )和被動模式( passive ) 比較

資料來源:http://forum.icst.org.tw/phpbb/viewtopic.php?t=79

FTP 的主動模式( active )和被動模式( passive )

FTP 是一種檔傳輸協定 (File Transfer Protocol),它的連線模式有兩種﹕
主動模式( active )和被動模式( passive )。以下說明 FTP 的連線是怎樣建立的﹕

在 active 模式下 (一般預設的模式)﹕
1. FTP client 開啟一個隨機選擇的TCP port 呼叫 FTP server 的 port 21請求連線。當順
利完成 Three-Way Handshake 之後,連線就成功建立,但這僅是命令通道的建立

2.當兩端需要傳送資料的時候,client 透過命令通道用一個 port command 告訴 server
,client可以用另一個TCP port 做數據通道。
3.然後 server 用 port 20 和剛才 client 所告知的 TCP port 建立數據連線。請注意:連
線方向這是從 server 到 client 的,TCP 封包會有一個 SYN flag。
4.然後 client 會返回一個帶 ACK flag的確認封包﹐並完成另一次的 Three-Way
Handshake 手續。這時候,數據通道才能成功建立。
5.開始數據傳送。

在 passive 模式下
1.FTP client 開啟一個隨機選擇的TCP port 呼叫 FTP server 的 port 21請求連線,並完
成命令通道的建立。
2.當兩端需要傳送資料的時候,client 透過命令通道送一個 PASV command 給
server,要求進入 passive 傳輸模式。
3.然後 server 像上述的正常模式之第 2 步驟那樣,挑一個TCP port ,並用命令通道
告訴 client。
4.然後 client 用另一個TCP port 呼叫剛才 server 告知的 TCP port 來建立數據通道。此
時封包帶 SYN flag。
5.server 確認後回應一個 ACK 封包。並完成所有交握手續﹑成功建立數據通道。
6.開始數據傳送。

在實際使用上, active mode 用來登入一些開設在主機上及沒有安裝防火牆的 FTP server,或是開設於 client side 的 FTP server!

Passive mode (簡稱 PASV)用來登入一些架設於防火牆保護下而又是開設於主機上的 FTP server!

如果您覺得太深奧而弄不清楚, 那就先用預設的 active mode 登入, 失敗改用 passive mode 登入就是了。

PHP中單引號跟雙引號有什麼不同?

資料來源:http://www.neo.com.tw/archives/958

單引號跟雙引號到底有什麼不同?

PHP 會解譯「雙引號」字串內的變數,而「單引號」則視為純字串出,PHP 不會再處理單引號內的內容。

2011年6月27日 星期一

PHP補零的作法

資料來源:http://blog.hsin.tw/2009/php-pad-a-string/

PHP有內建的函數可以方便的做補齊位數的函數,
google了一番找到清楚的說明,文章轉載如下:


會找到有些使用sprintf函式的方法 像下面這樣
$var = 1;
echo sprintf("%02d", $var);
其實php本身就有一個專門可以補齊位數的函式 : str_pad()
string str_pad ( string $input , int $pad_length [, string $pad_string= " " [, int $pad_type= STR_PAD_RIGHT ]] )
$input : 原字串
$pad_length : 補齊後的位數
$pad_string : 用來補齊的字串
$pad_type : 補齊的方式 有三種,STR_PAD_RIGHT (由右邊補)、STR_PAD_LEFT (由左邊補)、STR_PAD_BOTH (左右兩邊都補), 預設為STR_PAD_RIGHT
所以其實不只可以補零,要補什麼字都可以
而以補零來舉例的話就是


$value = 7;
//將數字由左邊補零至三位數
$value = str_pad($value,3,'0',STR_PAD_LEFT);
echo $value;
// 結果會印出 007;
 
//下面這是document裡的例子
$input = "Alien";
echo str_pad($input, 10);                      // produces "Alien     "
echo str_pad($input, 10, "-=", STR_PAD_LEFT);  // produces "-=-=-Alien"
echo str_pad($input, 10, "_", STR_PAD_BOTH);   // produces "__Alien___"
echo str_pad($input, 6 , "___");               // produces "Alien_"

2011年6月26日 星期日

IE使用錨點時.Title後面會帶錨點值

資料來源:http://www.zwjoy.com/blog/?p=131


解决方法1:修改FLASH(这个是网上的,但我没有用这个方法)
<param name="movie" value="images/banner.swf" />
    <param name="loop" value="true" />
    <param name="menu" value="false" />
    <param name="quality" value="best" />
    <param name="wmode" value="transparent" />
生成的代码;
解决方法2:(JS修改标题,替换锚点后的内容)
$(document).ready(function() {
 //js 更换标题(去掉锚点产生的标题后缀)
 var title = $('#_headerTitle').html(); 
 var regx = /(\#.+)+/;
 title = title.replace(regx, '');
 document.title = title;
 
});

2011年6月21日 星期二

ASP + MySQL + MyODBC 3.51 亂碼的問題

某個案子發生了讀取資料庫資料亂碼的問題,
經過比對資料庫是用utf-8,頁面也已設定為utf-8,
但是頁面還是亂碼,拜請google後找到如下的資料;
連線資料庫的字串加上"Set Names big5",就不會亂碼.

參考資料來源:http://tlcheng.wordpress.com/2006/04/23/mysql-for-windows-net/
參考資料來源:http://social.msdn.microsoft.com/Forums/zh-TW/232/thread/332931a4-b764-4839-ac21-e887d58a71c7

2011年6月17日 星期五

Warning: Cannot modify header information - headers already sent by解法

資料來源:http://amjet.dyndns.biz/blog/IT/?p=12


寫 php 時常遇到這個錯誤訊息,解法也很簡單,如果 php 有 include 其他程式檔的話檢查 <?php 的前面不可以有任何的空行或文字,?> 後面也不要有空行和其他文字就可以了。
2007/12/25 加註:
有些 editor 在處理 utf-8 編碼文件檔時,會在檔案最前面加上幾個 byte 的檔頭,一般編輯時看不到,利用 UltraEditor、NotePad++ 的 Hex mode 可以看到及修改,這種檔案也會造成上述的錯誤,也有看過這種 jsp 檔案 java 無法 compile 的情形。

Undefined index 錯誤PHP

資料來源:http://plog.tcc.edu.tw/post/530/12708

治標不治本的就是將php.ini內的reporting部份修改,讓notice不顯示
error_reporting = E_ALL; display all errors, warnings and notices
改成
error_reporting = E_ERROR & ~E_NOTICE & ~E_WARNING

不然
isset($_GET["page"])做個if-else判斷!!

或者在這段敘述前面加上'@'表示這行敘述如果有錯誤或是警告時不要輸出
如:@$page=$_GET["page"]

php5.3開始出現的Function ereg() is deprecated Error問題解決辦法

資料來源:http://www.liuhuadong.com/archives/727/index.html


PHP 5.3 ereg() 無法正常使用,提示「Function ereg() is deprecated Error」。問題根源是php中有兩種正則表示方法,一個是posix,一個是perl,php6打算廢除posix的正則表示方法所以後來就加了個 preg_match。此問題解決辦法很簡單,在ereg前加個過濾提示信息符號即可:把ereg()變成@ereg()。這樣屏蔽了提示信息,但根本問 題還是沒有解決,php在5.2版本以前ereg都使用正常,在5.3以後,就要用preg_match來代替ereg。所以就需要變成這樣,原來:
ereg("^[0-9]*$",$page)
變成:
preg_match("/^[0-9]*$/",$page)
特別提醒:posix與perl的很明顯的表達區別就是是否加斜槓,所以與ereg相比,後者在正則的前後分別增加了兩個」/」符號,不能缺少。
Tips:此問題在php5.2之前版本不會出現。

幾個用PHP產生縮圖的參考

1.資料來源:
http://blog.twkang.net/2006/08/25/php-%E7%94%A2%E7%94%9F%E7%B8%AE%E5%9C%96%E7%9A%84%E6%96%B9%E6%B3%95/

2.資料來源:http://inspire.twgg.org/c/programming/php/using-php-function-imagecopyresized-gd-the-establishment-of-high-precision-thumbnail.html

3.資料來源:http://blog.ring.idv.tw/comment.ser?i=173

4.資料來源:http://blog.longwin.com.tw/2007/08/php_image_resize_2007/

最後參考了資料來源4的PHP 等比例縮圖程式的寫作方法

2011年6月16日 星期四

mysql 裡 utf8_general_ci 跟 utf8_unicode_ci 連線校對的差異

資料來源:http://origin2.pixnet.net/blog/post/1244682

utf8_general_ci 在轉換時速度比較快
utf8_unicode_ci 在轉換時比較精準

轉換?怎麼講呢?
簡單說就是當資料要從一個編碼換成另外一個編碼時,
mysql 要在兩個 codepage 裡面找出來相對應的字元位置在哪裡。
對 utf8_general_ci 來說,來源 codepage 裡面的一個字元只能對應到目標 codepage 裡面的一個字元,
而 utf8_unicode_ci 則可以把來源 codepage 裡的一個字元對應到目標 codepage 裡的多個字元(或反過來)。
例如德文裡的 ß 要轉換成英文的時候如果是用 utf8_unicode_ci 轉換會變成正確的 ss ,
但是如果用 utf8_general_ci 的話則會變成單一的 s 而已。

所以如果可以的話請盡量用 utf8_unicode_ci 而不要用 utf8_general_ci ,
雖然對 multibyte 字元來說這兩個都沒差,
但是 utf8 的網頁誰也不知道哪天會不會有這種字元出現在你的網頁上,
所以如果設成 utf8_unicode_ci 你就不需要擔心貼上去之後資料在轉換間遺失了。

2011年6月15日 星期三

如何判斷使用 ADO 資料錄集欄位的屬性

資料來源:http://support.microsoft.com/kb/193947


* DEFINEs for field types - provided for reference only.
   #DEFINE ADEMPTY               0
   #DEFINE ADTINYINT            16
   #DEFINE ADSMALLINT            2
   #DEFINE ADINTEGER            3
   #DEFINE ADBIGINT            20
   #DEFINE ADUNSIGNEDTINYINT      17
   #DEFINE ADUNSIGNEDSMALLINT      18
   #DEFINE ADUNSIGNEDINT         19
   #DEFINE ADUNSIGNEDBIGINT      21
   #DEFINE ADSINGLE            4
   #DEFINE ADDOUBLE            5
   #DEFINE ADCURRENCY            6
   #DEFINE ADDECIMAL            14
   #DEFINE ADNUMERIC            131
   #DEFINE ADBOOLEAN            11
   #DEFINE ADERROR               10
   #DEFINE ADUSERDEFINED         132
   #DEFINE ADVARIANT            12
   #DEFINE ADIDISPATCH            9
   #DEFINE ADIUNKNOWN            13
   #DEFINE ADGUID               72
   #DEFINE ADDATE               7
   #DEFINE ADDBDATE            133
   #DEFINE ADDBTIME            134
   #DEFINE ADDBTIMESTAMP         135
   #DEFINE ADBSTR               8
   #DEFINE ADCHAR               129
   #DEFINE ADVARCHAR            200
   #DEFINE ADLONGVARCHAR         201
   #DEFINE ADWCHAR               130
   #DEFINE ADVARWCHAR            202
   #DEFINE ADLONGVARWCHAR         203
   #DEFINE ADBINARY            128
   #DEFINE ADVARBINARY            204
   #DEFINE ADLONGVARBINARY         205
   #DEFINE ADCHAPTER            136

   oRecordSet = CREATEOBJECT("ADODB.Recordset")

   lcSQL = "select * from authors"

   oRecordSet.OPEN(lcSQL, ;
      "DRIVER={SQL Server};" + ;
      "SERVER=YourServerName;" + ;
      "DATABASE=pubs;" + ;
      "UID=YourUserID;" + ;
      "PWD=YourPassword")

   lcFieldInfo = ""
   FOR EACH FIELD IN oRecordSet.FIELDS
      ? "Field name: ", FIELD.NAME, ;
         " Type: ", LTRIM(STR(FIELD.TYPE)), ;
         " Defined size: ", LTRIM(STR(FIELD.DEFINEDSIZE)), ;
         " Actual size: ", LTRIM(STR(FIELD.ACTUALSIZE))
      ?
   NEXT
    

2011年6月13日 星期一

FB分享按鈕相關的參考資訊

參考資訊:
http://blogger.mbdmt.com/?p=127

http://blog.webgene.com.tw/?p=1993

http://epromotor.pixnet.net/blog/post/30997291

http://epromotor.pixnet.net/blog/post/30099287

2011年6月1日 星期三

Unicode Code Converter Unicode轉碼網頁

好用的轉碼網站,可以幫你文字轉為多種的編碼

http://people.w3.org/rishida/tools/conversion/