2008年2月13日 星期三

PHPMailer郵件函式庫

參考資料來源:實作PHPMailer郵件函式庫


PHPMailer是一個提供電子郵件相關功能的PHP函式庫,功能相當完整,可以讓你很輕鬆的發送郵件。它提供的功能包括:

  • 在發送郵時指定多個收件人,寄送副本,寄送密件副本和回復Email
  • 支援多種郵件編碼包括:8bit,base64,binary和quoted-printable
  • 支持SMTP驗證
  • 支援冗餘SMTP伺服器
  • 支援帶附件的郵件和Html格式的郵件
  • 自定義郵件頭
  • 支援在郵件中嵌入圖片
  • 調試靈活
  • 經測試相容的SMTP伺服器包括:Sendmail,qmail,Postfix,Imail,Exchange等
  • 可運行在任何平臺之上


官方網站
http://phpmailer.sourceforge.net/

下載位址
http://sourceforge.net/project/showfiles.php?group_id=26031

下載下來後,只要引入就可以使用。

以下是一簡單範例及說明:

< ? php //引入文件 require_once("phpmailer/class.phpmailer.php"); //宣告一個PHPMailer物件 $mail = new PHPMailer(); //設定使用SMTP發送 $mail->IsSMTP();
//指定SMTP的服務器位址
$mail->Host = "so-net.net.tw";
//設定SMTP服務的POST
$mail->Port = 25;
//設定為安全驗證方式
$mail->SMTPAuth = true;
//SMTP的帳號
$mail->Username = "xuhao";
//SMTP的密碼
$mail->assword = "********";
//寄件人Email
$mail->From = "xuhao@so-net.net.tw";
//寄件人名稱
$mail->FromName = "大鼻子";
//收件人Email
$mail->AddAddress("bignostriltao@yahoo.com.tw");
//設定收件人的另一種格式("Email","收件人名稱")
$mail->AddAddress("justin@recyclesources.com","阿豪");
//設定密件副本
$mail->AddBCC("bignostriltao@gmail.com");
//回信Email及名稱
$mail->AddReplyTo("xuhao@so-net.net.tw", "大鼻子");
//設定信件字元編碼
$mail->CharSet="utf-8";
//設定信件編碼,大部分郵件工具都支援此編碼方式
$mail->Encoding = "base64";
//設置郵件格式為HTML
$mail->IsHTML(true);
//每50自斷行
$mail->WordWrap = 50;
//傳送附檔
$mail->AddAttachment("upload/temp/filename.zip");
//傳送附檔的另一種格式,可替附檔重新命名
$mail->AddAttachment("upload/temp/filename.zip", "newname.zip");
//郵件標題
$mail->Subject="測試郵件";
//郵件內容
$mail->Body ="這是一封HTML格式的測試信。";
//附加內容
$mail->AltBody = '這是附加的信件內容';
//寄送郵件
if(!$mail->Send()){
echo "郵件無法順利寄出!";
echo "Mailer Error: " . $mail->ErrorInfo;
exit;
}
echo "郵件已經順利寄出!";
?>

參考資料來源:實作PHPMailer郵件函式庫


PHPMailer是一個提供電子郵件相關功能的PHP函式庫,功能相當完整,可以讓你很輕鬆的發送郵件。它提供的功能包括:

  • 在發送郵時指定多個收件人,寄送副本,寄送密件副本和回復Email
  • 支援多種郵件編碼包括:8bit,base64,binary和quoted-printable
  • 支持SMTP驗證
  • 支援冗餘SMTP伺服器
  • 支援帶附件的郵件和Html格式的郵件
  • 自定義郵件頭
  • 支援在郵件中嵌入圖片
  • 調試靈活
  • 經測試相容的SMTP伺服器包括:Sendmail,qmail,Postfix,Imail,Exchange等
  • 可運行在任何平臺之上


官方網站
http://phpmailer.sourceforge.net/

下載位址
http://sourceforge.net/project/showfiles.php?group_id=26031

下載下來後,只要引入就可以使用。

以下是一簡單範例及說明:

