if( $userId == 0 ) {
// Generate a login url
$url = $facebook->getLoginUrl( array( 'scope' => 'email, user_status' ) );
... Your Login button ...
} else {
// Get user's info
$userdata = $facebook->api( '/me' );
$data = array(
'first_name' => $userdata['first_name'],
'last_name' => $userdata['last_name'],
'username' => $userdata['username'],
'email' => $userdata['email'],
'languages' => $userdata['languages'],
'locale' => $userdata['locale'],
'timezone' => $userdata['timezone'],
'gender' => $userdata['gender'],
'location' => $userdata['location'],
'hometown' => $userdata['hometown'],
);
print_r( $data );
}
myAdBanner
2014年2月20日 星期四
facebook API 取得項目
2014年1月8日 星期三
獲取遠端圖片並把它保存到本地
<?php
// Function: 獲取遠端圖片並把它保存到本地
// $url 是遠端圖片的完整URL位址,不能為空。
// $filename 是可選變數: 如果為空,本地檔案名將基於時間和日期自動生成.
function GrabImage($url,$filename="") {
if($url==""){
return false;
}
if($filename=="") {
$ext=strrchr($url,".");
$temext = strrchr(strtolower($url),".");
if($temext!=".jpg"&$temext!=".jpeg"){
return false;
}
$filename=date("dMYHis").$ext;
$filepath=dirname(__FILE__)."/pictures/".$filename;
}
ob_start();
readfile($url);
$img = ob_get_contents();
ob_end_clean();
$size = strlen($img);
$fp2=fopen($filepath, "a");
fwrite($fp2,$img);
fclose($fp2);
return $filename;
}
?>
2014年1月7日 星期二
php使用gmail smtp 寄信
<?php
include("PHPMailer/class.phpmailer.php"); //匯入PHPMailer類別
$mail= new PHPMailer(); //建立新物件
$mail->IsSMTP(); //設定使用SMTP方式寄信
$mail->SMTPAuth = true; //設定SMTP需要驗證
$mail->SMTPSecure = "ssl"; // Gmail的SMTP主機需要使用SSL連線
$mail->Host = "smtp.gmail.com"; //Gamil的SMTP主機
$mail->Port = 465; //Gamil的SMTP主機的SMTP埠位為465埠。
$mail->CharSet = "big5"; //設定郵件編碼
$mail->Username = "*********"; //Gmail帳號
$mail->Password = "*********"; //Gmail密碼
$mail->From = "xxx@gmail.com"; //設定寄件者信箱
$mail->FromName = "xxx"; //設定寄件者姓名
$mail->Subject = "PHPMailer 測試信件"; //設定郵件標題
$mail->Body = "大家好,這是一封測試信件! "; //設定郵件內容
$mail->IsHTML(true); //設定郵件內容為HTML
$mail->AltBody = $altbody; //這個設定主要是預防收件者無法顯示HTML信件時的替代文字
$mail->WordWrap = 50; //設定一行最多為50個字元,即每50個字自動斷行
$mail->AddReplyTo("info@iii.org.tw", "Info"); //設定回函
$mail->AddBCC("zzz@iii.org.tw", "zzz"); //使用密件副本
$mail->AddAttachment("/var/tmp/file.tar.gz"); //新增附件檔案
$mail->AddAttachment("/tmp/image.jpg", "new.jpg"); //附件也可以更改名稱
$mail->AddAddress("xxxxx@gmail.com", "xxx"); //設定第一位收件者郵件及名稱
$mail->AddAddress("xxxxx@gmail.com", "xxx"); //設定第二位收件者郵件及名稱
if(!$mail->Send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
}
else {
echo "Message sent!";
}
?>
*注意事項
php.ini 中設定ssl 要開 否則會錯誤
設定方式
搜尋"php_openssl.dll",然後將前方的";"拿掉,若搜尋不到就自己把"extension=php_openssl.dll"這一句加上去,然後存檔重開web server
抓取RSS分析
抓取網頁函數
private string GetWebresourceFile(string url)
{
WebRequest request = WebRequest.Create(url);
request.Timeout = 10000;
WebResponse response = request.GetResponse();
Stream resStream = response.GetResponseStream();
StreamReader sr = new StreamReader(resStream, System.Text.Encoding.UTF8);
string SourceCode = sr.ReadToEnd();
resStream.Close();
sr.Close();
return SourceCode;
}
2013年12月25日 星期三
file download
<?php
function dl_file($file){
//First, see if the file exists
if (!is_file($file)) { die("404 File not found!"); }
//Gather relevent info about file
$len = filesize($file);
$filename = basename($file);
$file_extension = strtolower(substr(strrchr($filename,"."),1));
//This will set the Content-Type to the appropriate setting for the file
switch( $file_extension ) {
case "pdf": $ctype="application/pdf"; break;
case "exe": $ctype="application/octet-stream"; break;
case "zip": $ctype="application/zip"; break;
case "doc": $ctype="application/msword"; break;
case "xls": $ctype="application/vnd.ms-excel"; break;
case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
case "gif": $ctype="image/gif"; break;
case "png": $ctype="image/png"; break;
case "jpeg":
case "jpg": $ctype="image/jpg"; break;
case "mp3": $ctype="audio/mpeg"; break;
case "wav": $ctype="audio/x-wav"; break;
case "mpeg":
case "mpg":
case "mpe": $ctype="video/mpeg"; break;
case "mov": $ctype="video/quicktime"; break;
case "avi": $ctype="video/x-msvideo"; break;
//The following are for extensions that shouldn't be downloaded (sensitive stuff, like php files)
case "php":
case "htm":
case "html":
case "txt": die("Cannot be used for ". $file_extension ." files!"); break;
default: $ctype="application/force-download";
}
//Begin writing headers
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Description: File Transfer");
//Use the switch-generated Content-Type
header("Content-Type: $ctype");
//Force the download
$header="Content-Disposition: attachment; filename=".$filename.";";
header($header );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".$len);
@readfile($file);
exit;
}
?>
2013年11月20日 星期三
Removes CDDATA tags from a string
<?
/***********************************************************************
strip_cdata_tags($string)
-------------------------------------------------------------
DESCRIPTION:
Removes CDDATA tags from a string
INPUT:
$string
Text containing CDDATA tags
RETURNS:
Returns a string free of CDDATA tags
***********************************************************************/
function strip_cdata_tags($string)
{
# Strip XML CDATA characters from all array elements
$string = str_replace("", "", $string);
return $string;
}
?>
2013年11月7日 星期四
獲得當前網頁中的所有鏈結
當在一個文本框中輸入網址單擊按鈕後,把當前這個網頁的所有鏈結保存到文本框中顯示出來!
private void btnScrape_Click(object sender, EventArgs e)
{
string strHttpSource;
if (UrlIsValid())
{
// 取得一個包含網頁的程式源代碼的字串。請進一步查看 GetHttpStream()
// 與 ConvertStreamToString() 這兩個自訂函式。
try
{
strHttpSource = ConvertStreamToString(GetHttpStream(txtURL.Text));
}
catch (Exception exp)
{
// 將文字設定成 exp.Message 以便顯示於被調用的函數中所設定的自定義錯誤資訊。
MessageBox.Show(exp.Message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
return;
}
string strRegExPattern;
// 將用戶所輸入的網址(URL)賦給一個變數。
strUrlEntered = txtURL.Text.Trim();
// 取得功能變數名稱以便於不同的地方使用之。最好是在 Click 事件處理函數中
// 設定此值,如此一來,顯示於 ListView 控制項當中的專案會固定與正確
// 的網功能變數名稱稱相關聯。如果此值是在其他地方賦值,用戶將能夠更改域
// 名並且接著在 ListView 當中雙擊某個專案,此舉將會導致該項目
// 所提取者是一個無效的 URL。
string[] astrDomain = Regex.Split(strUrlEntered, "/");
// 陣列中的第一個元素[0] 是 "http:" ,第三個元素則是實際的功能變數名稱。
strDomain = astrDomain[0] + "//" + astrDomain[2];
if (optLinks.Checked)
{
ShowStatusIndicators("正在鏈結到網頁以便擷取出鏈結,請稍待。");
lvwLinks.Items.Clear();
// 此處所使用的規則運算式用來剖析一個 HTML anchor
// (例如: Microsoft ),
// 說明如下:
//
// ]+ 任何字元的一或多個比對,除了位於中刮號中者以外。
// ) 定義一個子字串之群組的結尾處。
// ""? 零或多個引號(逸出)。
// > 于 HTML anchor 中緊接著完全相同的文字。
// (.+) 比對任何字元的一個群組:也就是 anchor 文字。
// 與 HTML anchor 之結尾標記完全相同的文字。
//
// 請注意:如果您要在 RegEx 測試器中試驗這些規則
// 運算式模式,請確定您沒有逸出雙引號。
strRegExPattern = @"]+)""?>(.+)";
}
else
{
ShowStatusIndicators("正在鏈結到網頁以便擷取出圖像,請稍待。");
htImages = new Hashtable();
lvwImages.Items.Clear();
// 此處用來取出圖片標記的規則運算式,在觀念上與用來取出 HTML anchor
// 的規則運算式非常類似。然而,此處的規則運算式卻是複雜許多,
// 原因是我們必須擷取出可能會依任何順序出現的四個不同屬性。
//
// 為了讓此處所使用的規則運算式在長度與複雜度上都保有其合理性,
// 我們對所要處理之網頁上的 HTML
標記做了下列假設:
//
// 1. 用來指定圖片來源的 src 屬性一定會出現。它是唯一的必要屬性。
//
// 2. src 屬性會出現在 width 與 height 屬性之前。如果並非如此的話,
// width 與 height 屬性將不會被擷取。
//
// 3. 用來指定圖片替代文字的 alt 屬性會出現在 width 與 height 屬性之後。
// 如果並非如此的話,alt 屬性將不會被擷取。
//
// 4. width 與 height 屬性可能會在 src 屬性之後以任何順序出現,
// 本規則運算式能夠處理此狀況。
//
// 上述假設可以確保網頁上的所有圖片標記都會被擷取。然而,它也意味著,
// 其他某些屬性可能不會出現。
//
// 以下是使用於本規則運算式中的幾個重要模式專案:
//
// [^>]+ 與 > 以外的任何字元比對。此顯示出您可以移至下一個您所感興趣的屬性。
//
// (?: 從一個非擷取的群組開始。它會與一個結束 )? 合用, 以便建立
// 出一個選擇性群組(零或一個比對)。此顯示出您可以讓 src
// 以外的所有屬性成為可選擇性的。
//
// | 與 width 和 height 使用來成為一個 Or 運算式。
// 請注意在第一個配對中,width 在前而 height 在後,而在第二個
// 配對中,則是 height 在前而 width 在後。
strRegExPattern = @"
]+(src)\s*=\s*""?([^ "">]+)""?(?:[^>]+(width|height)\s*=\s*""?([^ "">]+)""?\s+(height|width)\s*=\s*""?([^ "">]+)""?)?(?:[^>]+(alt)\s*=\s*""?([^"">]+)""?)?";
}
Regex re = new Regex(strRegExPattern, RegexOptions.IgnoreCase);
Match m = re.Match(strHttpSource);
// 處理 HTML 程式源代碼。因為源是一個長字串,
// 因此我們不使用 Matches 方法,而改用較有效率的 Match(),Match()
// 一次只會傳回一個比對。Success 屬性能夠判斷是否存在另外一個比對。
// NextMatch() 則能夠反復此項作業。
while (m.Success)
{
if (optImages.Checked)
{
string strWidth, strHeight;
// 因為規則運算式模式賦予 width 與 height 屬性選擇性的順序,
// 因此必須先確認哪一個屬性是擺在前面,然後指派合適的 Group 專案值。
if (m.Groups[3].Value.ToLower() == "width")
{
strWidth = m.Groups[4].Value;
strHeight = m.Groups[6].Value;
}
else // height 屬性先出現
{
strWidth = m.Groups[6].Value;
strHeight = m.Groups[4].Value;
}
// 調用 AddImage 以便將自定義的 ImageAttributes 物件新增
// 至 Hashtable 中。請參閱 AddImages 的注釋來瞭解為什麼
// 要使用一個 Hashtable。
AddImage(new ImageAttributes(m.Groups[2].Value,
m.Groups[8].Value, strHeight, strWidth));
}
else
{
// 建立一個 ListViewItem 物件並設定第一欄("src")的文字。
ListViewItem lvi = new ListViewItem();
lvi.Text = m.Groups[1].Value;
lvwLinks.Items.Add(lvi);
}
// 繼續迴圈至下一個比對。
m = m.NextMatch();
}
HideStatusIndicators();
// 將所擷取的每一個影像資訊填入清單檢視控制項中。
if (optImages.Checked)
{
if (htImages != null)
{
FillImagesListView();
}
else
{
MessageBox.Show("沒有任何圖像的屬性與正則運算式相符。", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
else
{
if (lvwLinks.Items.Count == 0)
{
MessageBox.Show("沒有任何鏈結的 URL 與正則運算式相符。", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}
}
// 此函式會檢查使用者所輸入的網址是否以 http:// 開頭。
private bool UrlIsValid()
{
if (txtURL.Text.Substring(0, 7) != "http://")
{
MessageBox.Show("您所輸入的網址必須以 http:// 開頭。");
return false;
}
return true;
}
// 此函式會讀取 HttpWebResponse 物件所傳回的 HTTP 響應資料流程並將它轉換成一個字串以便交給 RegEx 處理之。
private string ConvertStreamToString(Stream stmSource)
{
if (stmSource != null)
{
try
{
using (StreamReader sr = new StreamReader(stmSource))
{
// 讀取資料流程並傳回其整個內容。
return sr.ReadToEnd();
}
}
catch (Exception)
{
// 不要顯示一個訊息方塊。只需轉寄來自 GetHttpStream() 的自訂錯誤訊息。
throw new Exception();
}
finally
{
// 清除 Stream 與 StreamReader。
wresScrape.Close();
}
}
else
{
return "";
}
}
// 此函式使用衍生自 System.Net.WebRequest 的 .NET 類別來取得一個 HTTP 響應資料流程,
// 此 HTTP 回應資料流會成為 RegEx 的剖析來源或是所要顯示的影像(當
// 被 ImageViewer.Show() 呼叫時)。
public Stream GetHttpStream(string url)
{
// 使用 WebRequestFactory 建立要求。
wreqScrape = (HttpWebRequest)(WebRequest.Create(url));
wreqScrape.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0b; Windows NT 5.1)";
wreqScrape.Method = "GET";
wreqScrape.Timeout = 10000;
try
{
// 傳迴響應資料流程。
wresScrape = (HttpWebResponse)(wreqScrape.GetResponse());
return wresScrape.GetResponseStream();
}
catch (Exception)
{
// 最可能導致發生錯誤的原因是輸入了錯誤的 URL 或是並未連結至 Internet。
// 建立一個自訂的錯誤訊息來轉回給呼叫者函式。
throw new Exception("在提取您所要求的網頁時發生錯誤。" +
"請檢查您所輸入的 URL 以及 Internet 聯機,並再次嘗試。");
}
}
訂閱:
文章 (Atom)