2011/12/22

PHP 判斷目前連線是 http 或 https

利用伺服器參數 $_SERVER['HTTPS'] 判斷
$protocol = 'http';
if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == "on") {
    $protocol = 'https';
}
精簡寫法:
$protocol = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == "on") ? "https" : "http";

載入 Facebook JavaScript SDK

更新:官網上建議的載入範例有改,請見此篇:
載入 Facebook JavaScript SDK (2012.07.)

如果要在網站上使用 Facebook 提供的 JavaScript SDK,可利用以下的程式碼載入(2011.12.22. 官網範例):
<div id="fb-root"></div>

這段程式碼最好能緊接在 <body> 標籤之後。

資料來源:JavaScript SDK - Facebook 開發人員

2011/12/13

[Castle Age] Heart of the Woods 入手

Heart of the Woods - 2011/12/12

順便補一下之前合成的 divine items:

Force of Nature - 2011/10/18

Aegis of Kings - 2011/07/29

2011/11/19

妞新聞 niusnews 開站了

終於開站了,大家辛苦了!

倒字 flip text

今天在塗鴉牆上看到國外網友的留言:

看的出有什麼特別的嗎?

2011/11/17

PHP 的 nl2br 是在換行字元前插入

重點是 nl2br 函式的作用是在換行字元(\r\n、\n\r、\r、\n)前面 插入 <br> 或 <br />

不是將換行字元置換成 <br> 或 <br />

2011/11/15

Error: unterminated string literal
description
FB.ui(
  {
    method: 'feed',
    name: 'xxx',
    link: 'xxx',
    picture: 'xxx',
    caption: 'xxx',
    description: 'xxx'
  },
  function(response) {}
);

description 不能有換行字元 \r 或 \n 用 preg_match('/[\r\n]+/', '', description) 置換掉就可以了

2011/11/14

[MySQL] UPDATE from SELECT result

需求:統計各分類的文章數量,並將數量寫入分類資料表。
語法如下:
UPDATE t1 AS A,
 (SELECT `id`, COUNT(`id`) AS `no` FROM t2 GROUP BY `id`) AS B
 SET A.`no`=B.`no` WHERE A.`id`=B.`id`;

2011/11/02

移除 Flash 周圍的虛線(Firefox 限定)

在 Firefox 下,只要點擊 Flash 之後,旁邊就會出現莫名的虛線:
雖然影響不大,可是看起來總是怪怪的。本以為是 Flash 設定上的問題,但遍查官方文件卻都沒發現哪邊有設定可以調。
後來在網路上發現有人提供解決方法(CSS-TRICKS - Removing The Dotted Outline),只要在 css 裡加上
object, embed {
    outline: 0;
}
就能移除這惱人的虛線。 詳細原因請見原文說明:CSS-TRICKS - Removing The Dotted Outline

2011/10/22

PHP 內建的換行常數 PHP_EOL

PHP 從 4.3.10 和 5.0.2 開始提供 PHP_EOL 常數,對應各平台的換行編碼。

官網說明:http://php.net/manual/en/reserved.constants.php

ActionScript 3 取得當前網域名稱

程式碼:
import flash.net.LocalConnection

var conn:LocalConnection = new LocalConnection();
var domainName:String = conn.domain;
trace( domainName );

2011/10/08

CodeIgniter 怎麼取得 query string

$this->db->last_query();

直接回傳查詢字串,通常是除錯時才會用到。

CodeIgniter 怎麼寫 log?要去哪裡看?

CodeIgniter 寫入 log 的函式是 log_message('level', 'message'),這是內建的錯誤處理函式,不用宣告或載入任何類別,隨時隨地都可以使用。

函式名稱: log_message('level', 'message')
參數說明:
  1. level : 錯誤層級,可用值為 error、debug、info。
  2. message : 訊息內容。
使用範例:
if ($some_var == '') {
    log_message('error','Some variable did not contain a value.');
}
else {
    log_message('debug','Some variable was correctly set');
}
log_message('info','The purpose of some variable is to provide some value.');

CodeIgniter 的 log 檔預設是放在 application/logs/ 目錄下,檔名是 log-YYYY-MM-DD.php 依照日期命名。

如果發現 log 沒有寫入,請參考以下步驟檢查:
  1. 檢查 application/logs/ 目錄的存取權限,是否可以讓 php 寫入。
  2. 檢查 application/config/config.php 內設定的 log 寫入門檻是否過高,或是被關閉了。

參考資料:官方說明的錯誤處理一節。


2011/09/01

PHP 錯誤訊息 Allowed memory size of NNN bytes exhausted 處理方式

這個訊息是說,PHP 程式碼在執行的時候,超過系統設定的記憶體使用上限。
調整記憶體使用上限的方法有以下三種:

一、修改 php.ini 檔:這是 PHP 的系統設定檔,找到
memory_limit = NN
將數字改大一點就可以了。

二、修改 .htaccess 檔:這是網站伺服器設定檔,當 php.ini 檔沒辦法修改的時候,可以試著改這個檔案試試看。打開之後加上
php_value memory_limit 32M 
或是
php_admin_value memory_limit 32M

三、直接在 PHP 程式碼裡加上設定:
ini_set('memory_limit', '32M');

通常調高之後就可以解決,但如果調到 128M、256M 都還不能解決,最好重新檢視一下程式碼,用不到的資料就 unset() 掉,或是重新設計程式邏輯,盡量減少記憶體的使用。
PHP 有一個 memory_get_usage() 函式可以回傳目前的記憶體使用量,可以用它去觀察記憶體的使用量。

2011/08/27

MySQL 連線校對的 utf8_general_ci 與 utf8_unicode_ci 有何差異?

太久沒用就忘了,還是簡單紀錄一下。
MySQL 的官方文件裡有說明:Unicode Character Sets

utf8_unicode_ci 會依照 Unicode 標準去處理每一個字元,但 utf8_general_ci 為了提升速度,會用相近於 Unicode 標準去處理。也就是說 utf8_general_ci 會比較不準確(但比較快)。

就拿官方文件裡的文字 ß 來說好了,在德文或其他語言中,ß 等同於 ss,但在 utf8_general_ci 下會被省略而被視為是 s。因此如果有個欄位是設定成 utf8_general_ci,如果以 s 去搜尋,會出現包含 ß 字元的結果,反之亦然。也就是說,在 utf8_general_ci 下無法分辨 ß 與 s。但如果是 utf8_unicode_ci,s 就是 s,ß 就是 ß,不會傻傻分不清。

因此,如果需要較精確的比對,就要用 utf8_unicode_ci,但搜尋效能就會差了一點。
如果不需要太精確的比對,就可以用 utf8_general_ci,處理速度會快些。

2011/08/23

MySQL 的 Query String 可以有多長?

這個疑惑通常發生在 INSERT 或 WHERE 裡面有用到 IN() 的時候。如果有將圖檔存在資料庫裡(BLOG 欄位),也有可能遇到這個問題。

2011/07/20

[Castle Age] 9,551,437 damage

Agamemnon: 600 stamina + critical hit

2011/06/13

設定 Flash Player Debugger

原文在這裡:Configure the debugger version of Flash Player

簡單說明一下:
Step 1. 安裝 Flash Player Debugger。
Step 2. 建立設定檔 mm.cfg 內容如下:
ErrorReportingEnable=1
TraceOutputFileEnable=1
Step 3. 把 mm.cfg 放到適當的目錄下:
Windows XP 放在 C:\Documents and Settings\username
Mac OSX 放在 /Library/Application Support/Macromedia
Linux 放在 /home/username
Step 4. 完成上述設定後,在 flashlog.txt 裡就能夠看到 Flash 的錯誤訊息以及 trace() 訊息。flashlog.txt 所在位置:
Windows XP 在 C:\Documents and Settings\username\Application Data\Macromedia\Flash Player\Logs
Mac OSX 在 /Users/username/Library/Preferences/Macromedia/Flash Player/Logs/
Linux 在 /home/username/.macromedia/Flash_Player/Logs/

個人使用心得:
1. flashlog.txt 的路徑又臭又長,我會設定一個 symbolic link 或捷徑到 Logs 目錄,這樣比較好找。
2. 在 Mac OSX 或 Linux 可以用 tail -f 去看 flashlog.txt,在 Windows XP 下可以用 BareTail 這個軟體去看,功能就跟 tail 一樣,免安裝,下載即可使用。
3. 如果在 flashlog.txt 裡沒看到訊息,記得檢查一下 Flash 的發佈設定,是否有將 Permit debugging 打開。
4. 瀏覽器 Chrome 安裝 Flash Player Debugger 會有問題,原因與解法請參考這篇:FLASH Debug Player on Chrome

2011/06/02

找出目前瀏覽器安裝的 Flash Player 版本

官網提供的偵測連結:
Find Flash Player version
挺方便的。

紀錄一下,免得以後找不到。

2011/05/25

Facebook PHP SDK v3.0.0 釋出

剛發現的,原文: Upgrade to PHP SDK v3.0.0
下載點: Facebook PHP SDK @GitHub
2.x 版的 PHP SDK 在 2011/9/1 之後就不能用了,有用到 PHP SDK 的人儘快找時間更新吧!

2011/05/19