< ? php //引入文件 require_once("phpmailer/class.phpmailer.php"); //宣告一個PHPMailer物件 $mail = new PHPMailer(); //設定使用SMTP發送 $mail->IsSMTP();
//指定SMTP的服務器位址
$mail->Host = "so-net.net.tw";
//設定SMTP服務的POST
$mail->Port = 25;
//設定為安全驗證方式
$mail->SMTPAuth = true;
//SMTP的帳號
$mail->Username = "xuhao";
//SMTP的密碼
$mail->assword = "********";
//寄件人Email
$mail->From = "xuhao@so-net.net.tw";
//寄件人名稱
$mail->FromName = "大鼻子";
//收件人Email
$mail->AddAddress("bignostriltao@yahoo.com.tw");
//設定收件人的另一種格式("Email","收件人名稱")
$mail->AddAddress("justin@recyclesources.com","阿豪");
//設定密件副本
$mail->AddBCC("bignostriltao@gmail.com");
//回信Email及名稱
$mail->AddReplyTo("xuhao@so-net.net.tw", "大鼻子");
//設定信件字元編碼
$mail->CharSet="utf-8";
//設定信件編碼,大部分郵件工具都支援此編碼方式
$mail->Encoding = "base64";
//設置郵件格式為HTML
$mail->IsHTML(true);
//每50自斷行
$mail->WordWrap = 50;
//傳送附檔
$mail->AddAttachment("upload/temp/filename.zip");
//傳送附檔的另一種格式,可替附檔重新命名
$mail->AddAttachment("upload/temp/filename.zip", "newname.zip");
//郵件標題
$mail->Subject="測試郵件";
//郵件內容
$mail->Body ="這是一封HTML格式的測試信。";
//附加內容
$mail->AltBody = '這是附加的信件內容';
//寄送郵件
if(!$mail->Send()){
echo "郵件無法順利寄出!";
echo "Mailer Error: " . $mail->ErrorInfo;
exit;
}
echo "郵件已經順利寄出!";
?>

2008年1月23日 星期三

apache vhost 最快速設法

無法查看此摘要。請 按這裡查看文章。 無法查看此摘要。請 按這裡查看文章。

2008年1月22日 星期二

用 PHP 寫 RS232 串列通訊程式

從 用 PHP 寫 RS232 串列通訊程式 抄來的~~
相信經常在翻 PHP 手冊的人應該都有察覺,PHP 不只是可以用來開發網頁程式而已,很多其他語言能完成的工作 PHP 也都做的到,例如透過 PHP 的 Direct IO Functions 就可以對 Serial port 溝通,而且可以在 Windows 下執行,一般在 Windows 要實做 com port 通訊程式,大多是透過像 VB/VC++/C++ Builder 這類程式所提供的元件來撰寫,不過用 PHP 就可以很快實做出一般的功能囉!
在開始之前要先讓 PHP 支援 dio 才行,5.1.0 版之後已經將 dio 移至 PECL 了,可以到 PHP 官網下載編譯好的 PECL,解壓縮後將裡面的 php_dio.dll 放到 PHP 目錄的 ext 底下,接著修改 php.ini 加入 extension=php_dio.dll 即可。
(上述連結裡已無編釋好的php_dio.dll可供下載,須自行編釋)
可至http://cn.php.net/get/pecl-5.2.6-Win32.zip/from/a/mirror這裡下載

在 Windows 底下讀取 COM1 的例子:

<?php
exec('mode COM1: baud=19200 data=8 stop=1 parity=n');
$fd = dio_open('COM1:', O_RDWR);
while (1) {
$data = dio_read($fd, 1);
if ($data) {
echo $data;
}
}
dio_close($fd);
?>

寫法跟在 Linux 用 C 寫 serial 通訊程式差不多,其中 mode 是 Windows 命令列一個設定 serial port 組態的工具(類似 Linux 的 stty),可以打 mode /? 看詳細說明,設定好傳輸率等,接著用 dio_open 開啟裝置,然後就可以做存取的動作囉!

