PHPMailer 類別文件

2010年3月10日 Brian 尚無評論

公開方法(Public Methods) 閱讀全文…

Categories: PHP Tags:

wampserver 2設定 smtp 驗證

2010年3月10日 Brian 尚無評論

wampserver 2 for windows

1.下載檔案︰
http://glob.com.au/sendmail/下載sendmail.zipsendmail-SSL.zip,解開sendmail.zip壓縮將sendmail.exe、sendmail.ini複製到c:/wamp/bin/sendmail/目錄下(如果沒有sendmail目錄,請自行建立),解開sendmail-SSL.zip壓縮將libeay32.dll、ssleay32.dll複製到c:/wamp/bin/sendmail/目錄下(如果沒有sendmail目錄,請自行建立)。

備份:
sendmail.zip
sendmail-SSL.zip

2.修改php.ini︰
開啟php.ini

;SMTP =
;smtp_port =
;sendmail_form =
sendmail_path = "c:\wamp\bin\sendmail\sendmail.exe -t"

3.修改sendmail.ini
此處以GMail為範例
開啟c:\wamp\bin\sendmail\sendmail.ini

smtp_server=smtp.gmail.com
smtp_port=auto
auth_username=test@test.com.tw
auth_password=xxxxxx

;pop3_server=
;pop3_username=
;pop3_password=

;迫使發送者永遠使用下面電子郵件地址來與MailServer溝通,但不影響信件中Form的內容
force_sender=test@test.com.tw

;force_recipient=

4.測試

<?php
// multiple recipients
$to  = 'test1@test.com.tw' . ', '; // note the comma
$to .= 'test2@test.com.tw';

// subject
$subject = 'Birthday Reminders for August';

// message
$message = '
<html>
<head>
  <title>Birthday Reminders for August</title>
</head>
<body>
  <p>Here are the birthdays upcoming in August!</p>
  <table>
    <tr>
      <th>Person</th><th>Day</th><th>Month</th><th>Year</th>
    </tr>
    <tr>
      <td>Joe</td><td>3rd</td><td>August</td><td>1970</td>
    </tr>
    <tr>
      <td>Sally</td><td>17th</td><td>August</td><td>1973</td>
    </tr>
    <tr>
      <td>中文</td><td>17日</td><td>五月</td><td>1973</td>
    </tr>
  </table>
</body>
</html>
'
;

// To send HTML mail, the Content-type header must be set
//設定內文為utf-8如此中文才會順利顯示
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";

// Additional headers
//$headers .= 'From: Birthday Reminder <birthday@example.com>' . "\r\n";
//其中<xxxxxxxxxx>一定要有不然此處設定會無法成功,"To:"也一樣
$headers .= 'To: Mary <mary@example.com>, Kelly <kelly@example.com>' . "\r\n";
$headers .= 'From: Birthday Reminder <birthday@example.com>' . "\r\n";
$headers .= 'Cc: birthdayarchive@example.com' . "\r\n";
$headers .= 'Bcc: birthdaycheck@example.com' . "\r\n";

// Mail it

if ( mail($to, $subject, $message, $headers) ) {
echo("Send OK"); }
else {
echo("Error");
}
?>

5.注意事項︰
本機防火牆的規則
遇錯誤可查詢 c:/wamp/bin/sendmail/error.log or debug.log or PHP Apache錯誤日誌

Categories: Apache, HTML Tags: ,

網站壓力測試Webbench

2010年3月10日 Brian 尚無評論

Webbench

最多可以模擬30000個連線數,用來測試網站的負載承受能力。

安裝程序:(CentOS)

yum install ctags
mkdir /usr/local/man/
wget http://blog.s135.com/soft/linux/webbench/webbench-1.5.tar.gz
tar zxvf webbench-1.5.tar.gz
cd webbench-1.5
make && make install

使用方法:

webbench -c 500 -t 30 http://127.0.0.1/test.jpg

參數說明:-c 連線數,-t 連線時間

測試結果:

Webbench – Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.

Benchmarking: GET http://127.0.0.1/test.jpg
500 clients, running 30 sec.

Speed=3230 pages/min, 11614212 bytes/sec.
Requests: 1615 susceed, 0 failed.

Categories: Apache, HTML, Linux, MySQL, PHP, Program Tags:

移除檔案中的#

2010年3月2日 Brian 尚無評論

移除註解

cat xxx.conf | grep -v '^#' | sed '/^\s*$/d'

移除空白行

cat xxx.conf | sed '/^$/d'
Categories: Linux Tags: ,

防止Apache受Dos攻擊

2010年1月29日 Brian 尚無評論

使用mod_evasive

yum install mod_evasive

vi /etc/httpd/conf.d/mod_evasive.conf

#設置受到攻擊時接收攻擊信息提示的郵箱地址。
#DOSEmailNotify you@yourdomain.com
#受到攻擊時Apache運行用戶執行的系統命令
#DOSSystemCommand 「su – someuser -c 『/sbin/… %s …』」
#攻擊日誌存放目錄,BSD上默認是 /tmp
#DOSLogDir 「/var/lock/mod_evasive」

