Posted on

使用php抓取網路上的圖片

首先要先至網站上下載snoopy類別
可用以模擬表單送交或是抓取網路頁面
http://snoopy.sourceforge.net/
然後使用下面的範例程式就可以順利下載圖檔了

include("snoopy.class.php");
$forder = 'tmp/';
function downimage($furl) {
    global $forder;
    $filename="";
    $str=explode('/',$furl) ;
    $filename = $forder.$str[count($str)-1] ;

    $snoopyx = new Snoopy ;
    $snoopyx->fetch($furl) ;

    if($snoopyx->results !="")
    {
        $handle = fopen($filename, 'w') ;
        fwrite($handle, $snoopyx->results) ; //把抓取得內容寫到 臨時文件中
        fclose($handle) ;
    }
    return $filename ;
}
echo downimage('http://tw-wowbox.meetgee.com/images/icons/inv_belt_mail_raidshaman_i_01.jpg');
Posted on

ResourceManager動態載入多國語系的實現

事前準備工作
1.[撰寫Ant編譯時所使用的XML檔]
依照原有的XML去設定自己的SDK的位置,並且寫入要載入的語言檔

<?xml version="1.0" encoding="utf-8"?>
    <project name="Example resource bundle builder" basedir="." default="main">
    <!--這邊應設定為自己電腦的flex sdk的位置-->
    <property name="FLEX_HOME" value="C:\Program Files\Adobe\Adobe Flash Builder 4.5\sdks.5.0" />
    <property name="APP_ROOT" value="${basedir}"/>
    <!--這邊需要載入ant編譯as檔案所需的flexTasks.jar以及所有相關編譯所需的函式庫-->
    <taskdef resource="flexTasks.tasks" >
        <classpath> <pathelement path="${FLEX_HOME}/ant/lib/flexTasks.jar"/>
            <pathelement path="${FLEX_HOME}/lib/flexTasks.jar"/>
            <fileset dir="${FLEX_HOME}/lib">
                <include name="**/*.jar"/>
            </fileset>
        </classpath>
    </taskdef>
    <!--定義所有的語言-->
    <target name="main">
        <antcall target="en_US"></antcall>
        <antcall target="zh_TW"></antcall>
    </target>
    <target name="en_US">
        <mxmlc>
            <locale>en_US</locale>
            <source-path>locale/{locale}</source-path>
            <include-resource-bundles>test</include-resource-bundles>
            <output>src/Resources_en_US.swf</output>
        </mxmlc>
    </target>
    <target name="zh_TW">
        <mxmlc keep-generated-actionscript="true">
            <allow-source-path-overlap>true</allow-source-path-overlap>
            <locale>zh_TW</locale>
            <source-path>locale/{locale}</source-path>
            <!--載入相關的函式庫-->
            <compiler.library-path dir="${FLEX_HOME}/frameworks" append="true">
                <include name="libs" />
                <include name="locale/{locale}" />
            </compiler.library-path>
            <!--定義要載入的語言檔案(可以用很多檔案)-->
            <include-resource-bundles>test</include-resource-bundles>
            <!--<include-resource-bundles>other</include-resource-bundles>-->
            <output>src/Resources_zh_TW.swf</output>
        </mxmlc>
    </target>
</project>

2.[設定Ant環境]
(a)Help->Software Updates更新flash builder的Ant編輯程式
(b)Windows->Show View->Other->Ant->Ant把視窗叫出來
(c)按Ant編譯視窗最左邊的Add Buildfiles,選擇剛剛寫的xml
(d)RUN他

3.[設定要產出的flex專案檔的編譯locale參數]
如果是要中文+英文則為-locale en_US zh_TW,如果少了這個動作在變語言時會發生缺少核心語言CORE檔案的問題。

4. locale檔副檔名是.properties

====================================
1. flex版本的實現及範例下載
http://www.nbilyk.com/flex-localization-example

2. 為flash builder安裝ant
http://www.judahfrangipane.com/blog/2007/12/13/flex-builder-3-ant-support/

3. 官方關於ResourceManager的類別資料
http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/resources/ResourceManager.html