[ActionScript 3] 運算子 ||=(設定變數預設值)

||= 是 AS3 獨有的運算子,最大的功用就是設定變數的預設值。
以下兩行是等義的:
x ||= y
x = x || y
翻成白話文就是:當變數 x 如果是 null、空值、undefined 這些等同於 false 的值,就將變數 x 設定成變數 y。
注意:只能在 AS3 下用喔!

參考資料:logical OR assignment

2011/05/05

 蘋果符號(Mac 才看得到)

無意間在 Mobile01 上發現有文章的標題中出現蘋果符號:

看了網頁原始碼,確定不是圖片。心想,什麼時候跑出這個字元?
轉念一想,這符號該不會是 Mac OSX 限定的吧!我是在 Mac OSX 下看到的,換成 Windows 該不會就沒有了吧!果不其然,換用 XP 的電腦看就不見了。

後來在網路上找到了輸入方式:

 = Shift + Option + k

這讓人不禁想起 Sandra Bullock 主演的 The Net 裡頭的那個 π。

參考資料:Apple logo font

2011/05/03

[ActionScript] 移動文字欄位的插入點

這幾天遇到一個需求,本來以為是小東西,沒想到花了不少時間。
功能需求是希望能在使用者輸入特定文字後,將特定文字換成特定文字。
比如說在文字欄位輸入的第一個字是 1,就會自動換成「you press 1」。
這倒沒什麼困難,但是置換之後卻發現插入點(文字輸入的游標)卻停留在上例的 y 和 o 中間,也就是停留在原本輸入 1 之後的位置。想當然爾,這 UI 很不友善,置換後應該要將插入點移動到置換後的文字後方,這就花了不少時間。

ActionScript 2.0 範例
// 如果輸入的第一個字是 1,就自動置換成特定文字,
// 並將輸入游標移到文字末端。
// ActionScript 2.0
tfInput.onChanged = function(){
 var input:String = tfInput.text;

 if (input.substr(0,1)=='1') {
  tfInput.text = "you press 1" + input.substr(1);
  Selection.setFocus("tfInput");
  Selection.setSelection(tfInput.text.length, tfInput.text.length);
 }
};
ActionScript 3.0 範例
// 如果輸入的第一個字是 1,就自動置換成特定文字,
// 並將輸入游標移到文字末端。
// ActionScript 3.0
tfInput.addEventListener(Event.CHANGE, evHandler);
function evHandler(e:Event):void {
 var input:String = tfInput.text;
 if (input.substr(0,1)=='1') {
  tfInput.text = "you press 1" + input.substr(1);
  tfInput.stage.focus = tfInput;
  tfInput.setSelection(tfInput.length, tfInput.length);
 }
}

2011/04/30

在 Mac 的 Vim 中使用 Page Down, Page Up, Home, End

MacBook Pro 沒有 Page Down, Page Up, Home, End 這幾個常用按鍵,在終端機下用 Vim 編輯文字檔頗為不便。

網友提供了設定的方法:
照著設定就可以了。

只有一點要留意,就是設定畫面的「動作」要選「傳送字串到 shell:」,否則下方的輸入欄位會無法輸入。

2011/04/25

SmartFoxServer Server-side Actionscript API: put method of Room Class

標準用法:
var abc = 123;
room.properties.put("foo", abc);
如果要移除 foo 這個屬性,則需用 remove()
room.properties.remove("foo");

2011/04/18

[Castle Age] 經驗值公式

每個等級最低的經驗值 = 6.25 乘以 等級的平方, 如果有小數點就無條件進位。
也就是:
exps = ceil( 6.25 * level * level )

例如:
要達到 200 等級,需要的經驗值是 250,000.
要達到 300 等級,需要的經驗值是 562,500.
要達到 350 等級,需要的經驗值是 765,625.


來源網址: http://174.37.115.166/cforum/showthread.php?t=5291

2011/03/29

搬站到 blogger

這幾個月連到 Dreamhost 上的網站變得很慢,看自己的 blog 會等到抓狂。雖然 Dreamhost 便宜,但連線的品質卻大不如前。因此決定把 blog 搬到 blogger 上,雖然不像自己架站那麼有彈性,至少連線速度快又不用花錢 :p

將文章從 wordpress 轉換到 blogger 倒是挺容易的,有網友提供轉換程式可以進行線上轉換(http://wordpress2blogger.appspot.com/ 感恩啊~~)。但我比較擔心文章外流,因此是將轉換程式下載到自己的 server 上去跑。不消幾分鐘,網站就搬過來了!

不過原本文章中的 syntax highlighting 的效果得逐一改過,有些連結也得稍作調整,最近有空再慢慢改。反正現在連線速度快,做什麼都方便。