service httpd restart

Categories: Apache, Linux Tags:

OutLook Express 錯誤訊息

2010年1月4日 Brian 尚無評論

錯 誤 碼    意 義
0×800C0131  可能是 Folders.dbx 檔案屬性錯誤或損壞
0×800C013E  把Folders.dbx刪除重新啟動outlook可以了,但資料會沒了!!
0×800C0133  這是因為「收件匣.dbx」這個檔案已經爆掉的緣故。
當這個檔案的容量超出了OutLook Express規定的2G的空間上限,就會無法收信,
可在備份之後刪除此檔案,重新建立一個新的。
閱讀全文…

Categories: GMail Tags: ,

Non-authoritative answer

2009年12月15日 Brian 尚無評論

Non-authoritative answer:

代表是由查詢的那台伺服器的Cache查到的資料。

Categories: DNS, Linux, Network Tags:

編碼問題

2009年12月14日 Brian 尚無評論

基本上 MySQL 資料庫語系設定分五個等級:

1. 伺服器級,即您說的 mysql.ini 的設定。
2. 資料庫級。
3. 資料表級。
4. 資料欄位級。
5. 連線校對級。

數字愈大的等級,其效力可以覆蓋之前的設定。所以 5 > 4 > 3 > 2 > 1 。

所以,如果 MySQL 伺服器預設編碼是 big5。我們只要資料表以下的等級全部都設定成 UTF8,理論上就可以獲得正確的結果。

但是還有一個變數,那就是 apache httpd 本身的系統編碼預設值。小弟有幾個專案,就是 MIS 將 httpd 預設在 big5。這時候,就算網頁強迫 metadata 到 UTF8 也沒有用。因為在讀取到 tag 之前,html就已經以 big5 輸出了。這就是為什麼瀏覽器編碼會跳掉的原因。

近來接受 BBT 的培訓,做一個投票系統。系統程式碼倒不是很難,但是我的時間主要花費在了研究字符集和編碼上面。MySQL 和 Apache 兩個系統的編碼(字符集)問題讓我費勁腦筋,吃盡苦頭。網上對這些問題的解決比較零散,比較片面,大部分是提供解決方法,卻不說為什麼。於是我將這幾天收 穫總結一下,避免後來者再走彎路。這篇文章對 PHP 編寫有一點幫助(看完你就知道,怎樣讓你的 PHP 程式在大部分空間提供商的伺服器裡顯示正常),但是更多幫助在於網路伺服器的架設和設置。

先說 MySQL 的字符集問題。Windows 下可透過修改 my.ini 內的

# CLIENT SECTION
[mysql]
default-character-set=utf8
# SERVER SECTION
[mysqld]
default-character-set=utf8

這兩個字段來更改資料庫的預設字符集。第一個是客戶端預設的字符集,第二個是伺服器端預設的字符集。假設我們把兩個都設為 utf8,然後在MySQL Command Line 裡面輸入 “show variables like ‘character%’;”,可看到如下結果:

character_set_client   latin1
character_set_connection    latin1
character_set_database     utf8
character_set_results    latin1
character_set_server   utf8
character_set_system     utf8

其中的 utf8 隨著我們上面的設置而改動。此時,要是我們透過採用 UTF-8 的 PHP 程式從資料庫裡讀取資料,很有可能是一串 “?????” 或者是其他亂碼。網上查了半天,解決辦法倒是簡單,在連結資料庫之後,讀取資料之前,先執行一項查詢 “SET NAMES UTF8″,即在 PHP 裡為

mysql_query("SET NAMES UTF8");

即可顯示正常(只要資料庫裡資料的字元正常)。為什麼會這樣?這句查詢 “SET NAMES UTF8″ 到底是什麼作用?

到 MySQL 命令行輸入 “SET NAMES UTF8;”,然後執行 “show variables like ‘character%’;”,發現原來為 latin1 的那些變數 “character_set_client”、”character_set_connection”、 ”character_set_results” 的值全部變為 utf8 了,原來是這 3 個變數在搗蛋。

查閱手冊,上面那句等於:

SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;

看看這 3 個變數的作用:

資料輸入路徑:client → connection → server;

資料輸出路徑:server → connection → results。

換句話說,每個路徑要經過 3 次改變字符集編碼。以出現亂碼的輸出為例,server 裡 utf8 的資料,傳入 connection 轉為 latin1,傳入 results 轉為 latin1,utf-8 頁面又把 results 轉過來。如果兩種字符集不相容,比如 latin1 和 utf8,轉化過程就為不可逆的,破壞性的。所以就轉不回來了。

但這裡要聲明一點,”SET NAMES UTF8″ 作用只是臨時的,MySQL 重啟後就恢復預設了。

接下來就說到 MySQL 在伺服器上的配置問題了。豈不是我們每次對資料庫讀寫都得加上 “SET NAMES UTF8″,以保證資料傳輸的編碼一致?能不能透過配置 MySQL 來達到那三個變數預設就為我們要想的字符集?手冊上沒說,我在網上也沒找到答案。所以,從伺服器配置的角度而言,是沒辦法省略掉那行程式碼的。

