目前所在的文章分類 ◊ PHP程式範例 ◊

作者: 丫忠
• 星期五, 六月 11th, 2010

一般的Web網站的都是針對PC來設計,如果要設計行動裝置(Mobile device)的頁面,通常web 程式必須要先判斷Client端是否為行動裝置,丫忠認為此需求增加的幅度應該會蠻大的,因為現在智慧型手機、行動裝置越來越普通了,上網的習慣不再只是坐在電腦面前,而是隨時隨地都可以立即上網的時代來臨了…(扯遠了)。

因為丫忠有這個需求,於是爬了一下文章,有一個PHP的程式還不錯,將程式碼貼下來給有需要的人,此程式不複雜,只是要把這裝行動裝置的特性都抓出來,還真是件麻煩的事,而且連iPad裝置都有了,真是要感謝整理這段程式的人囉,省了很多時間!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
function mobile_device_detect($iphone=true,$ipad=true,$android=true,$opera=true,$blackberry=true,$palm=true,$windows=true,$mobileredirect=false,$desktopredirect=false){
 
  $mobile_browser   = false;
  $user_agent       = $_SERVER['HTTP_USER_AGENT'];
  $accept           = $_SERVER['HTTP_ACCEPT'];
 
  switch(true){
 
    case (preg_match('/ipad/i',$user_agent));
      $mobile_browser = $ipad;
      $status = 'Apple iPad';
      if(substr($ipad,0,4)=='http'){
        $mobileredirect = $ipad;
      }
    break;
 
    case (preg_match('/ipod/i',$user_agent)||preg_match('/iphone/i',$user_agent));
      $mobile_browser = $iphone;
      $status = 'Apple';
      if(substr($iphone,0,4)=='http'){
        $mobileredirect = $iphone;
      }
    break;
 
    case (preg_match('/android/i',$user_agent));
      $mobile_browser = $android;
      $status = 'Android';
      if(substr($android,0,4)=='http'){
        $mobileredirect = $android;
      }
    break;
 
    case (preg_match('/opera mini/i',$user_agent));
      $mobile_browser = $opera;
      $status = 'Opera';
      if(substr($opera,0,4)=='http'){
        $mobileredirect = $opera;
      }
    break;
 
    case (preg_match('/blackberry/i',$user_agent));
      $mobile_browser = $blackberry;
      $status = 'Blackberry';
      if(substr($blackberry,0,4)=='http'){
        $mobileredirect = $blackberry;
      }
    break;
 
    case (preg_match('/(pre\/|palm os|palm|hiptop|avantgo|plucker|xiino|blazer|elaine)/i',$user_agent));
      $mobile_browser = $palm;
      $status = 'Palm';
      if(substr($palm,0,4)=='http'){
        $mobileredirect = $palm;
      }
    break;
 
    case (preg_match('/(iris|3g_t|windows ce|opera mobi|windows ce; smartphone;|windows ce; iemobile)/i',$user_agent));
      $mobile_browser = $windows;
      $status = 'Windows Smartphone';
      if(substr($windows,0,4)=='http'){
        $mobileredirect = $windows;
      }
    break;
 
    case (preg_match('/(mini 9.5|vx1000|lge |m800|e860|u940|ux840|compal|wireless| mobi|ahong|lg380|lgku|lgu900|lg210|lg47|lg920|lg840|lg370|sam-r|mg50|s55|g83|t66|vx400|mk99|d615|d763|el370|sl900|mp500|samu3|samu4|vx10|xda_|samu5|samu6|samu7|samu9|a615|b832|m881|s920|n210|s700|c-810|_h797|mob-x|sk16d|848b|mowser|s580|r800|471x|v120|rim8|c500foma:|160x|x160|480x|x640|t503|w839|i250|sprint|w398samr810|m5252|c7100|mt126|x225|s5330|s820|htil-g1|fly v71|s302|-x113|novarra|k610i|-three|8325rc|8352rc|sanyo|vx54|c888|nx250|n120|mtk |c5588|s710|t880|c5005|i;458x|p404i|s210|c5100|teleca|s940|c500|s590|foma|samsu|vx8|vx9|a1000|_mms|myx|a700|gu1100|bc831|e300|ems100|me701|me702m-three|sd588|s800|8325rc|ac831|mw200|brew |d88|htc\/|htc_touch|355x|m50|km100|d736|p-9521|telco|sl74|ktouch|m4u\/|me702|8325rc|kddi|phone|lg |sonyericsson|samsung|240x|x320|vx10|nokia|sony cmd|motorola|up.browser|up.link|mmp|symbian|smartphone|midp|wap|vodafone|o2|pocket|kindle|mobile|psp|treo)/i',$user_agent));
      $mobile_browser = true;
      $status = 'Mobile matched on piped preg_match';
    break;
 
    case ((strpos($accept,'text/vnd.wap.wml')>0)||(strpos($accept,'application/vnd.wap.xhtml+xml')>0));
      $mobile_browser = true;
      $status = 'Mobile matched on content accept header';
    break;
 
    case (isset($_SERVER['HTTP_X_WAP_PROFILE'])||isset($_SERVER['HTTP_PROFILE']));
      $mobile_browser = true;
      $status = 'Mobile matched on profile headers being set';
    break;
 
    case (in_array(strtolower(substr($user_agent,0,4)),array('1207'=>'1207','3gso'=>'3gso','4thp'=>'4thp','501i'=>'501i','502i'=>'502i','503i'=>'503i','504i'=>'504i','505i'=>'505i','506i'=>'506i','6310'=>'6310','6590'=>'6590','770s'=>'770s','802s'=>'802s','a wa'=>'a wa','acer'=>'acer','acs-'=>'acs-','airn'=>'airn','alav'=>'alav','asus'=>'asus','attw'=>'attw','au-m'=>'au-m','aur '=>'aur ','aus '=>'aus ','abac'=>'abac','acoo'=>'acoo','aiko'=>'aiko','alco'=>'alco','alca'=>'alca','amoi'=>'amoi','anex'=>'anex','anny'=>'anny','anyw'=>'anyw','aptu'=>'aptu','arch'=>'arch','argo'=>'argo','bell'=>'bell','bird'=>'bird','bw-n'=>'bw-n','bw-u'=>'bw-u','beck'=>'beck','benq'=>'benq','bilb'=>'bilb','blac'=>'blac','c55/'=>'c55/','cdm-'=>'cdm-','chtm'=>'chtm','capi'=>'capi','cond'=>'cond','craw'=>'craw','dall'=>'dall','dbte'=>'dbte','dc-s'=>'dc-s','dica'=>'dica','ds-d'=>'ds-d','ds12'=>'ds12','dait'=>'dait','devi'=>'devi','dmob'=>'dmob','doco'=>'doco','dopo'=>'dopo','el49'=>'el49','erk0'=>'erk0','esl8'=>'esl8','ez40'=>'ez40','ez60'=>'ez60','ez70'=>'ez70','ezos'=>'ezos','ezze'=>'ezze','elai'=>'elai','emul'=>'emul','eric'=>'eric','ezwa'=>'ezwa','fake'=>'fake','fly-'=>'fly-','fly_'=>'fly_','g-mo'=>'g-mo','g1 u'=>'g1 u','g560'=>'g560','gf-5'=>'gf-5','grun'=>'grun','gene'=>'gene','go.w'=>'go.w','good'=>'good','grad'=>'grad','hcit'=>'hcit','hd-m'=>'hd-m','hd-p'=>'hd-p','hd-t'=>'hd-t','hei-'=>'hei-','hp i'=>'hp i','hpip'=>'hpip','hs-c'=>'hs-c','htc '=>'htc ','htc-'=>'htc-','htca'=>'htca','htcg'=>'htcg','htcp'=>'htcp','htcs'=>'htcs','htct'=>'htct','htc_'=>'htc_','haie'=>'haie','hita'=>'hita','huaw'=>'huaw','hutc'=>'hutc','i-20'=>'i-20','i-go'=>'i-go','i-ma'=>'i-ma','i230'=>'i230','iac'=>'iac','iac-'=>'iac-','iac/'=>'iac/','ig01'=>'ig01','im1k'=>'im1k','inno'=>'inno','iris'=>'iris','jata'=>'jata','java'=>'java','kddi'=>'kddi','kgt'=>'kgt','kgt/'=>'kgt/','kpt '=>'kpt ','kwc-'=>'kwc-','klon'=>'klon','lexi'=>'lexi','lg g'=>'lg g','lg-a'=>'lg-a','lg-b'=>'lg-b','lg-c'=>'lg-c','lg-d'=>'lg-d','lg-f'=>'lg-f','lg-g'=>'lg-g','lg-k'=>'lg-k','lg-l'=>'lg-l','lg-m'=>'lg-m','lg-o'=>'lg-o','lg-p'=>'lg-p','lg-s'=>'lg-s','lg-t'=>'lg-t','lg-u'=>'lg-u','lg-w'=>'lg-w','lg/k'=>'lg/k','lg/l'=>'lg/l','lg/u'=>'lg/u','lg50'=>'lg50','lg54'=>'lg54','lge-'=>'lge-','lge/'=>'lge/','lynx'=>'lynx','leno'=>'leno','m1-w'=>'m1-w','m3ga'=>'m3ga','m50/'=>'m50/','maui'=>'maui','mc01'=>'mc01','mc21'=>'mc21','mcca'=>'mcca','medi'=>'medi','meri'=>'meri','mio8'=>'mio8','mioa'=>'mioa','mo01'=>'mo01','mo02'=>'mo02','mode'=>'mode','modo'=>'modo','mot '=>'mot ','mot-'=>'mot-','mt50'=>'mt50','mtp1'=>'mtp1','mtv '=>'mtv ','mate'=>'mate','maxo'=>'maxo','merc'=>'merc','mits'=>'mits','mobi'=>'mobi','motv'=>'motv','mozz'=>'mozz','n100'=>'n100','n101'=>'n101','n102'=>'n102','n202'=>'n202','n203'=>'n203','n300'=>'n300','n302'=>'n302','n500'=>'n500','n502'=>'n502','n505'=>'n505','n700'=>'n700','n701'=>'n701','n710'=>'n710','nec-'=>'nec-','nem-'=>'nem-','newg'=>'newg','neon'=>'neon','netf'=>'netf','noki'=>'noki','nzph'=>'nzph','o2 x'=>'o2 x','o2-x'=>'o2-x','opwv'=>'opwv','owg1'=>'owg1','opti'=>'opti','oran'=>'oran','p800'=>'p800','pand'=>'pand','pg-1'=>'pg-1','pg-2'=>'pg-2','pg-3'=>'pg-3','pg-6'=>'pg-6','pg-8'=>'pg-8','pg-c'=>'pg-c','pg13'=>'pg13','phil'=>'phil','pn-2'=>'pn-2','pt-g'=>'pt-g','palm'=>'palm','pana'=>'pana','pire'=>'pire','pock'=>'pock','pose'=>'pose','psio'=>'psio','qa-a'=>'qa-a','qc-2'=>'qc-2','qc-3'=>'qc-3','qc-5'=>'qc-5','qc-7'=>'qc-7','qc07'=>'qc07','qc12'=>'qc12','qc21'=>'qc21','qc32'=>'qc32','qc60'=>'qc60','qci-'=>'qci-','qwap'=>'qwap','qtek'=>'qtek','r380'=>'r380','r600'=>'r600','raks'=>'raks','rim9'=>'rim9','rove'=>'rove','s55/'=>'s55/','sage'=>'sage','sams'=>'sams','sc01'=>'sc01','sch-'=>'sch-','scp-'=>'scp-','sdk/'=>'sdk/','se47'=>'se47','sec-'=>'sec-','sec0'=>'sec0','sec1'=>'sec1','semc'=>'semc','sgh-'=>'sgh-','shar'=>'shar','sie-'=>'sie-','sk-0'=>'sk-0','sl45'=>'sl45','slid'=>'slid','smb3'=>'smb3','smt5'=>'smt5','sp01'=>'sp01','sph-'=>'sph-','spv '=>'spv ','spv-'=>'spv-','sy01'=>'sy01','samm'=>'samm','sany'=>'sany','sava'=>'sava','scoo'=>'scoo','send'=>'send','siem'=>'siem','smar'=>'smar','smit'=>'smit','soft'=>'soft','sony'=>'sony','t-mo'=>'t-mo','t218'=>'t218','t250'=>'t250','t600'=>'t600','t610'=>'t610','t618'=>'t618','tcl-'=>'tcl-','tdg-'=>'tdg-','telm'=>'telm','tim-'=>'tim-','ts70'=>'ts70','tsm-'=>'tsm-','tsm3'=>'tsm3','tsm5'=>'tsm5','tx-9'=>'tx-9','tagt'=>'tagt','talk'=>'talk','teli'=>'teli','topl'=>'topl','hiba'=>'hiba','up.b'=>'up.b','upg1'=>'upg1','utst'=>'utst','v400'=>'v400','v750'=>'v750','veri'=>'veri','vk-v'=>'vk-v','vk40'=>'vk40','vk50'=>'vk50','vk52'=>'vk52','vk53'=>'vk53','vm40'=>'vm40','vx98'=>'vx98','virg'=>'virg','vite'=>'vite','voda'=>'voda','vulc'=>'vulc','w3c '=>'w3c ','w3c-'=>'w3c-','wapj'=>'wapj','wapp'=>'wapp','wapu'=>'wapu','wapm'=>'wapm','wig '=>'wig ','wapi'=>'wapi','wapr'=>'wapr','wapv'=>'wapv','wapy'=>'wapy','wapa'=>'wapa','waps'=>'waps','wapt'=>'wapt','winc'=>'winc','winw'=>'winw','wonu'=>'wonu','x700'=>'x700','xda2'=>'xda2','xdag'=>'xdag','yas-'=>'yas-','your'=>'your','zte-'=>'zte-','zeto'=>'zeto','acs-'=>'acs-','alav'=>'alav','alca'=>'alca','amoi'=>'amoi','aste'=>'aste','audi'=>'audi','avan'=>'avan','benq'=>'benq','bird'=>'bird','blac'=>'blac','blaz'=>'blaz','brew'=>'brew','brvw'=>'brvw','bumb'=>'bumb','ccwa'=>'ccwa','cell'=>'cell','cldc'=>'cldc','cmd-'=>'cmd-','dang'=>'dang','doco'=>'doco','eml2'=>'eml2','eric'=>'eric','fetc'=>'fetc','hipt'=>'hipt','http'=>'http','ibro'=>'ibro','idea'=>'idea','ikom'=>'ikom','inno'=>'inno','ipaq'=>'ipaq','jbro'=>'jbro','jemu'=>'jemu','java'=>'java','jigs'=>'jigs','kddi'=>'kddi','keji'=>'keji','kyoc'=>'kyoc','kyok'=>'kyok','leno'=>'leno','lg-c'=>'lg-c','lg-d'=>'lg-d','lg-g'=>'lg-g','lge-'=>'lge-','libw'=>'libw','m-cr'=>'m-cr','maui'=>'maui','maxo'=>'maxo','midp'=>'midp','mits'=>'mits','mmef'=>'mmef','mobi'=>'mobi','mot-'=>'mot-','moto'=>'moto','mwbp'=>'mwbp','mywa'=>'mywa','nec-'=>'nec-','newt'=>'newt','nok6'=>'nok6','noki'=>'noki','o2im'=>'o2im','opwv'=>'opwv','palm'=>'palm','pana'=>'pana','pant'=>'pant','pdxg'=>'pdxg','phil'=>'phil','play'=>'play','pluc'=>'pluc','port'=>'port','prox'=>'prox','qtek'=>'qtek','qwap'=>'qwap','rozo'=>'rozo','sage'=>'sage','sama'=>'sama','sams'=>'sams','sany'=>'sany','sch-'=>'sch-','sec-'=>'sec-','send'=>'send','seri'=>'seri','sgh-'=>'sgh-','shar'=>'shar','sie-'=>'sie-','siem'=>'siem','smal'=>'smal','smar'=>'smar','sony'=>'sony','sph-'=>'sph-','symb'=>'symb','t-mo'=>'t-mo','teli'=>'teli','tim-'=>'tim-','tosh'=>'tosh','treo'=>'treo','tsm-'=>'tsm-','upg1'=>'upg1','upsi'=>'upsi','vk-v'=>'vk-v','voda'=>'voda','vx52'=>'vx52','vx53'=>'vx53','vx60'=>'vx60','vx61'=>'vx61','vx70'=>'vx70','vx80'=>'vx80','vx81'=>'vx81','vx83'=>'vx83','vx85'=>'vx85','wap-'=>'wap-','wapa'=>'wapa','wapi'=>'wapi','wapp'=>'wapp','wapr'=>'wapr','webc'=>'webc','whit'=>'whit','winw'=>'winw','wmlb'=>'wmlb','xda-'=>'xda-',)));
      $mobile_browser = true;
      $status = 'Mobile matched on in_array';
    break;
 
    default;
      $mobile_browser = false;
      $status = 'Desktop / full capability browser';
    break;
 
  } // ends the switch 
 
	// header('Cache-Control: no-transform');
	// header('Vary: User-Agent, Accept');
 
  if($redirect = ($mobile_browser==true) ? $mobileredirect : $desktopredirect){
    header('Location: '.$redirect);
    exit;
  }else{
		if($mobile_browser==''){
			return $mobile_browser;
		}else{
			return array($mobile_browser,$status);
		}
	}
 
} // ends function mobile_device_detect
作者: 丫忠
• 星期五, 三月 05th, 2010