這裡是公司在用的範例
<?php
import_request_variables("gpc", "");
exec('mode COM1: baud=9600 data=8 stop=1 parity=n');
$fd = dio_open('COM1:', O_RDWR);
date_default_timezone_set( "Asia/Taipei" );
$echoData.="\r\n\r\n\r\n\r\n"; //先空4行
$echoData.=$company_name."\r\n"; //第5行
$echoData.="#".$company_no." ".$company_tel."\r\n"; //第6行
$echoData.=$company_addr."\r\n"; //第7行
$echoData.="\r\n"; //第8行
$echoData.="    ".date("Y/m/d H:i:s")."\r\n"; //日期,買受人,統編
$echoData.="    ".$user_title."\r\n";
$echoData.="    "."統編:".$user_no."\n\r\r\n";
//第12~第27行
$echoData.="網路服務費\r\n";
$echoData.="總共".$totalMoney."元\r\n";
$echoData.="-----------------\r\n";
$echoData.="付款方式:".$pay_method."\r\n";
$echoData.="物件編號:".$object_no."\r\n";
$echoData.="備  註:\r\n"; //1
$echoData.=$line2."\r\n"; //2
$echoData.=$line3."\r\n"; //3
$echoData.=$line4."\r\n"; //4
$echoData.=$line5."\r\n"; //5
$echoData.=$line6."\r\n"; //6
$echoData.=$line7."\r\n"; //7
$echoData.=$line8."\r\n"; //8
$echoData.="-----------------"."\r\n"; //9
//第28,29,30(銷售額,營業稅,總計)
$tax=$totalMoney*0.05;
$no_tax=$totalMoney-$tax;
$echoData.="    ".$no_tax."\r\n";
$echoData.="    ".$tax."\r\n";
$echoData.="    ".$totalMoney."\r\n";
//最後再空四行,以利下一頁再重新列印
$echoData.="\r\n";
$echoData.="\r\n";
$echoData.="\r\n";
$echoData.="\r\n";
dio_write($fd,$echoData);
dio_close($fd);
?>


參考資料:
http://blog.linym.net/archives/187
http://sakerlin.pixnet.net/blog/post/25466334
http://www.chinaunix.net/jh/27/771726.html
http://www.xspace.idv.tw/bo_blog/122
http://www.php.net/manual/zh/ref.dio.php
http://php.mirrors.ilisys.com.au/manual/en/install.pecl.phpize.php
從 用 PHP 寫 RS232 串列通訊程式 抄來的~~
相信經常在翻 PHP 手冊的人應該都有察覺,PHP 不只是可以用來開發網頁程式而已,很多其他語言能完成的工作 PHP 也都做的到,例如透過 PHP 的 Direct IO Functions 就可以對 Serial port 溝通,而且可以在 Windows 下執行,一般在 Windows 要實做 com port 通訊程式,大多是透過像 VB/VC++/C++ Builder 這類程式所提供的元件來撰寫,不過用 PHP 就可以很快實做出一般的功能囉!
在開始之前要先讓 PHP 支援 dio 才行,5.1.0 版之後已經將 dio 移至 PECL 了,可以到 PHP 官網下載編譯好的 PECL,解壓縮後將裡面的 php_dio.dll 放到 PHP 目錄的 ext 底下,接著修改 php.ini 加入 extension=php_dio.dll 即可。
(上述連結裡已無編釋好的php_dio.dll可供下載,須自行編釋)
可至http://cn.php.net/get/pecl-5.2.6-Win32.zip/from/a/mirror這裡下載

在 Windows 底下讀取 COM1 的例子:

<?php
exec('mode COM1: baud=19200 data=8 stop=1 parity=n');
$fd = dio_open('COM1:', O_RDWR);
while (1) {
$data = dio_read($fd, 1);
if ($data) {
echo $data;
}
}
dio_close($fd);
?>

寫法跟在 Linux 用 C 寫 serial 通訊程式差不多,其中 mode 是 Windows 命令列一個設定 serial port 組態的工具(類似 Linux 的 stty),可以打 mode /? 看詳細說明,設定好傳輸率等,接著用 dio_open 開啟裝置,然後就可以做存取的動作囉!