總結:為了讓你的網頁能在更多的伺服器上正常地顯示,還是加上 “SET NAMES UTF8″ 吧,即使你現在沒有加上這句也能正常瀏覽。

問題多多,多謝指正!

Apache和PHP網頁的編碼問題分析

談談Apache和PHP網頁的編碼。還有一篇關於MySQL字符集的:http://www.phpchina.com/bbs/viewthread.php?tid=13861
談到Apache的編碼我們就要涉及到3個東西

  • http標記語言中的<META http-equiv=』content-type』 content=』text/html; charset=xxx』>標籤
  • PHP中的header(『content-type:text/html; charset=xxx』);函數
  • Apache配置文件httpd.conf中的AddDefaultCharset

一、<META http-equiv=』content-type』 content=』text/html; charset=xxx』>標籤
按順序來,先說這個<META>標籤,這個標籤有很多功能的,具體請點這裡
我今天想說只是上面提到的那種形式。解釋一下<META http-equiv=』content-type』 content=』text/html; charset=utf-8″>,意思是對這個網頁進行聲明,讓瀏覽器對整個頁面的內容採用xxx編碼,xxx可以為GB2312,GBK,UTF-8(和MySQL不同,MySQL是UTF8)等等。因此,大部分頁面可以採用這種方式來告訴瀏覽器顯示這個頁面的時候採用什麼編碼,這樣才不會造成編碼錯誤而產生亂碼。但是有的時候我們會發現有了這句還是不行,不管xxx是哪一種,瀏覽器採用的始終都是一種編碼,這個情況我後面會談到。
請注意,<meta>是屬於html信息的,僅僅是一個聲明,它起作用表明服務器已經把HTML信息傳到了瀏覽器。

二、header(『content-type:text/html; charset=xxx』);
這個函數header()的作用是把括號裡面的信息發到http標頭。關於此函數具體用法請點擊這裡
如果括號裡面的內容為文中所說那樣,那作用和<META>標籤基本相同,大家對照第一個看發現字符都差不多的。但是不同的是如果有這段函數, 瀏覽器就會永遠採用你所要求的xxx編碼,絕對不會不聽話,因此這個函數是很有用的。為什麼會這樣呢?那就得說說HTTPS標頭和HTML信息的差別了:

https標頭是服務器以HTTP協議傳送HTML信息到瀏覽器前所送出的字串。

因為meta標籤是屬於html信息的,所以header()發送的內容先到達瀏覽器,通俗點就是header()的優先級高於meta(不知道可不可以這樣講)。加入一個php頁面既有header(『content-type:text/html; charset=xxx』),又有<META http-equiv=』content-type』 content=』text/html; charset=xxx』>,瀏覽器就只認前者http標頭而不認meta了。當然這個函數只能在php頁面內使用。
同樣也留有一個問題,為什麼前者就絕對起作用,而後者有時候就不行呢?這就是接下來要談的Apache的原因了。

三、AddDefaultCharset
Apache根目錄的conf文件夾裡,有整個Apache的配置文檔httpd.conf。具體如何配置apache請點擊這裡([url=thread-2674-1-1.html]windows[/url],[url=thread-1381-1-1.html]linux[/url])。
用文本編輯器打開httpd.conf,第708行(不同版本可能不同)有AddDefaultCharset xxx,xxx為編碼名稱。這行代碼的意思:設置整個服務器內的網頁文件https標頭裡的字符集為你默認的xxx字符集。有這行,就相當於給每個文件都加了一行header(『content-type:text/html; charset=xxx』)。這下就明白為什麼明明meta設置了是utf-8,可瀏覽器始終採用gb2312的原因。
如果網頁裡有header(『content-type:text/html; charset=xxx』),就把默認的字符集改為你設置的字符集,所以這個函數永遠有用。如果把AddDefaultCharset xxx前面加個「#」,註釋掉這句,而且頁面裡不含header(『content-type…』),那這個時候就輪到meta標籤起作用了。


總結:
來個排序

  • header(『content-type:text/html; charset=xxx』)
  • AddDefaultCharset xxx
  • <META http-equiv=』content-type』 content=』text/html; charset=xxx』>

如果你是web程序員,給你的每個頁面都加個header(『content-type:text/html; charset=xxx』),保證它在任何服務器都能正確顯示,可移植性強。
至於那句AddDefaultCharset xxx,要不要註釋就仁者見仁了。反正我是註釋掉了,不過我寫頁子也要寫header(),便於放到不同的服務器上能正常顯示。

Categories: Apache, HTML, MySQL, PHP Tags:

e-texteditor的字型

2009年11月28日 Brian 尚無評論

consolas 12pt 這是微軟的程式用字型
使用theme Cobalt最好看,中文字也可以對得齊

consolas 字型下載

Categories: Program Tags:

e texteditor的個人化theme及設定檔在何處

2009年11月28日 Brian 尚無評論

You can find modified theme in c:\Documents and Settings\YOUR_ACCOUNT\Application Data\e\Themes\

Categories: Program Tags: , , ,