驚艷於一個相容於ColdFusion,但是可免費商用的Railo,跌跌撞撞的研究過程,希望能有同好一起交流指教。

2011年6月27日 星期一

出現request timeout 訊息處理

如果 cfm程式執行太久,為了保護服務,會強制停止繼續執行程式出現類似" request (path: C:\Railo\webapps\ROOT\test.cfm:2) is run into a timeout (50 seconds) and has been stopped. no open locks" 的訊息。


在ColdFusion中最簡單的解決方式加上一個URL變數 RequestTimeout=秒數,手動調整逾時的時間(ex:test.cfm?RequestTimeout=999);但是在 Railo中RequestTimeout預設值是關閉的,所以就算加上去也是會出現一樣的錯誤,要到Admin裡調整設定:

Railo Administrator -> Settings -> Application - > Request timeout in URL -> 勾選When the URL parameter [RequestTimeout] is passed in the URL obey it


這樣此變數即可生效。


不過這個錯誤訊息是個警訊,僅能治標,出現訊息還是應該要去檢查一下程式碼,是否程式邏輯上、網路效能、資料庫大量運算導致效能太慢。



 

ColdFusion常用數學函數

絕對值
  Abs(-5) = 5, Abs(5) = 5

三角函數
  PI() = 3.14159265359
  Sin(0/180*PI()) = 0
  Cos(0/180*PI()) = 1
  Tan(0/180*PI()) = 0
  Atn(0) = 0.463647609001

極值
  Max(1,2) = 2
  Min(1,2) = 1

亂數
  Rand() 傳回介於0~1之間的浮點亂數,使用前必須先執行Randomize函數。
  Randrange(1, 1000) 傳回介於0~1000之間的整數亂數,使用前須先執行Randomize函數。
  Randomize(任意值) 決定亂數Rand()或Randrange(n1, n2)所傳回的亂數值。

進位
  Round(-7.8) = -8, Round(7.8) = 8 (四捨五入)
  Ceiling(99.9) = 100, Ceiling(-99.9) = -99(無條件進位)
  Fix(99.9) = 99, Fix(-99.9) = -99(無條件退位)
  Int(99.9) = 99 (取整數部份)
  Incrementvalue(123.3) = 124 (整數部份加 1後的整數)
  Decrementvalue(-123.3) = -124(整數部份減 1 後的整數)

其他
  Log10(1) = 0
  Log(1) = 0
  Sgn(-7) = -1, Sgn(7) = 1 (正負號判別式)
  Sqr(100) = 10 (平方根)
  Exp(1) = 2.71828182846 (指數)
  InputBaseN("1010", 2) = 10 (二進位轉十進位,第二個參數範圍從2~36)
  FormatBaseN(10, 2) = 1010 (十進位轉二進位,第二個參數範圍從2~36)


更多數學函數,可參考Adobe線上文件

ColdFusion常用字串函數

Asc 傳回該字元或是字串第一位字元之ASCII Code值。
  Asc("0") = 48
  Asc("A") = 65
  Asc("Apple") = 65

Chr 根據所輸入之ASCII Code值(需介於0 – 255),傳回對應之字元。
  Chr(65) = "A"
  Chr(Asc("A")) = "A"

CJustify 將原字串內容依新的字串長度予以置中對齊。
  CJustify("Center", 10) = " Center "

Compare 依據ASCII Code值比較兩個字串大小(大小寫有差別),第一字串大於第二字串,傳回1
第一字串等於第二字串,傳回0
第一字串小於第二字串,傳回-1
  Compare("coo", "Coo") = 1
  Compare("Abc", "Abc") = 0
  Compare("coo", "koo") = -1

CompareNocase 依據ASCII Code值比較兩個字串大小(大小寫沒有差別),傳回值同Compare。
  CompareNocase("boo", "Boo") = 0
  CompareNocase("boo", "foo") = -1

Find 找尋子字串是否包含於母字串中(大小寫有差別),並可設定母字串搜尋起始位置。若包含於母字串中,則傳回母字串中第一位相同字元之位置,反之,則傳回0。
  Find("idf", "Abcidfgh", 1) = 4
  Find("idg", "Abcidfgh", 1) = 0

FindNoCase 找尋子字串是否包含於母字串中(大小寫沒有差別),其他同Find。
  Find("IDF", "Abcidfgh", 1) = 4
  Find("idg", "Abcidfgh", 1) = 0