這裡是公司在用的範例
<?php
import_request_variables("gpc", "");
exec('mode COM1: baud=9600 data=8 stop=1 parity=n');
$fd = dio_open('COM1:', O_RDWR);
date_default_timezone_set( "Asia/Taipei" );
$echoData.="\r\n\r\n\r\n\r\n"; //先空4行
$echoData.=$company_name."\r\n"; //第5行
$echoData.="#".$company_no." ".$company_tel."\r\n"; //第6行
$echoData.=$company_addr."\r\n"; //第7行
$echoData.="\r\n"; //第8行
$echoData.="    ".date("Y/m/d H:i:s")."\r\n"; //日期,買受人,統編
$echoData.="    ".$user_title."\r\n";
$echoData.="    "."統編:".$user_no."\n\r\r\n";
//第12~第27行
$echoData.="網路服務費\r\n";
$echoData.="總共".$totalMoney."元\r\n";
$echoData.="-----------------\r\n";
$echoData.="付款方式:".$pay_method."\r\n";
$echoData.="物件編號:".$object_no."\r\n";
$echoData.="備  註:\r\n"; //1
$echoData.=$line2."\r\n"; //2
$echoData.=$line3."\r\n"; //3
$echoData.=$line4."\r\n"; //4
$echoData.=$line5."\r\n"; //5
$echoData.=$line6."\r\n"; //6
$echoData.=$line7."\r\n"; //7
$echoData.=$line8."\r\n"; //8
$echoData.="-----------------"."\r\n"; //9
//第28,29,30(銷售額,營業稅,總計)
$tax=$totalMoney*0.05;
$no_tax=$totalMoney-$tax;
$echoData.="    ".$no_tax."\r\n";
$echoData.="    ".$tax."\r\n";
$echoData.="    ".$totalMoney."\r\n";
//最後再空四行,以利下一頁再重新列印
$echoData.="\r\n";
$echoData.="\r\n";
$echoData.="\r\n";
$echoData.="\r\n";
dio_write($fd,$echoData);
dio_close($fd);
?>


參考資料:
http://blog.linym.net/archives/187
http://sakerlin.pixnet.net/blog/post/25466334
http://www.chinaunix.net/jh/27/771726.html
http://www.xspace.idv.tw/bo_blog/122
http://www.php.net/manual/zh/ref.dio.php
http://php.mirrors.ilisys.com.au/manual/en/install.pecl.phpize.php

2007年11月29日 星期四

在UltraEdit中作PHP語法檢查

參考自 Dabinn的筆記 的 文章
可以直接在UltraEdit中檢查php語法是否正確的設定
很好用的東東
記下來免得又忘了


Advanced-->Tool Configuration
按Insert

[Command]
Manu Item Name: PHP syntax Check
(PHP5)
Command Line: C:\php\php-win.exe -l -f %F
Working Directory: C:\php\
(PHP4)
Command Line: C:\php\cli\php.exe -l -f %F
Working Directory: C:\php\cli\

[Options]
Program Type: Dos program
v Save active File

[Output]
Command Output: Output to List Box
v Capture Output
Replace select text with: No Replace


設到這樣就已經可以用了
不過去設一下快速鍵會更順手
Advanced-->Configuration-->Key Mapping
找到AdvancedUserTool1
內定快速鍵是Ctrl+Shit+0
改為Alt+S

設定完了
平常按Ctrl+S是存檔
按Alt+S就是存檔並作語法檢查了
語法檢查結果會顯示在UltraEdit底下的視窗中
參考自 Dabinn的筆記 的 文章
可以直接在UltraEdit中檢查php語法是否正確的設定
很好用的東東
記下來免得又忘了


Advanced-->Tool Configuration
按Insert

[Command]
Manu Item Name: PHP syntax Check
(PHP5)
Command Line: C:\php\php-win.exe -l -f %F
Working Directory: C:\php\
(PHP4)
Command Line: C:\php\cli\php.exe -l -f %F
Working Directory: C:\php\cli\

[Options]
Program Type: Dos program
v Save active File

[Output]
Command Output: Output to List Box
v Capture Output
Replace select text with: No Replace


設到這樣就已經可以用了
不過去設一下快速鍵會更順手
Advanced-->Configuration-->Key Mapping
找到AdvancedUserTool1
內定快速鍵是Ctrl+Shit+0
改為Alt+S

