升級PHP5.6後,有一支程式在執行上會出現 PHP Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 65488 bytes) in xxx.php 的訊息。原本以為是 php.ini 內的 memory_limit 的緣故,但不管再如何的調整都是會出現這樣的訊息。
只好重新檢視 PHP 程式的原始碼。檢查了好久,看來看去都覺得沒有問題。後來查了好久才發現與預設編碼有關係。在 php5.6 的 php.ini 預設編碼是指定為 UTF-8。而程式內所使用的Multibyte String Functions(例如: mb_strlen 、mb_strpos 等 function) 。若沒特別指定時,會以 php.ini 內預設值為準。所以也就造成程式在判斷上與邏輯錯誤造成無數迴圈,因而造成此現象。
解決方式其實只要加入一行,直接指定原來升級前所使用的編碼方式就可以了。
宣告如右:mb_internal_encoding("ISO-8859-1");
為了這一行花了 N 久的時間。天啊。
往後若不確定升級前所使用的編碼方式,也可以直接 echo mb_internal_encoding(),就可了解所使用的編碼。
相關資料:
2015年5月22日 星期五
2015年5月20日 星期三
PHP short open tags (PHP5.6)
由於安全性支援週期的緣故,預計將手上的 PHP慢慢的升到 5.6版本。
沒想到第一台就出現的狀況。本來懷疑是系統的 mysql function 需要改寫的,但經測試它還是可以支援。...... 後來發現是 short_open_tag 所造成的。
這個讓我花了半天的時間除錯。真是天阿。明明有將 php.ini 內的 short_open_tag 啟用 (short_open_tag = ON)。但是PHP程式在使用短標籤時就是會有問題。查了手冊,它預設就是啟用的。就算沒特別的啟用也是 OK的。查了老半天。原來在我宣告的下方,它的預設宣告值就有一行是直接指定為 off 的狀態。
相關資料:
沒想到第一台就出現的狀況。本來懷疑是系統的 mysql function 需要改寫的,但經測試它還是可以支援。...... 後來發現是 short_open_tag 所造成的。
這個讓我花了半天的時間除錯。真是天阿。明明有將 php.ini 內的 short_open_tag 啟用 (short_open_tag = ON)。但是PHP程式在使用短標籤時就是會有問題。查了手冊,它預設就是啟用的。就算沒特別的啟用也是 OK的。查了老半天。原來在我宣告的下方,它的預設宣告值就有一行是直接指定為 off 的狀態。
相關資料:
google calendar 整合多個行事曆
很久以前所做的。有點忘了要怎麼做。之前找到的資料它的連結已失效。補充記錄在這備忘。
相關資料:
- 在 google calendar 內先建立每組要使用的行事曆。
- 在前端頁面做下接選單功能,來讓使用者選擇。透過選擇的項目來判定 iframe 所選擇的行事曆。
- 列出所有行事曆的部份:則採用下面 merge google calendars together 的做法。
- 雛型範例
相關資料:
2015年5月19日 星期二
robocopy 差異備份
++++ 指令範例 +++++
rem 差異備份(來源與目的一致)
robocopy "來源" "目的" /mir
rem 差異備份(來源與目的一致,但排除特定目錄)
robocopy "來源" "目的" /mir /xd "目錄1位址" /xd "目錄2位址"
rem 差異備份(來源與目的一致 ; /purge :刪除來源中,不再存在的資料夾或檔案)
robocopy "來源" "目的" /e /xo /purge
rem來源的檔案一律複製到目的
robocopy "來源" "目的" /e /xo /nfl /ndl /njh /MT:12
robocopy "D:\A" "E:\A" /e /dcopy:t /xo /xa:sh /xj /unicode /eta /MT:12
rem 兩顆硬碟複製
robocopy "X:\" "Y:\" /e /xo /nfl /ndl /njh /xa:sh /MT:12
robocopy Y:\ X:\ /e /dcopy:t /xo /xa:sh /xj /unicode /eta /xd "$RECYCLE.BIN" "System Volume Information"
++++ 參數說明 +++++
robotcopy /?
/mir Mirrors a directory tree (equivalent to /e plus /purge).
/nfl Specifies that file names are not to be logged.
/ndl Specifies that directory names are not to be logged.
/njh Specifies that there is no job header.
/xo Excludes older files. (排除較舊的檔案)
/e 複製子目錄包含空目錄
/dcopy:t 複製時間戳記
/xa:sh 跳過屬性為 s (系統) 與 h (隱藏) 的檔案;若是整顆硬碟備份時,要有此參數,要不會出現存取被拒訊息。
/xj 排除 NTFS junction 檔案
/xd 排除特定目錄內的資料
/eta 顯示預計完成時間。
/log:d:\log\copylog.log (將 log 記錄到檔案)
/MT 以 n 個執行緒執行多執行緒複製,n 必須至少為 1,但不可以大於 128
相關參考:
rem 差異備份(來源與目的一致)
robocopy "來源" "目的" /mir
rem 差異備份(來源與目的一致,但排除特定目錄)
robocopy "來源" "目的" /mir /xd "目錄1位址" /xd "目錄2位址"
rem 差異備份(來源與目的一致 ; /purge :刪除來源中,不再存在的資料夾或檔案)
robocopy "來源" "目的" /e /xo /purge
rem來源的檔案一律複製到目的
robocopy "來源" "目的" /e /xo /nfl /ndl /njh /MT:12
robocopy "D:\A" "E:\A" /e /dcopy:t /xo /xa:sh /xj /unicode /eta /MT:12
rem 兩顆硬碟複製
robocopy "X:\" "Y:\" /e /xo /nfl /ndl /njh /xa:sh /MT:12
robocopy Y:\ X:\ /e /dcopy:t /xo /xa:sh /xj /unicode /eta /xd "$RECYCLE.BIN" "System Volume Information"
++++ 參數說明 +++++
robotcopy /?
/mir Mirrors a directory tree (equivalent to /e plus /purge).
/nfl Specifies that file names are not to be logged.
/ndl Specifies that directory names are not to be logged.
/njh Specifies that there is no job header.
/xo Excludes older files. (排除較舊的檔案)
/e 複製子目錄包含空目錄
/dcopy:t 複製時間戳記
/xa:sh 跳過屬性為 s (系統) 與 h (隱藏) 的檔案;若是整顆硬碟備份時,要有此參數,要不會出現存取被拒訊息。
/xj 排除 NTFS junction 檔案
/xd 排除特定目錄內的資料
/eta 顯示預計完成時間。
/log:d:\log\copylog.log (將 log 記錄到檔案)
/MT 以 n 個執行緒執行多執行緒複製,n 必須至少為 1,但不可以大於 128
相關參考:
2015年5月14日 星期四
Synology DS412+ NAS
最新可能要購入 NAS。稍微先做些功課。設定方式與相關介紹可以參考下面的這兩篇。時購入後,應該也有手冊可以參考。
後來購入的型號為 DS1515+這型。
相關資料:
後來購入的型號為 DS1515+這型。
相關資料:
訂閱:
文章 (Atom)