網頁

2015年5月22日 星期五

PHP Fatal error: Allowed memory size of 536870912 bytes exhausted @ PHP5.6

升級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月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 的狀態。

相關資料:

google calendar 整合多個行事曆

很久以前所做的。有點忘了要怎麼做。之前找到的資料它的連結已失效。補充記錄在這備忘。

  1. 在 google calendar 內先建立每組要使用的行事曆。
  2. 在前端頁面做下接選單功能,來讓使用者選擇。透過選擇的項目來判定 iframe 所選擇的行事曆。
  3. 列出所有行事曆的部份:則採用下面 merge google calendars together 的做法。
  4. 雛型範例













相關資料:

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

相關參考:

2015年5月14日 星期四

Synology DS412+ NAS

最新可能要購入 NAS。稍微先做些功課。設定方式與相關介紹可以參考下面的這兩篇。時購入後,應該也有手冊可以參考。

後來購入的型號為 DS1515+這型。

相關資料: