目前分類:PHP (35)

瀏覽方式: 標題列表 簡短摘要

原文網址:http://www.dannyherran.com/2011/02/detect-mobile-browseruser-agent-with-php-ipad-iphone-blackberry-and-others/

以下原文轉載
----------------------------------------------------------------------------------------------

Detect mobile browser/user agent with PHP (iPad, iPhone, Android, BlackBerry, WP7 and others)

With all this load of smartphones and tablets, it is mandatory for us as developers to optimize our content as much as possible so everybody can see it, no matter what device they are using. This is why I wrote a small but powerful function to properly detect a wide range of mobile devices and redirect to an special content accordingly.

Lets take a look:

Code:
1
2
3
4
5
6
7
8
function detect_mobile()
{
    if(preg_match('/(alcatel|amoi|android|avantgo|blackberry|benq|cell|cricket|docomo|elaine|htc|iemobile|iphone|ipad|ipaq|ipod|j2me|java|midp|mini|mmp|mobi|motorola|nec-|nokia|palm|panasonic|philips|phone|sagem|sharp|sie-|smartphone|sony|symbian|t-mobile|telus|up\.browser|up\.link|vodafone|wap|webos|wireless|xda|xoom|zte)/i', $_SERVER['HTTP_USER_AGENT']))
        return true;
 
    else
        return false;
}

This function can detect most (if not all) of all the standard “dumb” phones, smartphones, including the iPhone, iPad, Android and Windows Phone 7. Lets say you want to redirect your users to your blog if they are accessing your home page from a mobile device:

Code:
1
2
3
4
$mobile = detect_mobile();
 
if($mobile === true)
    header('Location: blog');

Nice and easy!

Changelog:
24/03/2011 – Updated for Android
25/04/2011 – Updated for Windows Phone 7
23/05/2011 – Updated for iPod Touch
16/01/2012 – Rewritten, shortened. Deleted unnecesary checks. Added Windows CE support.

 By  · on February 2, 2011 at 6:52 pm · 63 comments

Tags:        

yoonow 發表在 痞客邦 留言(0) 人氣()

原文網址:http://blog.roodo.com/pokey/archives/16354565.html

以下轉載原文

-----------------------------------------------------------------------------------

最近的一個Case必須要套用Barcode,
但是距離我還有印象的Barcode年代,已經過了好多好多個年,早就已經忘光了。
在這裡簡單分享我找到的Barcode for PHP,以及套用的步驟。

這篇介紹的只是我找到,覺得好理解,套用起來不麻煩的組件。
而且支援的格式相當多,
唯一缺點是沒辦法很彈性的去設定Barcode的長寬。
不過趕時間不想去Try其他人提供的Code的話,
其實Barcode Generator程式架構寫的還OK,去翻翻他的原始碼稍微修改一下也不太花時間。


 

 
我使用的是來自PHP Classes網站的BarcodeGenerator。
剛剛才發現居然版號是2005年. . . 但是其實不要緊。
因為他只是使用GD去產生黑白色塊,而條碼的規則早就已經制定好兩萬多年,不用去計較年份。

 Barcode_Generator-2005-09-08.zip 
以上這是原始檔名,我只提供
 PHP Classes 的連結,要下載需要註冊會員。
如果經常要使用PHP當開發語言,註冊一下吧,他有很豐富的Classes資料庫,
由一堆人因應各種需求寫完程式以後分享給大家使用。For Freeeeeee....

套用開始:

1.請記得開啟PHP的GD功能
不是自建主機,請聯絡你的虛擬主機提供商,
自建主機的,請自己去找找怎麼開啟,這樣才學得會. . .  其實是我也不太懂,都是拜Google大神 
2.打開壓縮檔有以下檔案結構


Class資料夾: 
放置一堆各式各樣類型的code規則。留下你需要用的就好,像我要使用的是ean13。就留下ean13.barcode.php。記得別刪到一些用來產生圖片或填色的php檔,安全的作法有兩種。刪一個,就去測試看看還能不能正常使用;最保險的就是. . . 別刪。
Html資料夾: 
產出對應Code格式的頁面,也是一樣留下你需要用的就好,可以好好瘦身。也是同上,別刪到產圖的檔案,例如image.php。
根目錄資料: 
一堆不重要的碎擋,可以D掉。根目錄留index.php即可。
留下index.php只是要介紹他怎麼產出,了解他出圖規則後,就可以砍了。

3.測試Barcode
丟上你的測試環境後,譬如丟到/www/barcode。
鍵入你的網址 http://localhost/barcode/index.php
可以看到以下畫面。

Type: 
Codabar,Code 11/39/93/128, EAN 8/13/ISBN, Interleaved 2 of 5, Standard 2 of 5, MSI, UPC A/E/E2D/E5D, PostNet, Other Code。請自己選擇合適的,當然有些條碼其實很少人使用,可能多數的條碼機無法辨識,請先確認格式。
Output: 
圖片輸出的格式。PNG/JPG。
Thickness:  
條碼的高度,看起來單位是pixel。
Resolution: 
 你的粗細. . .  條碼的粗細。會影響整個條碼圖式的寬度。僅分三種size。
Font Size: 
條碼下方數字的大小。也可以不顯示。但是還是建議顯示,畢竟調碼有可能損壞,就必須透過人眼辨識系統來判斷了。
Text: 
條碼號。請根據不同的編碼格式輸入數字,他有基本防呆可以幫你偵錯。

OK以後按下Generator就會出現啦。沒出現的話請檢察GD是否啟動,方法? 請找Google。

產生出來的圖檔我們按右鍵,去看看他的圖片路徑。

圖片路徑: 
http://localhost/barcode/html/image.php?code=ean13&o=1&t=30&r=2&text=123456789012&f=1&a1=&a2=
很明顯的這就是我們剛剛選擇的參數。
直接將參數複製在網址列上,只有IE可以正常顯示,FireFox和Chrome會顯是一堆亂碼。
但是應用在網頁中,以圖片方式產出,不會有這個問題的。

我們開始套用吧。
1. 首先準備一張圖,沒有圖沒關係,我提供一張給你。檔名diablo.jpg


2.預定要輸出Barcode的網頁。檔名barcode_output.php
輸入以下程式碼。
<table width="650" border="0" cellspacing="0" cellpadding="0">
    <tr>
        <td background="diablo.jpg" width="650" height="650" valign="top" align="left">
            <div style="padding:3px 3px 3px 3px;margin:165px 6px 6px 20px;background-color:#F0F0F0;width:110px;text-align:center;">
                <img src="html/image.php?code=ean13&o=2&t=20&r=1&text=123456789012&f=1&a1=&a2=" alt="Error? Can\'t display image!" />
            </div>
        </td>
    </tr>
</table>


我們把圖片壓在表格的背景圖中。然後文字對齊讓他靠右靠上。
在div的style中設定一些邊框,讓barcode看起來不要太死。
接下來裝上我們的barcode <img>。
這邊比較特別,img的src是指向一個php檔,也就是我們剛剛對圖片複製的那串連結。
這邊就可以透過程式去產出你的text(條碼編號)甚至是自訂的寬度高度設定。

就這樣就完成了。可以印一印拿去賣了。

別抓我,這只是教學. . . 。

謝謝收看。

yoonow 發表在 痞客邦 留言(0) 人氣()

原文網址:http://halladay5364.pixnet.net/blog/post/1932168-php%E8%A3%BD%E4%BD%9C%E4%B8%80%E7%B6%AD%E6%A2%9D%E7%A2%BC

以下轉載原文

---------------------------------------------------------------------------------

因為要直接從程式產生一維條碼,所以要靠自己寫

看了很多人寫的一維條碼的資料,終於看懂了

大部分超商都是使用" EAN-13 "

 

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

EAN-13碼(European Article Number,歐洲商品條碼)是1977年由歐洲十二個工業國家所共同發展出來的一種條碼系統,其後逐漸變成國際性的條碼系統,一般多用作商品標示條碼。其編碼特性如下: 

1. 資料只能為0~9之數字計12個,連同檢查碼共13碼。資料中包括國家代碼3碼、廠商代碼4碼、產品代碼5碼,為一種專用於商品標示的條碼。 
2. 編碼結構為〔護線+6個左資料碼+中線+5個右資料碼+檢查碼+護線〕,共佔119條線。其中在畫線時,護線和中線在下方均略長於資料碼,以便肉眼能明顯區分,但對於條碼機閱讀時並無差異。 
3. 左資料的編碼方式有A、B兩組之分,而資料的第一碼隱藏在左資料碼的編碼方式,故實際只編出12碼。以下為左資料依首碼所對應使用的編碼方式:

0 AAAAAA
1 AABABB
2 AABBAB
3 AABBBA
4 ABAABB
5 ABBAAB
6 ABBBAA
7 ABABAB
8 ABABBA
9 ABBABA 

4. 左資料的編碼方式,A組編碼為:

0 0001101
1 0011001
2 0010011
3 0111101
4 0100011
5 0110001
6 0101111
7 0111011
8 0110111
9 0001011

B組編碼為:

0 0100111
1 0110011
2 0011011
3 0100001
4 0011101
5 0111001
6 0000101
7 0010001
8 0001001
9 0010111

以上各位元0為白,1為黑。 

5. 護線固定為101,中線固定為01010,各位元0為白,1為黑。 
6. 右資料編碼方式固定為:

0 1110010
1 1100110
2 1101100
3 1000010
4 1011100
5 1001110
6 1010000
7 1000100
8 1001000
9 1110100

各位元0為白,1為黑。

驗證碼算法:

 

 國家代號(3位數) 中華民國的國家代號為471。
▲ 廠商代號(6位數) 由本會核發給廠商6位數的廠商代號。
 商品代號(3位數) 由廠商自行編定,按一物一號的原則,不同的 商品賦予不同的序號。(包裝、尺寸、顏色、 材質等不同,應視為不同的商品)
 檢核碼 按"10法則"的公式計算得之。
 
檢核碼計算方式
 
國家代號
廠商代號
商品
代號



位數
13
12
11
10
9
8
7
6
5
4
3
2
1
條碼編號
4
7
1
1
2
3
4
5
6
0
0
1
 