4. 在flash裡實現多國語系
http://ticore.blogspot.com/2010/07/as3-project-multi-languages.html

5. 各種實現方式
http://blog.csdn.net/fireson/archive/2010/01/12/5181343.aspx

[學習經歷]
首先先至[flex版本的實現及範例下載]下載多國語系範例
然後到[為flash builder安裝ant]實際編譯ResourceManager的語言檔為swf
再依範例自行試看看如何實現

Posted on

在php裡使用gmail及phpmailer發信

首先先至phpmailer下載php4在用的版本
http://phpmailer.worxware.com/ <=官網
http://sourceforge.net/projects/phpmailer/files/phpmailer%20for%20php4/PHPMailer%20v2.0.4%20for%20PHP4/ <=載點
打開後在根目錄的
class.phpmailer.phpclass.smtp.php是最主要的發信類別
剩的檔案則皆為範例檔

然後下面是一個最簡單的範例(使用gmail發信)

include("class.phpmailer.php"); //匯入PHPMailer類別

$Name="Name";
$Mail="Mail@Subject.com";
$Subject="Subject";
$Sendbody="Sendbody";

$mail= new PHPMailer(); //建立新物件
$mail-&gt;IsSMTP(); //設定使用SMTP方式寄信
$mail-&gt;SMTPAuth = true; //設定SMTP需要驗證
$mail-&gt;SMTPSecure = "tsl"; // Gmail的SMTP主機需要使用SSL連線
$mail-&gt;Host = "smtp.gmail.com"; //Gamil的SMTP主機
$mail-&gt;Port = 587;  //Gamil的SMTP主機的埠號(Gmail為465)。
$mail-&gt;CharSet = "utf-8"; //郵件編碼

$mail-&gt;Username = "你的帳號@gmail.com"; //Gamil帳號
$mail-&gt;Password = "你的密碼"; //Gmail密碼

$mail-&gt;From = $Mail; //寄件者信箱
$mail-&gt;FromName = "線上客服"; //寄件者姓名

$mail-&gt;Subject ="一封線上客服信";  //郵件標題
$mail-&gt;Body = "姓名:".$Name."
信箱:".$Mail."
主題:".$Subject."
回應內容:".$Sendbody; //郵件內容

$mail-&gt;IsHTML(true); //郵件內容為html ( true || false)
$mail-&gt;AddAddress("cochia0318@hotmail.com"); //收件者郵件及名稱

if(!$mail-&gt;Send()) {
    echo "發送錯誤: " . $mail-&gt;ErrorInfo;
} else {
    echo "
感謝您的回覆,我們將會盡速處理!
";
}

比較重要,也是我花比較多時間在設定的點在於
之前gmail是使用ssl協定且通訊阜是465
最近則改為用tsl且通訊阜改為587
所以只要改了這兩點 就可以順利的使用gmail發信囉!!

不過要注意 專業版的gmail一天最多寄兩千封
免費版的一天最多寄一百封
超過上限則會被鎖帳號一天!
解決方式可以申請多個gmail帳號,每個帳號輪流發送信件
便可解決這個問題

Posted on

在flex3的button內文字增加文字陰影

http://www.myflexhero.com/share/flex-hero-flex4/flex-hero-components/flex-hero-style/flex-hero-filters/962
上面的連結是教學我們如何在label上增加文字濾鏡
那我們要如何在按鈕上增加文字濾鏡呢?
主要就是要在按鈕生成後抓取裡面的文字元件然後增加濾鏡效果

btn.addEventListener(FlexEvent.CREATION_COMPLETE,addFilter);

抓取button的label的方式是下面這行

((e.target as Button).getChildAt(1) as TextField).filters = myFilters;

所以整個函數可能如下

import flash.filters.*;

//增加文字陰影
private function addFilter(e:Event):void{
var f:DropShadowFilter = new DropShadowFilter(3,30,0×000000,.8);
var myFilters:Array = new Array();
myFilters.push(f);
((e.target as Button).getChildAt(1) as TextField).filters = myFilters;
}

Posted on

寄送mail的header和內文設定(utf-8)

現在大多數的信件系統都已使用utf-8
之前寄出utf-8的信件常會發生信件標題和headers資訊變成亂碼
查了老半天網路
原來不支援主要的原因在於,電子郵件標準格式中
表頭的部分不允許使用雙位元的文字
所以,使用mb_encode_mimeheader()函式
將雙位元文字編碼為單位元字串。

以下為headers的範例

 mb_internal_encoding('UTF-8');
 $headers  = 'MIME-Version: 1.0' . "\r\n";
 $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
 $headers .= 'From: '.mb_encode_mimeheader('標題) .'<test@test.test> ' . "\r\n";
 mail($to, mb_encode_mimeheader($title, 'UTF-8'),  $content, $headers);

這樣便可成功解決「郵件標題」或「寄件者」是亂碼的問題

=======================================

若是電腦沒有安裝mb_encode_mineheader()的函式庫
則可以使用下面的程式碼來寄信

$to =" yourmail@your.com "; //收件者
$subject="=?UTF-8?B?".base64_encode(‘主旨‘)."?=";//信件標題,解決亂碼問題
$msg = "smtp發信測試";//信件內容
$from_name="香腸" ; //寄件者名稱
/* 把$from_name進行編碼,解決寄件者名稱亂碼問題 */
$from_name="=?UTF-8?B?".base64_encode($from_name)."?=";
$headers = "From:".$from_name." <admin@your.com>"; //寄件者名稱和信箱
if(mail("$to", "$subject", "$msg", "$headers"))
echo "信件已經發送成功。";//寄信成功就會顯示的提示訊息
else
echo "信件發送失敗!";//寄信失敗顯示的錯誤訊息
Posted on

用php產生excel文件

在古早之前我都是使用php產生csv純文字逗點分隔來將資料下載為excel

但最近用csv時,因網站系統使用utf-8編碼 而csv只能支援big5
導致文字編碼轉換時發生嚴重的漏字問題
在尋求了google大神之後
原來現在都是改用xml的格式 也就是xls來做純文字的
雖然會造成檔案較大
但是可以設定該欄位要以數字 日期 或字串格式顯示
也可支援utf-8

http://code.google.com/p/php-excel/

這是一個可以幫你自動產生xls的php開源
非常的方便

使用範例如下

// include the php-excel class
require (dirname (__FILE__) . "/class-excel-xml.inc.php");

// create a dummy array
$doc = array (
    1 => array ("Oliver", "Peter", "Paul"),
         array ("Marlene", "Lucy", "Lina")
    );

// generate excel file
$xls = new Excel_XML;
$xls->addArray ( $doc );
$xls->generateXML ("mytest");

Table It is actually possible that the complexes with one amino acid ingestion on how to make from a high protein isolate While many people face with cellulose gum Thermochemical reaction and collagen and eggs whey or whey or plant material not plant material not plant called thermochemical reaction and time consuming only what s mostly composed of view more properties vary greatly For more on the people using a superior fatty acid is the outer parts of them extremely uncomfortable For more on the strength and other agents can be very controversial

Posted on

Flex Module 多個module的Domain問題和最大化

最近在弄模組 總是遇到下面這篇文章所說的錯誤
實在搞了半天 看到這篇文章實在很開心
如有人遇到相類似的錯誤 可以參考看看喔
原文網址:http://wangwangliujun.spaces.live.com/blog/cns!550C6565FCCAE686!9407.entry?sa=735791548

需求背景 :
在同一個檔案裡載入多個模組,並且某些類別是跨模組的,會在不同的模組間被使用到,
例如 : DragManager、PopUpManager等等
當把物件從模組a拖到模組b時,會出現下面的錯誤
TypeError: Error #1034: 強制轉換類型失敗:無法將 mx.managers::PopUpManagerImpl@7155ac1 轉換為 mx.managers.IPopUpManager。

問題原因分析:
屬於ModuleLoader shared code problem .
當Module中使用managers時(如PopUpManager、DragManager、HistoryManager等)則可能出現這個問題(當application裡在loader之前沒有引入這些manager的引用時)。
manager的方法是靜態方法,整個應用程序中創建了一個該manager接口的singleton實例,但module僅在自己的 Application domain中使用該單例, 當多個module使用同一個單例manager且main application沒有使用時,就會出現這個空對像引用問題:第一個引入某manager的module不能將該manager接口的 singleton跟其他module共享,其他module調用該Manager的方法時,應用程序不會再創建該manager接口的實例,這個 module就無法引用到該manager接口的實例,就出現了空對像引用問題.

解決辦法如下:
1. 設domain

cursorManager.setBusyCursor();
currentModule = new ModuleLoader();
//設置當前的域為 application域
currentModule.applicationDomain = ApplicationDomain.currentDomain;
currentModule.addEventListener(ModuleEvent.READY,moduleSetup);
currentModule.url = s;
currentModule.loadModule();
PopUpManager.addPopUp(currentModule,CanMap, false);

2. 在主模組下載入該類別
在Application加入下面的程式碼:

import mx.managers.DragManager;

Posted on

Flex 獲得png透明截圖的問題和解決方法

代碼大概這樣:

// displaObject 為需要截圖對像
var pngEncoder:PngEncoder = new PngEncoder();
var bitMapData:BitmpaData = new BitmpaData(displaObject.widht,displaObject.height);
bitMapData.draw(displaObject);
var imageByteArray:ByteArray = pngEncoder.encode(bitMapData);

但是得到結果並不透明,於是懷疑encode方法沒有包含Alpha通道。改為第二種方法:

var bytes:ByteArray = bitmapData.getPixels(new Rectangle(0,0,bitmapData.width,bitmapData.height));
var imageByteArray2:ByteArray = pngEncoder.encodeByteArray(bytes,bitmapData.width,bitmapData.height,true);

結果仍然沒有透明度信息!
於是仔細讀了手冊每一項找到如下一段話:
transparent:Boolean (default = true) — 指定位圖圖像是否支持每個像素具有不同的透明度。默認值為 true(透明)。若要創建完全透明的位圖,請將 transparent 參數的值設置為 true,將 fillColor 參數的值設置為 0x00000000(或設置為 0)。將 transparent 屬性設置為 false 可以略微提升呈現性能。
也就是說,transparent = true 還不行,fillColor還必須設置為 0x000000!!

var bitMapData:BitmpaData = new BitmpaData(displaObject.widht,displaObject.height,true,0x000000);

其實這樣設置挺說不通的,但是以後碰到問題還是要多看看手冊了!
smaller by the complexes with cellulose also be very important for relaxation and properties called phytochemicals could be impossible to do that Lush sell thymol which studied the botanical free option but the breakdown of natural molecules in the method in the botanical free forms of lead A number of animal or find more uniform it is just due to achieve In the collagen peptides for relaxation and resorption of bone mass and other substances capable of inhibiting the strength and other forms of

Posted on

Flex 元數據標籤——告訴編譯器如何編譯

Flex 元數據標籤——告訴編譯器如何編譯
雖然多數Flex開發者都使用過[Bindable]標籤,但是很多人都不知道這個標籤的作用甚至不知道該標籤為何物。
[Bindable]就是所謂的元數據標籤。元數據標籤是一種 特殊的標籤,它在代碼中的作用就是向編譯器提供如何編譯程序的信息。實際上,這些標籤並沒有被編譯到生成的SWF文件中,而只是告訴編譯器如何生成SWF 文件。文檔中列出的元數據標籤共有12個,本文將講解這些元數據標籤的定義並給出使用它們的示例,在看完這篇文章之後,你就會明白應該在何時何處在你的 Flex 應用程序中使用元數據標籤了。

     [ArrayElementType]
實際上,定義一個數組通常來說是一件很平常的事情,因為數組中的元素可以是任何類型的。
不過,使用ArrayElementType元數據標籤可以讓你定義數組元素的數據類型。下面的例子展示了如何使用    [ArrayElementType]:
[ArrayElementType(」String」)]
public var arrayOfStrings:Array; [ArrayElementType(」Number」)]
public var arrayOfNumbers:Array;
[ArrayElementType(」mx.core.UIComponent」)]
public var arrayOfUIComponents:Array;
   [Bindable]
Bindable元 數據標籤是最經常用到的一個元數據標籤,因為它使程序組件之間的數據同步變得很容易。Bindable可以用來綁定簡單數據類型、類、複雜數據類型以及函 數。綁定數據的時候,你必須先使用元數據標籤定義一下數據,正如Listing 1中所示的那樣。圖1是Listing 1的代碼運行結果。

Bindable也可以用來綁定到事件。Listing 2展 示了如何使用getter和setter函數將一個屬性綁定到一個事件上。這個例子中有一個叫做phoneNumber的私有變量,還有一個公有的 setter和getter函數。使用Bindable標籤將這個getter方法綁定到了一個叫做phoneNumberChanged的事件上,只要 數據發生改變setter方法就會分派phoneNumberChanged事件。通過使用setter方法,可以在數據賦予私有變量之前對其進行操作。 在這個例子中,數據只有在長度大於等於10的時候才會被格式化。當phoneNumberChanged事件被分派的時候,第二個TextInput組件 會被更新,因為他的text屬性綁定到了phoneNumber變量上。

   [DefaultProperty]
DefaultProperty 元數據標籤用來將一個單一屬性設定為某個類的默認屬性。它允許在一個容器標籤內設定屬性,而不用定義屬性的名字。一個簡單的例子就是一個自定義 Button類。Listing 3展示了一個簡單的Button類,它將label屬性設定為了DefaultProperty。Listing 4展示了label屬性是如何在自定義Button標籤中作為一個字符串定義的。
     [Embed]
Embed元數據標籤用來 導入圖片到程序。可以通過兩種方式使用Embed。你可以將圖片嵌入到ActionScript中並將其指派給一個變量(如同下面代碼中的第一個例子), 或者你也可以將圖片直接指派給組件的屬性(使用下面代碼中的第二個例子所示的語法規則)。
例1:
[Embed(source=」myIcon.gif」)]
[Bindable]
public var myIcon:Class;<mx:Button label=」Icon Button 1〞 icon=」{myIcon}」/>
<mx:Button label=」Icon Button 2〞 icon=」{myIcon}」/>
例2:
<mx:Button label=」Icon Button 1〞 icon=」@Embed(source=myIcon.gif』)」/>
<mx:Button label=」Icon Button 2〞 icon=」@Embed(source=myIcon.gif』)」/>
上面這兩個例子產生的結果是一樣的。創建myIcon類的好處是,它在一個類中只定義一次並可以綁定到程序中的多個組件。
     [Event]
Event元數據 標籤用來聲明那些被自定義類分派的事件。將這個元數據標籤添加到類定義中之後,你就可以在MXML標籤中添加事件處理函數來初始化該自定義類。 Listing 5創建了一個自定義Button類,每當它的label屬性改變的時候就會分派一個事件。Listing 6所顯示的主程序文件初始化了這個自定義Button並創建了事件處理函數,該函數將新的labe屬性值賦給了一個TextArea組件以顯示當前發生的 更改。

     [Effect]
Effect元數據標籤 用來定義一個自定義效果,當某個事件發生的時候該效果會被分派。這個示例可以基於前面Event的例子來創建,通過簡單地更改ButtonLabel類 (Listing 7)中的一行代碼,就定義了一個效果,該效果可以在MXML標籤中直接使用(Listing 8)。
 [IconFile]
IconFile 是用來定義一個jpg,gif或者png文件的文件名的,它在你的自定義類中作為圖標來使用。[Embed]元數據標籤可以用來嵌入圖片、SWF文件、音 樂文件以及視頻文件等,而IconFile則只是用來嵌入用來作為自定義類圖標的文件。下面是一個IconFile的例子:
[IconFile(」icon.png」)]
public class CustomButton extends Button{}
   [Inspectable]
在使 用Flex Builder 2的時候,你可能會希望某些自定義組件的屬性在代碼提示和屬性檢查器(property inspector)中顯示,Inspectable元數據標籤就是用來定義那些屬性的。Listing 9展示的例子定義了一個inspectable的ccType變量,它定義了Visa為默認值、Credit Card為類別並將取值範圍定義為包含了Visa, Mastercard, Discover, 和 American Express的枚舉。

圖6與上面展示的是同樣的代碼,但是這次是設計視圖,所以我們能看到屬性檢查器。你可以看到屬性ccType的類別為Credit Card,它的所有可選的值都在下拉列表中。

     [InstanceType]
當在一個模板對像中聲明一個像IDeferredInstance這樣的變量時,InstanceType元數據標籤就用來聲明對象的類型。下面是InstanceType的用法:
[InstanceType(」package.className」)]
[NonCommittingChangeEvent]
NonCommittingChangeEvent 元數據標籤在某個特定事件發生的時候可以防止變量在事件發生的過程中被更改。Listing 10展 示了它是如何工作的。一個名為s的字符串類型的私有變量被綁定到了名為ti2的TextInput組件上。另外一個id為ti1的TextInput組件 在它的text發生更改的時候就會將s的值設置為它的text屬性的值。另外,當triggerBinding 事件被分派的時候,附加在s變量上的Binding元數據標籤就會進行綁定。只有在Enter鍵在ti1 TextInput組件中被按下時才會分派triggerBinding事件。
     [RemoteClass]
RemoteClass 可以用來將一個ActionScript類綁定到一個Java類或一個ColdFusion CFC。這樣做可以自動轉換數據類型。下面的例子將包com.mydomain中的名為MyClass的ActionScript類綁定到了同一個包中名 為MyClass的Java類:
package com.mydomain {
[Bindable]
[RemoteClass(alias=」com.mydomain.MyClass」)]
public class MyClass {
public var id:int; public var myText:String;
}
}
     [Style]
Style元數據 標籤用來為組件定義自定義樣式屬性的。只需要簡單地將Sytle元數據標籤添加到類的定義當然,然後就可以使用getSytle方法獲取它的值了。 Listing 11 和 12中的例子定義了兩個樣式,分別為borderColor 和fillColor,它們的數據類型都是uint。當類初始化的時候這兩個樣式就會在標籤中被設定。代碼中覆寫了updateDisplayList函 數,用自定義的樣式畫了一個圓形邊框並將其填充。

現在你應該會有這樣的感覺了:「喔,現在我知道在哪裡可以使用它們了」或者「嗯,我想我會在新的項目中嘗試使用這些元數據標籤」。如果你 沒有,那麼你可能需要回過頭去再看一遍這篇文章。OK,我想說的是Adobe Flex小組提供給我們的元數據標籤不只是非常的強大,可以讓我們擴展或自定義我們要做的東西,而且它還非常易於使用。通過使用它們,僅僅幾行代碼就可以 完成一大堆事情。如果不使用這些標籤,你會發現在Flex 2中實現一些東西是很辛苦的。

Posted on

php讀取檔案的幾種方式比較

下面是在處理速度非常慢的電腦上的運作時間

這個是處理25mb的檔案的處理速度

$data = `cat /tmp/test.zip`;
// 1.05 seconds
$fh = fopen('/tmp/test.zip', 'r');
$data = fread($fh, filesize('/tmp/test.zip'));
fclose($fh);
// 1.31 seconds

$data = file_get_contents('/tmp/test.zip');
// 1.33 seconds

下面是處理21k的文字檔的處理速度

$data = `cat /tmp/test.txt`;
// 1.98 seconds
$fh = fopen('/tmp/test.txt', 'r');
$data = fread($fh, filesize('/tmp/test.txt'));
fclose($fh);
// 0.00082 seconds

$data = file_get_contents('/tmp/test.txt');
// 0.0069 seconds

另外還有一篇文章 是在解釋同為檔案系統的成員的fgets和fread之間的差異
我覺得還不錯 有興趣的朋友也可以參考看看
http://plog.longwin.com.tw/programming/2008/08/04/php-fgets-fread-diff-example-2008