今天將phpMyAdmin更新至 v3.2.5版本後,在登入帳號、密碼後,卻出現的一個紅色框框的錯誤訊息,如下圖所示:

要解除這個問題也很簡單,請見底下解決方式:

1. 查看 phpMyAdmin 目錄底下是否有一隻 config.inc.php ,如果沒有這支檔案,請將config.sample.inc.php更改成config.inc.php

2. 編輯 config.inc.php 這支檔案,找到底下這一行
$cfg['blowfish_secret'] = ‘  ’; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
隨便輸入一個密碼在 $cfg['blowfish_secret'] 中,主要作用是當成cookie認證用。例如:
$cfg['blowfish_secret'] = ‘thisisacookieauth’;

3.再重新整理後,紅色框框的錯誤訊息就不見了^^Y

文章分類: PHP程式範例  | 相關標籤:  | 留下對這篇文章的想法
作者: 丫忠
• 星期四, 二月 25th, 2010

http header的訊息通常包含:
1. Data(日期 )
2. Server(伺服器訊息)
3. Last-Modified(最後更新日期)
4. states code(回應狀態)
5. Content-Length(內容長度)
6. Content-type(檔案類型mime-type)

寫網頁程式有時候都需要取得這些http header訊息,例如:回應狀態以及內容長度就經常使用到。
如果要取得標頭(header)訊息,請參照底下PHP程式:

1
2
3
4
5
6
7
8
$remoteFile = "http://www.google.com/"; //可以是網頁網址或檔案網址
$ch = curl_init($remoteFile);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
$data = curl_exec($ch);
curl_close($ch);

$data中的資料就是header訊息了,如下所示:
HTTP/1.1 200 OK
Date: Thu, 25 Feb 2010 08:36:56 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=Big5
Set-Cookie: PREF=ID=79ca6fe70d85829c:TM=1267087016:LM=1267087016:S=SOAxH_CuME9aCBfh; expires=Sat, 25-Feb-2012 08:36:56 GMT; path=/; domain=.google.com.tw
Set-Cookie: NID=32=vtrh6ubV4rEDNPwzQ1NJiPVhqTdVzkmySzH9msRXPlShVJkTbcbEmOmosdGmO_EBITa284bdUavtJ5P6_AhspQTzBC6B2JbpHYzL-ZQO0bFwQoVe8fMb78nsR_ZM0vGj; expires=Fri, 27-Aug-2010 08:36:56 GMT; path=/; domain=.google.com.tw; HttpOnly
Server: gws
X-XSS-Protection: 0
Transfer-Encoding: chunked

文章分類: PHP程式範例  | 相關標籤: ,  | 留下對這篇文章的想法
作者: 丫忠
• 星期二, 二月 23rd, 2010

