升級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+這型。
相關資料:
2015年4月23日 星期四
BIND DNS Server @ Windows Server
要在 Windows 平台(e.g win7 ....)上建立自己的 Cash-only DNS Server的方式。
做法很簡單,先下載 Windows 版的 BIND 後,直接安裝,再修改 named.conf 檔案。加入以下文字後就可以了。詳細的做法可參考以下幾篇資料。
最主要是這個 named.conf 設定檔案內的設定
options {
directory "C:\ISC BIND 9\etc";
forwarders {8.8.8.8; 8.8.4.4;};
version "";
allow-transfer { none; };
};
key "rndc-key" {
algorithm hmac-md5;
secret "改成亂數產生後的字串 ";
};
logging{
channel my_log{
file "named.log" versions 3 size 2m;
severity info;
print-time yes;
print-severity yes;
print-category yes;
};
category default{
my_log;
};
};
相關資料:
做法很簡單,先下載 Windows 版的 BIND 後,直接安裝,再修改 named.conf 檔案。加入以下文字後就可以了。詳細的做法可參考以下幾篇資料。
最主要是這個 named.conf 設定檔案內的設定
options {
directory "C:\ISC BIND 9\etc";
forwarders {8.8.8.8; 8.8.4.4;};
version "";
allow-transfer { none; };
};
key "rndc-key" {
algorithm hmac-md5;
secret "改成亂數產生後的字串 ";
};
logging{
channel my_log{
file "named.log" versions 3 size 2m;
severity info;
print-time yes;
print-severity yes;
print-category yes;
};
category default{
my_log;
};
};
相關資料:
2015年4月16日 星期四
檔案權限不足的問題@Windows Server
在 Windows Server 上有時會出現檔案權限不足的問題。而且最怪的是明明就是身為 administrator group。為什麼還是會這樣。原因,可參考這篇 Blog。
相關資料:
相關資料:
訂閱:
文章 (Atom)
