InfinityFree上執行PHP程式都不會顯示錯誤訊息?

如果你使用InfinityFree的空間寫PHP程式,你會發現程式再怎麼錯誤,都看不到錯誤訊息。

因為InfinityFree的預設,PHP的錯誤是不顯示的。

但是如果不顯示錯誤訊息,將會造成除錯的困難,因此我們需要將預設修改,修改方式如下 : 


我們只需要將 Display Errors 改為 On,順便將PHP Time Zone 改為 Asia/Taipei。

以上這個畫面的進入點是 : 到你的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'

但是在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 寫回去資料庫 :

$order_query = "INSERT INTO mytable (myid, mytime) VALUES ($myid, '$newdateTime')"; 
$conn->query($order_query);

這樣資料表中的日期時間,就是Asia/Taipei的正確時間了。

張貼留言

0 留言