步驟一
偶位數數值相加乘3
7+1+3+5+0+1=17,17×3=51
步驟二
奇位數數值相加
4+1+2+4+6+0=17
步驟三
將步驟一與步驟三之和相加
51+17=68
步驟四
以10減去步驟三總和之個
位數,所得即為檢核碼
10-8=2→檢核碼
若步驟三總和的個位數為"0",
檢核碼即為"0"

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

實際範例:  4 714947 000196

從 開頭 471 可以得知 是台灣條碼

而從 4 知道 要用ABAABB (左資料的編碼方式有A、B兩組之分,而資料的第一碼隱藏在左資料碼的編碼方式)

 

  ABAABB  
4    
7 0111011 A
1 0110011 B
4 0100011 A
9 0001011 A
4 0011101 B
7 0010001 B
0 1110010  
0 1110010  
0 1110010  
1 1100110  
9 1110100  
6 1010000  
   

0為白

1為黑。 

依照以上的來畫線 就可以畫出來了。

編碼結構為〔護線+6個左資料碼+中線+5個右資料碼+檢查碼+護線〕,共佔119條線。其中在畫線時,護線和中線在下方均略長於資料碼,以便肉眼能明顯區分,但對於條碼機閱讀時並無差異。

護線固定為101,中線固定為01010,各位元0為白,1為黑。

將2邊加上

101 + 714947 + 01010 + 000196 + 101  (粗體為十進位,其他為二進位,請自行轉換十進位)

 

ex: 101011101101100110100011000101100010110011101001000101010111001011100101110010110011011101001010000

按照上面 0空白 1畫線 就可以畫出

一維條碼 


 

 

 

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

參考:

http://www.programmer-club.com.tw/ShowSameTitleN/general/7269.html

http://www.vixual.net/blog/archives/89

http://adc.cm.nsysu.edu.tw/barcode/1d_def.htm

http://tw.knowledge.yahoo.com/question/question?qid=1105052607348

yoonow 發表在 痞客邦 留言(0) 人氣()

原文網址:http://bojack.pixnet.net/blog/post/3780245-%E5%88%A9%E7%94%A8-php-%E7%A8%8B%E5%BC%8F%E7%94%A2%E7%94%9F%E6%A2%9D%E7%A2%BC

以下轉載原文

--------------------------------------------------------------------------------

在 EcStart 論壇 看這個實用的功能,原則上 PHP 要有支援 GD 的功能就可以了!

使用的方式很簡單 ... 範例語法如下

<IMG SRC="barcode.php?barcode=HELLO&quality=75">
<IMG SRC="barcode.php?barcode=123456&width=320&height=200">


程式碼在這個地方

---------------------------------------------------------------------------------

以下轉載程式碼

<?php
/*===========================================================================*/
/*      PHP Barcode Image Generator v1.0 [9/28/2000]
        Copyright (C)2000 by Charles J. Scheffold - cs@wsia.fm

        This code is hereby released into the public domain.
        Use it, abuse it, just don't get caught using it for something stupid.

        The only barcode type currently supported is Code 3 of 9. Don't ask about 
        adding support for others! This is a script I wrote for my own use. I do 
        plan to add more types as time permits but currently I only require 
        Code 3 of 9 for my purposes. Just about every scanner on the market today
        can read it.

        PARAMETERS:
        -----------
        $barcode        = [required] The barcode you want to generate

        $type           = (default=0) It's 0 for Code 3 of 9 (the only one supported)
        
        $width          = (default=160) Width of image in pixels. The image MUST be wide
                                  enough to handle the length of the given value. The default
                                  value will probably be able to display about 6 digits. If you
                                  get an error message, make it wider!

        $height         = (default=80) Height of image in pixels
        
        $format         = (default=jpeg) Can be "jpeg", "png", or "gif"
        
        $quality        = (default=100) For JPEG only: ranges from 0-100

        $text           = (default=1) 0 to disable text below barcode, >=1 to enable

        NOTE: You must have GD-1.8 or higher compiled into PHP
        in order to use PNG and JPEG. GIF images only work with
        GD-1.5 and lower. (http://www.boutell.com)

        ANOTHER NOTE: If you actually intend to print the barcodes 
        and scan them with a scanner, I highly recommend choosing 
        JPEG with a quality of 100. Most browsers can't seem to print 
        a PNG without mangling it beyond recognition. 

        USAGE EXAMPLES FOR ANY PLAIN OLD HTML DOCUMENT:
        -----------------------------------------------

        <IMG SRC="barcode.php?code=HELLO&quality=75">

        <IMG SRC="barcode.php?code=123456&width=320&height=200">
                
        
*/
/*=============================================================================*/

//-----------------------------------------------------------------------------
// Startup code
//-----------------------------------------------------------------------------

if (!isset ($text)) $text = 1;
if (empty ($quality)) $quality = 100;
if (empty ($width)) $width = 160;
if (empty ($height)) $height = 80;
if (!empty ($format)) $format = strtoupper ($format);

switch ($type)
{
        default:
                $type = 1;
        case 1:
                Barcode39 ($barcode, $width, $height, $quality, $format, $text);
                break;          
}

//-----------------------------------------------------------------------------
// Generate a Code 3 of 9 barcode
//-----------------------------------------------------------------------------
function Barcode39 ($barcode, $width, $height, $quality, $format, $text)
{
        switch ($format)
        {
                default:
                        $format = "JPEG";
                case "JPEG": 
                        header ("Content-type: image/jpeg");
                        break;
                case "PNG":
                        header ("Content-type: image/png");
                        break;
                case "GIF":
                        header ("Content-type: image/gif");
                        break;
        }

        $im = ImageCreate ($width, $height)
    or die ("Cannot Initialize new GD image stream");
        $White = ImageColorAllocate ($im, 255, 255, 255);
        $Black = ImageColorAllocate ($im, 0, 0, 0);
        //ImageColorTransparent ($im, $White);
        ImageInterLace ($im, 1);


        $NarrowRatio = 20;
        $WideRatio = 55;
        $QuietRatio = 35;

        $nChars = (strlen($barcode)+2) * ((6 * $NarrowRatio) + (3 * $WideRatio) + ($QuietRatio));
        $Pixels = $width / $nChars;
        $NarrowBar = (int)(20 * $Pixels);
        $WideBar = (int)(55 * $Pixels);
        $QuietBar = (int)(35 * $Pixels);

        $ActualWidth = (($NarrowBar * 6) + ($WideBar*3) + $QuietBar) * (strlen ($barcode)+2);
        
        if (($NarrowBar == 0) || ($NarrowBar == $WideBar) || ($NarrowBar == $QuietBar) || ($WideBar == 0) || ($WideBar == $QuietBar) || ($QuietBar == 0))
        {
                ImageString ($im, 1, 0, 0, "Image is too small!", $Black);
                OutputImage ($im, $format, $quality);
                exit;
        }
        
        $CurrentBarX = (int)(($width - $ActualWidth) / 2);
        $Color = $White;
        $BarcodeFull = "*".strtoupper ($barcode)."*";
        settype ($BarcodeFull, "string");
        
        if ($text != 0)
        {
                $FontNum = 3;
                $FontHeight = ImageFontHeight ($FontNum);
                $FontWidth = ImageFontWidth ($FontNum);
                $CenterLoc = (int)(($width-1) / 2) - (int)(($FontWidth * strlen($BarcodeFull)) / 2);
                ImageString ($im, $FontNum, $CenterLoc, $height-$FontHeight, "$BarcodeFull", $Black);
        }

        for ($i=0; $i<strlen($BarcodeFull); $i++)
        {
                $StripeCode = Code39 ($BarcodeFull[$i]);

                for ($n=0; $n < 9; $n++)
                {
                        if ($Color == $White) $Color = $Black;
                        else $Color = $White;

                        switch ($StripeCode[$n])
                        {
                                case '0':
                                        ImageFilledRectangle ($im, $CurrentBarX, 0, $CurrentBarX+$NarrowBar, $height-1-$FontHeight-2, $Color);
                                        $CurrentBarX += $NarrowBar;
                                        break;

                                case '1':
                                        ImageFilledRectangle ($im, $CurrentBarX, 0, $CurrentBarX+$WideBar, $height-1-$FontHeight-2, $Color);
                                        $CurrentBarX += $WideBar;
                                        break;
                        }
                }

                $Color = $White;
                ImageFilledRectangle ($im, $CurrentBarX, 0, $CurrentBarX+$QuietBar, $height-1-$FontHeight-2, $Color);
                $CurrentBarX += $QuietBar;
        }

        OutputImage ($im, $format, $quality);
}

//-----------------------------------------------------------------------------
// Output an image to the browser
//-----------------------------------------------------------------------------
function OutputImage ($im, $format, $quality)
{
        switch ($format)
        {
                case "JPEG": 
                        ImageJPEG ($im, "", $quality);
                        break;
                case "PNG":
                        ImagePNG ($im);
                        break;
                case "GIF":
                        ImageGIF ($im);
                        break;
        }
}

//-----------------------------------------------------------------------------
// Returns the Code 3 of 9 value for a given ASCII character
//-----------------------------------------------------------------------------
function Code39 ($Asc)
{
        switch ($Asc)
        {
                case ' ':
                        return "011000100";     
                case '$':
                        return "010101000";             
                case '%':
                        return "000101010"; 
                case '*':
                        return "010010100"; // * Start/Stop
                case '+':
                        return "010001010"; 
                case '|':
                        return "010000101"; 
                case '.':
                        return "110000100"; 
                case '/':
                        return "010100010"; 
                case '0':
                        return "000110100"; 
                case '1':
                        return "100100001"; 
                case '2':
                        return "001100001"; 
                case '3':
                        return "101100000"; 
                case '4':
                        return "000110001"; 
                case '5':
                        return "100110000"; 
                case '6':
                        return "001110000"; 
                case '7':
                        return "000100101"; 
                case '8':
                        return "100100100"; 
                case '9':
                        return "001100100"; 
                case 'A':
                        return "100001001"; 
                case 'B':
                        return "001001001"; 
                case 'C':
                        return "101001000";
                case 'D':
                        return "000011001";
                case 'E':
                        return "100011000";
                case 'F':
                        return "001011000";
                case 'G':
                        return "000001101";
                case 'H':
                        return "100001100";
                case 'I':
                        return "001001100";
                case 'J':
                        return "000011100";
                case 'K':
                        return "100000011";
                case 'L':
                        return "001000011";
                case 'M':
                        return "101000010";
                case 'N':
                        return "000010011";
                case 'O':
                        return "100010010";
                case 'P':
                        return "001010010";
                case 'Q':
                        return "000000111";
                case 'R':
                        return "100000110";
                case 'S':
                        return "001000110";
                case 'T':
                        return "000010110";
                case 'U':
                        return "110000001";
                case 'V':
                        return "011000001";
                case 'W':
                        return "111000000";
                case 'X':
                        return "010010001";
                case 'Y':
                        return "110010000";
                case 'Z':
                        return "011010000";
                default:
                        return "011000100"; 
        }
}

?>


yoonow 發表在 痞客邦 留言(0) 人氣()

原文:http://www.neo.com.tw/archives/896

以下全文轉載

---------------------------------------------------------------------------

雖然 PHP 有附 PDFlib,不過使用起來實在有點複雜。

20060415_01.png
(PHP 說明文件中的範例)


FPDF
雖然現在已經停止更新了,但 FPDF 可謂是元老級的 PDF 程式庫,短短的幾行程式就可以產生出 PDF 檔案。最可怕的是現今的 PHP PDF 程式庫大多是由 FPDF 衍生出來的。(可謂程式界的桃生純太)

20060415_02.png
(FDPF 的範例)

授權方式: 任你處置
官方網址: http://www.fpdf.org/

UFPDF
由於 FPDF 不支援 UTF-8 ,所以有善心人士做了一個 UFPDF 出來。

授權方式: GPL
官方網址: http://www.acko.net/blog/ufpdf

FPDI (Apache Software License 2.0)
可以把 PDF 檔案匯入當作 FPDF 的樣板使用。而且 FPDI 還另外提供了FPDI_Protection 來保護 FPDF/FPDI 的 PDF 檔案。

授權方式: Apache License 2.0
官方網址: http://fpdi.setasign.de

TCPDF
也是由 FPDF 改寫而來,除了支援 UTF-8 之外,最特別的地方就是整合了 Generic Barcode Render Class,可以直接在 PDF 上加上條碼。(目前只支援 PHP5)

授權方式: LGPL
官方網址: http://tcpdf.sourceforge.net/

================= HTML 轉 PDF =================

HTML 2 (F)PDF
嫌一個個貼文字跟圖型到 PDF 太累? HTML 2 (F)PDF 一次幫你把 HTML 轉成 PDF,夠輕鬆了吧。

授權方式: LGPL
官方網址: http://html2fpdf.sourceforge.net/

HTML To PDF Conversion
另一個將 HTML 轉為 PDF 的程式,只是看起來不支援 UTF-8。

授權方式: PHP
官方網址: http://www.rustyparts.com/pdf.php

dompdf
支援 UTF-8 的 HTML 轉 PDF 程式,但是必須安裝 PDFLib 的正式授權版才能支援UTF-8 ,且需在 PHP 5 環境下執行。

授權方式: LGPL
官方網址: http://www.digitaljunkies.ca/dompdf

html2ps and html2pdf
也是可以把 HTML 轉成 PDF 的程式,不過是看起來是透過 GhostScript 來轉換的,有興趣的人可以去看看。

授權方式: FREE for commercial and non-commercial use
官方網址: http://www.tufat.com/script.php?id_num=19

 

迴響

有關fpdf+中文Unicode的解決方法, 請參考這篇
http://twpug.net/modules/newbb/viewtopic.php?topic_id=1570&forum=14&post_id=6400
~~~~~~~~~~~~~~~~~~~~~~~~(截取如下)
可以參考這個網頁
http://www.fpdf.org/phorum/read.php?f=1&i=5142&t=5142 (後半段)

有三個必要套件
1 fpdf http://www.fpdf.org
2 chinese http://www.fpdf.org/download/chinese.zip
3 chinese-unicode https://www.eejj.net/fpdf/chinese-unicode.zip

關於 unicode 部分, 請參照 chinese-unicode 中的 readme 來設定即可!


 

yoonow 發表在 痞客邦 留言(0) 人氣()

原文網址:http://www.dreamweaver.com.tw/?fid=7&viewtopic=29692

原文轉載如下:

---------------------------------------------------------------------------------------

在上一篇([PHP] 線上發信如何通過驗證的SMTP(使用PHPMailer)中我們討論到如何使用 PHPMailer 類別來通過驗證的伺服器,其實如果您下載了PHPMailer並解開壓縮後,可以在<examples>資料夾中看到各個不同狀況下使用 PHPMailer 來發信的程式碼,其中<test_gmail.php>就是使用 PHPMailer透過Gmail的範例。

茶米整理一下在這裡分享給大家:

 

 
  1. <?php    
  2. include("class.phpmailer.php"); //匯入PHPMailer類別       
  3.       
  4. $mailnew PHPMailer(); //建立新物件        
  5. $mail->IsSMTP(); //設定使用SMTP方式寄信        
  6. $mail->SMTPAuth = true; //設定SMTP需要驗證        
  7. $mail->SMTPSecure = "ssl"// Gmail的SMTP主機需要使用SSL連線   
  8. $mail->Host = "smtp.gmail.com"//Gamil的SMTP主機        
  9. $mail->Port = 465;  //Gamil的SMTP主機的SMTP埠位為465埠。        
  10. $mail->CharSet = "big5"//設定郵件編碼        
  11.       
  12. $mail->Username = "*********"//設定驗證帳號        
  13. $mail->Password = "*********"//設定驗證密碼        
  14.       
  15. $mail->From = XXX@XXX.XXX.XXX; //設定寄件者信箱        
  16. $mail->FromName = "測試人員"//設定寄件者姓名        
  17.       
  18. $mail->Subject = "PHPMailer 測試信件"//設定郵件標題        
  19. $mail->Body = "大家好,       
  20. 這是一封測試信件!       
  21. "; //設定郵件內容        
  22. $mail->IsHTML(true); //設定郵件內容為HTML        
  23. $mail->AddAddress("david@e-happy.com.tw""茶米"); //設定收件者郵件及名稱        
  24.       
  25. if(!$mail->Send()) {        
  26. echo "Mailer Error: " . $mail->ErrorInfo;        
  27. else {        
  28. echo "Message sent!";        
  29. }    
  30. ?>  

一般來說這樣即可完成使用 Gmail 發信的動作了,茶米在實作中有幾個要注意的事項敘述如下:

  1. 其中要注意的是Gmail 的 SMTP主機固定位址是 smtp.gmail.com,必須使用 465 埠以 SSL 的方式來連線。
  2. 有許多朋友可能在測試時還是無法正確連線,根據茶米的經驗要檢查的地方,是若要使用 SSL 的方式進行連線,PHP 必須安裝 OpenSSL 的擴充程式,如此才能正確連線並使用 Gmail 執行寄信的動作。

分享給您使用。

 

yoonow 發表在 痞客邦 留言(1) 人氣()

文章網址:http://0123456789.tw/?p=115

原文轉載如下:

----------------------------------------------------------------------------------------------

PHPMAILER + GMAIL 終於寄出信件了﹨(╯▽╰)∕
在網路上找了一天 國內外的文章都看過
終於找到可以用的寫法了
GMAIL 真是龜毛
================================

require_once("class.phpmailer.php");
$mail = new PHPMailer();
$mail->IsSMTP(); // set mailer to use SMTP
$mail->CharSet = ‘utf-8′;
$mail->Encoding = ‘base64′;
$mail->From = ‘t0918013013@gmail.com’;
$mail->FromName =’ttt’;
$mail->Host =’ssl://smtp.gmail.com’;
$mail->Port = 465; //default is 25, gmail is 465 or 587
$mail->SMTPAuth = true;
$mail->Username = "*********@gmail.com";
$mail->Password = "*******";
$mail->AddAddress("t0918013013@gmail.com");
$mail->WordWrap = 50;
if (!empty($attach))

$mail->IsHTML(false);
$mail->Subject = $subject;
$mail->Body = $body;

if(!$mail->Send())
{
echo "通知信件寄出失敗";
echo "Mailer Error: " . $mail->ErrorInfo;
exit;
}
echo "通知信件已寄出";
?>

================================
通知信件已寄出
看到這行字還真感動



更多内容 http://0123456789.tw/?p=115#ixzz1MrAgKaRD

yoonow 發表在 痞客邦 留言(0) 人氣()

使用 strrchr() 函式,可以取得檔案副檔名。

$filename = "noname.jpg"; //檔案檔名

$ext_name = strrchr($filename, "."); //取得副檔名 .jpg,請注意有包含點〝 . 〞

$ext_name = str_replace(".", "", $ext_name); //去除附檔名前的點

//把附檔名轉換成小寫以免在區分大小寫的作業系統上產生不一樣的結果

if(strtolower($ext_name)=="jpg"){

echo "這是JPG圖片檔";

}

-------------------------------------------------------------------------------------------------------------

另外在網路上找到另一篇文章,原文轉載如下:
(原文網址:http://phpwrite.blogspot.com/2010/06/php.html

-----------------------------------------------------------------------------------------------------------

//example1
function file_extension($filename) {
    return substr(strrchr($filename,'.'),1);
}

//example2
function file_extension($filename) {
    return end(explode(".", $filename));
}

//但實際上這樣寫就夠了
echo pathinfo($filename, PATHINFO_EXTENSION);

pathinfo在檔案的處理上十分的好用, 其實不加入第二個參數它會回傳陣列, 至於回傳什麼值大家請用var_dump看就知道了

yoonow 發表在 痞客邦 留言(0) 人氣()

原文網址:http://blog.wabow.com/archives/1502
原文標題:jQuery FCKEditor + HTML Purifier
----------------------------------------------------------------------------------------------
原文轉載如下:

今天要介紹的是 wysiwyg + filter = wysiwyfter(?)

得知客戶需要一套 輕量型的 所見即所得(wysiwyg)編輯器. 要求是可以快速地載入編輯器, 進行 HTML 編輯, 但也需要嚴格防止駭客輸入不當的程式碼.

因此我們挑選了 jQuery FCKEditor (註1) 以及 HTML Purifier.

HTML Purifier 是用來濾掉可疑的 XSS 程式碼, 且內容仍符合 W3C 的標準 (Standards Compliant).

yoonow 發表在 痞客邦 留言(3) 人氣()

轉載:取得遠端文字資料~每日氣象製作
原文網址:http://blog.doremicat.com/?p=32

 

在一些情況,我們會試著抓取對方網站資料
或者是對方提供的文字檔,例如某網站的股票資料,氣象台資料~~等等

以下的範例是利用中央氣象局提供的txt檔來做範例
這是氣象局提供的各種氣象文字檔

ftp://ftpsv.cwb.gov.tw/pub/forecast/
在這裡我們使用這個W002.txt檔來做範例
ftp://ftpsv.cwb.gov.tw/pub/forecast/W002.txt

程式如下

yoonow 發表在 痞客邦 留言(0) 人氣()

最近使用PHP5發現一個include的路徑問題。

例如,a程式include引入子目錄下的b程式,而b程式又再include引入另一個子目錄下的c程式時。
依照以往習慣的寫法,只要以a程式所在位置去設定引入b程式及c程式的相對路徑,就不會有問題。

但是在PHP5卻會出現找不到檔案的情況,解決方法就是改成以 dirname(__FILE__) 取得相對路徑。

yoonow 發表在 痞客邦 留言(0) 人氣()

一、存入資料庫前,檢查字串最後一個字元,若為反斜線〝\〞則在字串最後加上一個空白字元" "。
        加在ModifyTo()
        if(substr($this->modified_str, -1, 1) == "\\"){
             $this->modified_str .= ' ';
       } 
        class ModifyErrBig5增加 function ModifyAddSpace()
         function ModifyAddSpace($str){
              $this->modified_str = $str;
              if(substr($this->modified_str, -1, 1) == "\\"){
                   $this->modified_str .= ' ';
             }
              return  $this->modified_str;
         }
二、查詢字串,加上stripslashes()去除魔術引號加上的反斜線〝\〞,例:stripslashes(trim($_POST['txtqry']))。

yoonow 發表在 痞客邦 留言(0) 人氣()

【資料來源:http://cgi.blog.roodo.com/trackback/2885267 

yoonow 發表在 痞客邦 留言(0) 人氣()

【資料來源 :http://www.real-blog.com/programming/416 】

PHPMailer 是一個功能豐富的函式庫,以下是用 PHPMailer 通過遠端 SMTP 認證發送郵件的例子:

yoonow 發表在 痞客邦 留言(0) 人氣()

【資料來源:http://www.fwolf.com/blog/post/155 】
【轉載原文如下】
授權方式:署名,非商業用途,保持一致,轉載時請務必以超鏈接(http://www.fwolf.com/blog/post/155)的形式標明文章原始出處和作者信息及本聲明。

phpmailer(現在的版本是1.73)是一個很好用的工具,可以很方便的使用php語言發送郵件,支持smtp及驗證,我們一直都用它。

但是,由於gmail的smtp採用了ssl連接:

Outgoing Mail (SMTP) Server - requires TLS: smtp.gmail.com (use authentication)
Use Authentication: Yes
Use STARTTLS: Yes (some clients call this SSL)
Port: 465 or 587

使用phpmailer就無法正常連接gmail的發信服務器了,並且這個問題一直沒有得到phpmailer的官方解決,不過在sf.net上面的討論裡倒是找到了一點資料,採用下面這種方法就可以連接gmail了。

yoonow 發表在 痞客邦 留言(0) 人氣()

【資料來源:http://www.wujianrong.com/archives/2006/10/php_html.html

總結有如下三種方法
1,下面使用模版的一個方法!
<?php
$fp = fopen ("templets.html","a");
if ($fp){
$fup = fread ($fp,filesize("templets.html"));
$fp2 = fopen ("html.shtml","w");
if ($fwrite ($fp2,$fup)){
$fclose ($fp);
$fcolse ($fp2);
die ("寫入模板成功");
} else {
fclose ($fp);
die ("寫入模板失敗!");
}
}
?>
簡單的將模板寫進一個文件中存為html.html

yoonow 發表在 痞客邦 留言(0) 人氣()

【資料來源:http://www.wujianrong.com/archives/2007/04/phppear.html

我 的Iceblog從2005年春天開始,做做停停,總算能夠顯示出來了,前台的很多功能還沒來得及做,不過後台基本上做好了。於是買了一個一百元/年的虛 擬主機,準備把程序放上去。PHP開發,一直以來我都是用PEAR+Smarty的,而且我的blog是UTF8編碼的,所以對雙字節文字的處理使用了 mbstring模塊。本來我以為把程序上載上去,數據做一下import,就萬事ok了,其實還是太大意了……

我本機的開發環境是apache2+php5+mysql; 虛擬主機是IIS6+php4+mysql; 貌似沒什麼,買空間之前我只確認了gd2模塊是否已經安裝了,因為我的blog程序的登錄部分用到了圖形驗證。忘記問mbstring的事情了,以為是默 認安裝的…… 其實也就是我能用上這個小日本發明的垃圾function,因為我在以前的項目中被日本人要求用過……  處理UTF8的中文還就必須用這個,否則字符串處理直接亂碼給你看。不過跟虛擬主機提供商交涉了一下,那個哥們比較好說話,按照我告訴他的在 php.ini裡頭把extension中的dll加載了。不過PEAR就完全沒有辦法,主機上安裝的PHP4不知道是什麼發佈版本,根本不帶PEAR, 我也不知道怎麼跟他說安裝的方法,因為的確比較麻煩,需要從pear.php.net下載之後copy到php安裝目錄,然後運行go- pear.bat,然後用pear -install DB的命令從Internet上安裝DB package,然後在php.ini中加上include_path='.;c:\php\pear'; 這才能算完。看來PEAR只能自己搞定了。

yoonow 發表在 痞客邦 留言(0) 人氣()

【資料來源:http://www.wujianrong.com/archives/2007/10/_php_html_wml_1.html

最近在做學校的 WAP 網站,其中通知公告、新聞等信息來源於原來的學校網站上的信息,因此就涉及到一個 HTML 轉化為 WML 的問題。儘管現在的 WAP 2.0 支持 XHTML 的內容顯示,但是 XHTML 語法要求比 HTML 嚴格,我們來源信息的 HTML 內容並不能保證符合 XHTML 的要求,而且 XHTML 相對於 WML 來說,內容的流量還是相對比較多一些的,另外僅支持 WAP 1.x 的手機設備也不支持 XHTML,因此為了支持更多的手機設備用戶能夠正常的瀏覽我們 WAP 網站,我們採用了 WML,而不是 XHTML。

對於新聞、通知、公告之類的信息,對手機設備用戶來說,最關心的是文字內容,因此我們的主要工作就是按照一定的格式(比如該換行分段的地方要換行分段)來從原來的 HTML 頁面裡提取出純文本信息,並將其轉化為 WML。下面的代碼演示了如何來實現這個步驟:(w3g8)

yoonow 發表在 痞客邦 留言(0) 人氣()

 轉載~~

-- PHP5新增功能說明,中譯本(一)
PHP5正式發佈
PHP5 新特性(總概)
PHP5 新函數
PHP5 對像體系
PHP5 的XML新特性

-- PHP5新增功能說明,中譯本(二)
PHP5 新特性(ZT)
SQLite in PHP

------------------------------------------------------------------------------

PHP5.0 新特性(ZT)
(一) Zend 2.0的誕生
現在的PHP4所使用的基本文法是被稱之為Zend 引擎的腳本編譯引擎。這個就是PHP4的優良機能的原因之一,是作為對PHP3的改進而生成的一種語言。大家一直認為,PHP4的性能根據當初的目標,比PHP3有了很大的提升,在網絡編程的世界裡佔據了很大的份額。

開發了Zend 引擎的Zend公司是在開發PHP4的同時,由PHP3的主要開發者Zeev Suraski和Andi Gutmans所創立的企業合併而來的。Zend的名稱是由Zeev和Andi的名字合起來組成的。Zend公司的商業模式是,持續不斷的為open source提供zend 引擎的PHP內核 (core),同時提升周邊產品開發和販賣的利益。以open source software作為基盤的商業,在世界範圍內大多數正在苦戰的企業中,算是比較好的典型例子了。

yoonow 發表在 痞客邦 留言(0) 人氣()

 轉載~~

-- PHP5新增功能說明,中譯本(一)
PHP5正式發佈
PHP5 新特性(總概)
PHP5 新函數
PHP5 對像體系
PHP5 的XML新特性

-- PHP5新增功能說明,中譯本(二)
PHP5 新特性(ZT)
SQLite in PHP

--------------------------------------------------------------------------------

期待已久的PHP5終於在當地時間7月13日正式發佈了。無論對於PHP語言本身還是PHP的用戶來講,PHP5發佈都算的上是一個里程碑式的版本。在PHP5發佈之前的各個PHP版本就以簡單的語法、豐富的庫函數以及極快的腳本解釋執行速度,贏得了許多開發者的青睞,幾乎成了*NIX平台上首選的WEB開發語言。然而,站在語言本身角度,PHP的語法,特別是OO方面的語法設計並不完善,當然這和PHP語言的作者一開始的設計目的有關。眾說周知,PHP最開始只是一個用Perl寫成的一個模板系統,其後的發展思路也是盡可能為快速開發WEB程序提供方便。大量的庫函數加入其中,而語言模型的發展則相對緩慢。雖然在PHP4中加入了面向對象的設計,但其語言模型並不完善,缺乏諸如構造函數、析構函數、抽像類(接口)、異常處理等基本元素。這極大限制了利用PHP來完成大規模應用程序的能力。

而PHP5的誕生,則從根本上改變了PHP的上述弊端。Zend II 引擎的採用,完備對像模型、改進的語法設計。終使得PHP成為一個設計完備、真正具有面向對像能力的腳本語言。我們預計,PHP5的出現,將會給整個PHP社區帶來新的一輪各種庫、應用開發改進的高峰。

yoonow 發表在 痞客邦 留言(0) 人氣()

1 2