丫忠的某一些網頁想要對robots進行一些限制,因此就要找出判斷來丫忠網站的是一般使用者的瀏覽器還是網頁爬蟲器(robots),於是就是就上網找了一下,找到一個判斷的方式,主要是利用 $_SERVER['HTTP_USER_AGENT'] 這個參數來判斷。

底下為程式碼提供給大家參考^^Y

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function is_robot() {
	if(!defined('IS_ROBOT')) {
	  	$kw_spiders = 'Bot|Crawl|Spider|slurp|sohu-search|lycos|robozilla';
	  	$kw_browsers = 'MSIE|Netscape|Opera|Konqueror|Mozilla';
	  	if(!strpos($_SERVER['HTTP_USER_AGENT'], 'http://')!==false && preg_match("/($kw_browsers)/i", $_SERVER['HTTP_USER_AGENT'])) {
	  		define('IS_ROBOT', FALSE);
	  	} elseif(preg_match("/($kw_spiders)/i", $_SERVER['HTTP_USER_AGENT'])) {
	  		define('IS_ROBOT', TRUE);
	  	} else {
	  		define('IS_ROBOT', FALSE);
	  	}
	}
	return IS_ROBOT;
}
文章分類: PHP程式範例  | 相關標籤: ,  | 3 個人回應
作者: 丫忠
• 星期五, 二月 12th, 2010