設定完了
平常按Ctrl+S是存檔
按Alt+S就是存檔並作語法檢查了
語法檢查結果會顯示在UltraEdit底下的視窗中

2007年11月12日 星期一

最近太忙了....

最近忙翻了~~
先是到廣州出差
回來後又是瘋狂的改版
真是差點沒過勞死.....

謎之音:想不到一個多月了才寫一篇,而且還跟工作,理財不相關的題材..... 最近忙翻了~~
先是到廣州出差
回來後又是瘋狂的改版
真是差點沒過勞死.....

謎之音:想不到一個多月了才寫一篇,而且還跟工作,理財不相關的題材.....

2007年10月2日 星期二

Apache 檔案上傳限制設定

要修改的地方有二個
1.Apache的httpd.conf
2.PHP的phi.ini

httpd.conf的部份

< f i l e s >
SetOutputFilter PHP
SetInputFilter PHP
LimitRequestBody 524288
註:524288是512*1024,單位為bit
< / f i l e s >


php.ini的部份

;;;;;;;;;;;;;;;;;;;
; Resource Limits ;
;;;;;;;;;;;;;;;;;;;

max_execution_time = 20000

;Maximum execution time of each script, in seconds
max_input_time = 20000

; Maximum amount of time each script may spend parsing request data
memory_limit = 50M

; Maximum amount of memory a script may consume (50MB,default =8MB)

post_max_size = 50M

; Maximum size of POST data that PHP will accept.

;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;

; Whether to allow HTTP file uploads.
file_uploads = On

; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
;upload_tmp_dir =

; Maximum allowed size for uploaded files.
upload_max_filesize = 100M

要修改的地方有二個
1.Apache的httpd.conf
2.PHP的phi.ini

httpd.conf的部份

< f i l e s >
SetOutputFilter PHP
SetInputFilter PHP
LimitRequestBody 524288
註:524288是512*1024,單位為bit
< / f i l e s >


php.ini的部份

;;;;;;;;;;;;;;;;;;;
; Resource Limits ;
;;;;;;;;;;;;;;;;;;;

max_execution_time = 20000

;Maximum execution time of each script, in seconds
max_input_time = 20000

; Maximum amount of time each script may spend parsing request data
memory_limit = 50M

; Maximum amount of memory a script may consume (50MB,default =8MB)

post_max_size = 50M

; Maximum size of POST data that PHP will accept.

;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;

; Whether to allow HTTP file uploads.
file_uploads = On

; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
;upload_tmp_dir =

; Maximum allowed size for uploaded files.
upload_max_filesize = 100M

2007年10月1日 星期一

投資基金 善用夏普值、標準差

投資基金二年多了...
一直以來都是大概看一下市場趨勢...
下手....績效到一定程度就贖回...
從來就不看夏普值、標準差的....

看了這篇文章..來我要好好利用這二個數值了.....


投資基金 善用夏普值、標準差

面對投資,復華投信亞太成長基金經理人楊惠元要投資人捐棄一切先入為主的觀念,善用夏普值(Sharp Ra-tio)與標準差(Standard Devia-tion)這兩個容易獲得的統計數據,選出良好基金,並且決定進出場時點。


「許多投資人會被發行投信、產品的話題誤導」,楊惠元表示,不少投資人迷信「外國的月亮比較圓」,堅信海外市場就該由外資投信操盤,或是過度熱衷於話題基金。回歸到投資本質,一個好的全球基金操作團隊,什麼樣的話題熱潮都會即時布局,端賴投資人有沒有辦法找出這樣的基金。

37歲的楊惠元,在投資上相當積極,投資基金以單筆操作為主,因此挑選基金、決定進出場時點變的非常重要。在挑選基金上,楊惠元建議投資人可以回歸數字面,理性選擇基金。 首先,楊惠元要投資人參考基金的夏普值,夏普值是指基金每一單位的風險所能獲得的超額報酬,該值愈高,表示在相同風險下,帶來的報酬愈大,也就是基金的績效愈好,是同時衡量風險及報酬的最佳指標。

