如果你使用InfinityFree的空間寫PHP程式,你會發現程式再怎麼錯誤,都看不到錯誤訊息。
因為InfinityFree的預設,PHP的錯誤是不顯示的。
但是如果不顯示錯誤訊息,將會造成除錯的困難,因此我們需要將預設修改,修改方式如下 :
以上這個畫面的進入點是 : 到你的InfinityFree Home,點選你的帳號後,由 Account Options 的 Domains 進入,再由 PHP Options 進入,即可看到以上畫面。
為何InfinityFree的Display Errors要預設為 Off 呢? 通常系統開發完成之後,會不希望執行時出現編譯錯誤的訊息,而希望所有的錯誤都由程式系統自己處理,因為有時候產生錯誤後,並不需要暫停執行程式,而是由程式自行處理。
但是在程式的開發階段,錯誤訊息就很重要了,因為可以進行除錯。
另外,InfinityFree中還有一個需要搞清楚的就是系統時間 timezone 設定。
InfinityFree的MySQL/MariaDB有自己的時區設定 (設定為SYSTEM,比台灣時間慢12小時),PHP也有自己的時區設定。
Windows下要修改MySQL/MariaDB的時區設定,是在my.ini中的[mysqld]段加入 :
default-time-zone = '+8:00'
default-time-zone = '+8:00'
但是在InfinityFree下,使用者因為權限不足,無法更改MySQL/MariaDB的時區設定,但是可以修改PHP的時區設定。
因此當你需要正確的日期時間寫回資料庫時,如果用MySQL的Now(),就會把SYSTEM的時區寫進去,因此你必須先在PHP處理正確的日期時間,再寫回資料庫。
例如 :
我們先修改PHP的時區為 Asia/Taipei,然後由PHP獲得正確的日期時間
$dateTime = new DateTime();
$newdateTime = $dateTime->format('Y-m-d H:i:s');
$newdateTime = $dateTime->format('Y-m-d H:i:s');
然後再把 $newdateTime 寫回去資料庫 :
$order_query = "INSERT INTO mytable (myid, mytime) VALUES ($myid, '$newdateTime')";
$conn->query($order_query);
這樣資料表中的日期時間,就是Asia/Taipei的正確時間了。
0 留言