$_SERVER的PHP_SELF,SCRIPT_NAME,QUERY_STRING,REQUEST_URI這4個環境變數常常在寫程式中常常使用到,但是有時候又容易搞混,於是丫忠就上網爬了一下資料並整理出以下比較給大家參考。

  • $_SERVER[PHP_SELF]:指正在執行的PHP程式名稱
  • $_SERVER[SCRIPT_NAME]:包含目前程式的路徑
  • $_SERVER[QUERY_STRING]:查詢的字串
  • $_SERVER[REQUEST_URI]:連結至目前頁面的URI

底下就讓我們來設一些例子比較容易了解

例子1:http://homeserver.com.tw/
$_SERVER[PHP_SELF]=’/index.php’
$_SERVER[SCRIPT_NAME]=’/index.php’
$_SERVER[QUERY_STRING]=』
$_SERVER[REQUEST_URI]=’/’

例子2:http://homeserver.com.tw/index.php?u=admin&p=123456
$_SERVER[PHP_SELF]=’/index.php’
$_SERVER[SCRIPT_NAME]=’/index.php’
$_SERVER[QUERY_STRING]=’u=admin&p=123456′
$_SERVER[REQUEST_URI]=’/index.php?u=admin&p=123456′

從上面2個例子來看,大概也可以歸類幾個重點:
$_SERVER[QUERY_STRING]:查詢的字串,也就是獲取?後面的查詢字串
$_SERVER[REQUEST_URI]:取得網域名稱後面所有的字串,也就是http://homeserver.com.tw後面所有的字串

另外,如果網址有經過Rewrite轉址過後,要取得目前頁面的網址就有一些差別了,底下再做個例子:
例子3:
原始的URL: http://homeserver.com.tw/view.php?id=1234
Rewrite轉址後的URL:http://homeserver.com.tw/1234.html

那麼如果要取得原始的URL,則使用(略過網域):
view.php?id=1234  =>  $_SERVER[PHP_SELF].’?’.$_SERVER[QUERY_STRING]
如果要取得轉址後的URL,則使用(略過網域):
/1234.html  =>  $_SERVER[REQUEST_URI]

作者: 丫忠
• 星期二, 二月 09th, 2010

PHP 的 http認證方式很簡單,只要利用PHP的header()函式發送』Authentication Required』訊息告訴瀏覽器,就會彈出一個要求使用者輸入帳號、密碼的視窗,此種認證方式有別於一般使用form完成的認證方式。

底下為丫忠寫的一個很簡單的範例,當使用者輸入錯誤超過3次以後,就停止認證。當然這是一個很簡單的範例,延伸應用的部分就需要您發揮了。

1
2
3
4
5
6
7
8
9
10
11
12
13
 
$i=1;
while($i<=3){
  if ($_SERVER['PHP_AUTH_USER']=='admin' && $_SERVER['PHP_AUTH_PW']=='1234' ) {
    break;  //認證成功,break後往下執行
  }else{
    header('WWW-Authenticate: Basic realm="My Realm"'); //認證失敗,繼續認證
    header('HTTP/1.0 401 Unauthorized');
    echo '取消認證!'; //當使用者按下取消按扭後出現的訊息
    exit;
  }
  $i++;
}
作者: 丫忠
• 星期二, 一月 26th, 2010

雖然丫忠寫PHP程式已經有10年以上的經驗,卻從來沒有用過Ming套件產生swf檔案,終究一山還有一山高啦,PHP 就像大怪獸一樣,我所知道的就只是冰山一角。

回歸正題,要安裝 Ming套件 也是很簡單啦。步驟如下:

1
2
3
4
5
6
7
8
wget http://sourceforge.net/projects/ming/files/Development%20Snapshots/ming%200.4.0-rc2/ming-0.4.2.tar.gz/download
tar xzvf ming-0.4.2.tar.gz
cd ming-0.4.2
./configure
make
cd php_ext
make
make install

安裝好之後會在 ming-0.4.2/tmp/.libs/ 目錄中產生 ming.so 檔案
將 ming.so 烤貝至 php extension的目錄(請參照php.ini中extension_dir=xxxxx)
最後,在php.ini中加入底下文字,大功告成啦

1
extension=ming.so

如果要測試 ming 有沒有載入成功可以用 phpinfo(); 查看就知道了

既然都已經安裝好了,不寫個範例怎麼對的起自已呢~哈
Ming 範例結果
範例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
setDimension(550,400);
$movie->setBackground(rand(0,0xFF),rand(0,0xFF),rand(0,0xFF));
$movie->setRate(31); 
 
$squareshape=new SWFShape();
$squareshape->setRightFill(255,0,0);
$squareshape->movePenTo(-50,-50);
$squareshape->drawLine(100,0);
$squareshape->drawLine(0,100);
$squareshape->drawLine(-100,0);
$squareshape->drawLine(0,-100);
$squaresymbol=$movie->add($squareshape);
$squaresymbol->moveTo(250,200);
 
for($i=0; $i<50; $i++) { $squaresymbol->rotate($i);
$movie->nextFrame();
}
 
header('Content-type: application/x-shockwave-flash');
$movie->output();

更多的範例,網友可以從 這裡 查看更多關於 php 產生 flash檔案的範例。

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

在安裝 Ming套件 時遇到的問題

1. ./make_module.sh: line 11: php-config: command not found

那是因為make_module.sh裡面的php-config沒有指定到正確的路徑
解決方式為修改make_module.sh,將裡面相關的路徑設定正確,底下為丫忠的設定,網友可以參考看看

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/sh
 
if [  z"$1" = z ]; then
        srcdir=.
else
        srcdir=$1
fi
 
mkdir -p tmp/modules
cp $srcdir/* tmp
cp `/ram/php/bin/php-config --extension-dir`/*.so tmp/modules   #/ram/php/bin/ 為丫忠安裝php的路徑,請自行修改
cd tmp
/ram/php/bin/phpize
./configure --with-ming --with-php-config=/ram/php/bin/php-config
make
make install
作者: 丫忠
• 星期二, 一月 26th, 2010

WP-CODEBOX Plugin for bash 的使用方式
1. 在WordPress的編輯器→HTML模式中
2. 輸入如下:
<pre lang="bash">
#將程式碼輸入在此
./configure –prefix=/test #測試
</pre>

1
2
./configure \
--prefix=/test    #測試
作者: 丫忠
• 星期二, 一月 26th, 2010
1
2
3
<?
echo "這是一個測試";
?>