FindOneOf 找尋子字串集合中之任一字元是否存在於母字串(大小寫有差別),若存在則傳回母字串中第一個相同字元之位置,反之,則回傳0。
  FindOneOf("ghd", "abcdefghijk", 1) = 4
  FindOneOf("GhD", "abcdefghijk", 1) = 8

Insert 將子字串插入母字串所指定的位置當中。
  Insert("abc", "123456789", 4) = "1234abc56789"
  Insert("abc", "123456789", 0) = "abc123456789"

LCase 將字串中之英文字母轉換成小寫。
  LCase("ColdFusion") = "coldfusion"
  LCase("ABCD1234") = "abcd1234"

Left 從母字串之起始位置取出子字串。
  Left("ColdFusion", 4) = "Cold"
  Left("ColdFusion", 20) = "ColdFusion"

Len 傳回字串長度。
  Len("ColdFusion") = 10
  Len("Cold" & "Fusion") = 10
  Len("") = 0

LJustify 將原字串內容依新的字串長度予以置左對齊。
  LJustify("Left", 10) = "Left "

LTrim 去除字串中左邊的空格。
  LTrim(" Leetide ") = "Leetide "

Mid 從母字串中取出子字串。
  Mid("Dictionary", 3, 4) = "ctio"
  Mid("Dictionary", 1, 15) = "Dictionary"

RemoveChars 移除字串中字元。
  RemoveChars("ColdFusion", 3, 4) = "Cosion"
  RemoveChars("ColdFusion", 3, 15) = "Co"

RepeatString 複製字串於原字串當中。
  RepeatString ("ColdFusion", 2) = "ColdFusionColdFusion"
  RepeatString ("ColdFusion", 0) = ""

Replace 取代字串中之特定字元(大小寫有差別)。
  Replace("CACACA", "C", "Q") = "QACACA"
  Replace("CACACA", "C", "Q", "ONE") = "QACACA"
  Replace("CACACA", "C", "Q", "ALL") = "QAQAQA"
  預設值為"ONE"

ReplaceList 取代字串中之特定字元列(大小寫有差別)。
  ReplaceList("CABARET", "CA,BA,T", "SA,DA,K") = "SADAREK"
  ReplaceList("CABARET", "CA,BA,T", "TA,DA,K") = "KADAREK" ,其中"CA"先被轉換成"TA",但隨後的"T"又被轉換成"K",故"CA"最終將轉換成"KA",此為Recursive之用法。

ReplaceNoCase 取代字串中之特定字元(大小寫沒有差別)。
  Replace("cacaca", "C", "B") = "Bacaca"
  Replace("CACACA", "c", "b", "ONE") = "bACACA"
  Replace("CACACA", "C", "b", "ALL") = "bAbAbA"
  預設值為"ONE"

Reverse 反置字串內容。
  Reverse("ABCD") = "DCBA"
  Replace("CACACA", "c", "b", "ONE") = "bACACA"

Right從母字串之最後一位字元取出子字串。
  Right("ColdFusion", 6) = "Fusion"
  Right("ColdFusion", 20) = "ColdFusion"

RJustify 將原字串內容依新的字串長度予以置右對齊。
  RJustify("Right", 10) = " Right"

RTrim 去除字串中右邊的空格。
  RTrim(" Leetide ") = " Leetide"

SpanExcluding 從字串起始位置依序取出字元,直到有相同特定字元時才停止(大小寫有差別)。
  SpanExcluding ("I am happy", "h") = "I am "
  SpanExcluding("Book", "b") = "Book"

SpanIncluding 從字串起始位置依序取出字元,直到沒有相同特定字元時才停止(大小寫有差別)。
  SpanExcluding ("Sensitivity", "eStinsvy") = "Sensitivity"
  SpanExcluding ("Sensitivity", "eStin") = "Sen"

Trim 去除字串中左邊與右邊的空格。
  Trim(" Leetide ") = "Leetide"
  Trim(" baby face ") = "baby face"

UCase 將字串中之英文字母轉換成大寫。
  UCase("ColdFusion") = "COLDFUSION"
  UCase("Yankee") = "YANKEE"

Val 將字串轉換成數字,若無法轉換則傳回0。
  Val("1290") = 1290
  Val("Ghost") = 0
  Val("66Ghost") = 66


更多字串函數,可參考Adobe線上文件