How to install PHP 7.4 on FreeBSD 12

一直以來我都使用源代碼編譯的方式安裝php,一方面是因為Centos上yum的php版本比較舊,源代碼編譯比較適用於各種類unix平台,另外一方面是因為有時候需要加入第三方的模塊,比如pagespeed的時候,就必須從源代碼進行編譯,但是,FreeBSD一直都不支持pagespeed,所以,其實使用pkg自帶的版本就足夠好用了。

安裝的命令很簡單:

pkg install php74 php74-zlib php74-exif php74-gd php74-mbstring php74-xml php74-pdo_mysql php74-mysqli php74-curl php74-opcache php74-intl php74-sockets php74-zip php74-openssl php74-bz2 php74-pecl-redis php74-session php74-json php74-dom php74-fileinfo php74-simplexml php74-simplexml php74-pdo_sqlite php74-iconv php74-pecl-imagick-im7 php74-filter

如果有需要其他的模塊,繼續在後面添加就可以。

我一般會對/usr/local/etc/php.ini做如下一些修改:

post_max_size = 22M

upload_max_filesize = 20M

date.timezone = Asia/Taipei

opcache.memory_consumption=32
opcache.blacklist_filename=/root/sh/opcachebl.txt

當你不想為所有的php script啟用opcache的時候,你可以把那些目錄加入黑名單,這樣你可以節省很多內存。

有一些pkg中沒有的so,phpize安裝後,需要在/usr/local/etc/php 目錄中新建一個extension.ini,並添加例如
extension=imagick.so

如果服務器內存足夠大,那麼我們可以使用redis作為session handler,將php的session放入內存,比直接扔在磁碟上的效率要高不少,針對php.ini需要修改兩處:

session.save_handler = files 修改為
session.save_handler = redis

同時,session.save_path = “/tmp”
修改為session.save_path = “tcp://127.0.0.1:6379?auth=ifyouhaveapassword”

如果redis-server沒有設置密碼,那麼後面就不需要添加。

好吧,其實是因為使用源代碼編譯intl模塊在FreeBSD上怎麼都過不去,看起來似乎是一個bug,而且是幾年前的bug,粗略的尋找了一下,沒有找到答案,也許以後可以解決這個問題。