昨天升級了 FreeBSD 的 Apache, PHP, and MySQL,遇到很多地雷阿,最多的就是 PHP 的部份,因為本來自己使用 5.2.11 版本,但是在 commit port 的時候發生去裝 5.3.2 版本,所以就直接砍掉全部重練,先是遇到 MySQL 問題,原先在 database/mysql60-server 已經被 FreeBSD 移除,任何關於 mysql60 的相關 port 都被 remove 掉了,只好 downgrade 到 mysql 5.1.48 版本,移除同時順手把 apache PHP 相關都拿掉了。
移除 apache mysql php 相關 ports -rf 依序找尋相關 Mysql ports 移除
pkg_deinstall -rf mysql60-server接下來安裝 MySQL 5.1.48 Server and Client,可以找到在
databases/mysql51-server and databases/mysql51-client,直接安裝即可
cd /usr/ports/databases/mysql51-server && make install安裝 Apache 2.2.15
cd /usr/ports/www/apache22 && make WITH_MPM=worker install安裝 PHP 5.3.2,FreeBSD 把 5.2.X 跟 5.3.X 分開不同資料夾
lang/php5, lang/php52,extension 也是分成兩個,所以要安裝 5.2 版本也是可以的
cd /usr/ports/lang/php5 && make install cd /usr/ports/lang/php5-extensions/ && make install以上安裝好,就是苦難的開始,首先 MySQL 從原本的 6.0.9 降到 5.1.48,造成所有資料庫無法讀取,也沒辦法正確啟動 MySQL,馬上噴出底下問題:
090205 11:14:24 mysqld_safe Starting mysqld daemon with databases from /var/db/mysql /usr/local/libexec/mysqld: Unknown collation ‘#46’ in table ‘plugin’ definition 090205 11:14:24 [ERROR] Can’t open the mysql.plugin table. Please run mysql_upgrade to create it. 090205 11:14:24 InnoDB: Started; log sequence number 0 46429 090205 11:14:24 [ERROR] Fatal error: Can’t open and lock privilege tables: Unknown collation ‘#46’ in table ‘host’ definition 為啥會出現紅色那段字,就是因為字元集不同,MySQL 6 有支援 utf8mb4,但是 5.1.48 版本沒有,所以才會造成無法啟動,解決方法呢?就是把 /var/db/mysql/mysql 砍掉,在重新啟動就可以了,當然您的資料庫也是無法使用,再去其他電腦裝上 MySQL 6.0.9 之後,把 /var/db/mysql/ 底下的資料庫 Copy 過去一份,利用 mysqldump 把全部資料庫 dump 下來,再 restore 回去原來的系統,大致上就可以了。 對於把 PHP 升級到 5.3 的時候,心裡就在想會遇到很多雷,果然是如此,很多 opensource 都尚未支援到 php 5.3,也因此很多函數都無法支援,ereg_ 系列都必須換成 preg_,register_globals 的移除,也不能使用 HTTP_GET or HTTP_POST,把 register_long_arrays 拿掉,參考: http://php.net/manual/en/ini.core.php,CodeIgniter V 1.7.2 開始支援 PHP 5.3.0 版本,這樣大致上所有專案都可以順利啟動,底下是在 WordPress 遇到的問題:
Warning: strtotime() [function.strtotime]: It is not safe to rely on the system’s timezone settings. You are required to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected ‘Europe/Helsinki’ for ‘EEST/3.0/DST’ instead in /path/to/my/www/wp-includes/functions.php on line 35 這在 WordPress 官網也是有提出此問題,解決方式有兩種,一種是在 wp-config.php 加上 date_default_timezone_set(’UTC’); 或者是 date_default_timezone_set(’Asia/Taipei’);,另一種是修改 php.ini,修改
; Defines the default timezone used by the date functions date.timezone = Asia/Taipei這樣大致上修補完成,其他程式的修改這裡就不補充了,底下是 PHP 網站所支援的 time zone,可以參考看看其他時區 Reference:
Php 5.3.0 & WP 2.8 (It is not safe to rely on the system’s timezone) Description of core php.ini directives 現在寫 PHP6-compatible 的一些技巧 List of Supported Timezones
See also
- [SQL] 如何從單一資料表取得每個 key 前 n 筆資料
- 在 Docker 偵測 MySQL 或 Postgres 是否啟動
- 來聊聊 PHP & JavaScript & CSS 的 Coding Style
- 為什麼我選擇使用 Laravel Framework?
- OpenSSH 安全性漏洞 CVE-2016-0777 and CVE-2016-0778
- Laravel 搭配 Google, Facebook, Twitter 第三方 OAuth 認證
- 將 wordpress 強制使用 SSL 連線
- PHP 7 vs HHVM Benchmark 比較
- Laravel 50 個小技巧 + Laravel 5.2 新功能
- Laravel Homestead 支援 MySQL 5.7 和 Node 5.0