楊惠元認為,夏普值是最能夠彰顯操盤能力的數值,因此建議投資人以夏普值篩選基金。 在選出基金後,建議可以由報酬率的標準差來衡量基金的波動度,以決定進出場時機。簡單而言,在基金報酬率幅度高出一個標準差時,就可以贖回一半的投資金額,高出兩個標準差時,便可以全面獲利了結。

若是基金在市場態勢不變下,績效卻不如預期,報酬率幅度低於平均超過一個標準差,這時候代表基金處於低點,建議可以加碼一半額度,或是降低超過兩個標準差,則建議全面加碼,低點布局。

那麼,什麼時候應該認賠出場呢?投資態度積極的楊惠元表示,假設市場出現反轉趨勢,或基金報酬率持續低於平均超過一個標準差的情況逾一個禮拜,就建議認賠出場。 一個禮拜的時間或許很短,但在楊惠元觀念中,資金利用分秒必爭,表現偏弱的市場,長線雖然有回升可能,但在資金等待市場轉強的同時,一定有更好的標的可以投資。然而,楊惠元提醒投資人,這樣的基金操作方式需要有一定的歷史依據,建議投資人介入成立二、三年以上的基金,並且搭配總體經濟、產業新聞觀察,投資方向將更明確。


徐慧君 【2007-09-24/經濟日報/B5版/基金平台】
投資基金二年多了...
一直以來都是大概看一下市場趨勢...
下手....績效到一定程度就贖回...
從來就不看夏普值、標準差的....

看了這篇文章..來我要好好利用這二個數值了.....


投資基金 善用夏普值、標準差

面對投資,復華投信亞太成長基金經理人楊惠元要投資人捐棄一切先入為主的觀念,善用夏普值(Sharp Ra-tio)與標準差(Standard Devia-tion)這兩個容易獲得的統計數據,選出良好基金,並且決定進出場時點。


「許多投資人會被發行投信、產品的話題誤導」,楊惠元表示,不少投資人迷信「外國的月亮比較圓」,堅信海外市場就該由外資投信操盤,或是過度熱衷於話題基金。回歸到投資本質,一個好的全球基金操作團隊,什麼樣的話題熱潮都會即時布局,端賴投資人有沒有辦法找出這樣的基金。

37歲的楊惠元,在投資上相當積極,投資基金以單筆操作為主,因此挑選基金、決定進出場時點變的非常重要。在挑選基金上,楊惠元建議投資人可以回歸數字面,理性選擇基金。 首先,楊惠元要投資人參考基金的夏普值,夏普值是指基金每一單位的風險所能獲得的超額報酬,該值愈高,表示在相同風險下,帶來的報酬愈大,也就是基金的績效愈好,是同時衡量風險及報酬的最佳指標。

楊惠元認為,夏普值是最能夠彰顯操盤能力的數值,因此建議投資人以夏普值篩選基金。 在選出基金後,建議可以由報酬率的標準差來衡量基金的波動度,以決定進出場時機。簡單而言,在基金報酬率幅度高出一個標準差時,就可以贖回一半的投資金額,高出兩個標準差時,便可以全面獲利了結。

若是基金在市場態勢不變下,績效卻不如預期,報酬率幅度低於平均超過一個標準差,這時候代表基金處於低點,建議可以加碼一半額度,或是降低超過兩個標準差,則建議全面加碼,低點布局。

那麼,什麼時候應該認賠出場呢?投資態度積極的楊惠元表示,假設市場出現反轉趨勢,或基金報酬率持續低於平均超過一個標準差的情況逾一個禮拜,就建議認賠出場。 一個禮拜的時間或許很短,但在楊惠元觀念中,資金利用分秒必爭,表現偏弱的市場,長線雖然有回升可能,但在資金等待市場轉強的同時,一定有更好的標的可以投資。然而,楊惠元提醒投資人,這樣的基金操作方式需要有一定的歷史依據,建議投資人介入成立二、三年以上的基金,並且搭配總體經濟、產業新聞觀察,投資方向將更明確。


徐慧君 【2007-09-24/經濟日報/B5版/基金平台】