Installing phalcon-php on ubuntu 16.04

前幾天(2016/7/29) phalcon 出了 3.0 版本,可以正常地(?)在 php 7 環境裏頭去執行。
要不然之前在 php 7 環境裝 phalcon 2.0.13 根本就是自討苦吃

phalcon 原本要出 2.1, 結果後來直接宣告 2.1 掰掰,跳過直接出 3.0 (https://blog.phalcon.io/post/phalcon-3-0-0-released)

php 7 & phalcon 3

phalcon 3 LTS在 2016/7/29 才剛 release,來當一下白老鼠。

$ sudo apt-add-repository ppa:phalcon/stable
$ sudo apt-get update
# Ubuntu 16.04+
$ sudo apt-get install php7.0-phalcon

這樣子就會裝完了,也會在 /etc/php/7.0/mods-available 裡頭新增一個 phalcon.ini。但是要在 apache2 web server 裏頭啟用的話,還要多加下面這個步驟

$ sudo ln -s /etc/php/7.0/mods-available/phalcon.ini /etc/php/7.0/apache2/conf.d/30-phalcon.ini

另外裝 phalcon developer tools 之前,也要記得把 phalcon.ini 做 symbolic link 在 php cli 目錄內

$ sudo ln -s /etc/php/7.0/mods-available/phalcon.ini /etc/php/7.0/cli/conf.d/30-phalcon.ini

當然 mod_rewrite 跟 volt directory write 的權限還是要開一開
相對來說比下面 php5 + phalcon 2 裝在 16.04 上容易太多了…

另外config alias directory可以寫在 apache2 的 conf-available 目錄內,然後在 conf-enabled 裏頭建立 symbolic link,例如

$ more /etc/apache2/conf-available/phalcon_www.conf 
Alias /store /home/sychen/www/store


    Options FollowSymLinks Indexes
    DirectoryIndex index.php
    Require all granted
    AllowOverride All

$ sudo ln -s /etc/apache2/conf-available/phalcon_www.conf /etc/apache2/conf-enabled/phalcon_www.conf

php 5.6 & phalcon 2.0.x

在 ubuntu 16.04 上安裝 php5.6,如果是用 apt-get 的話,需要指定一下PPA,然後裝的時候要特別小心,要不然裝到 php7 的 package 就很頭痛了

#Add the PPA
$ sudo add-apt-repository ppa:ondrej/php

#Install PHP Version
$ sudo apt-get update
$ sudo apt-get install php5.6

#順便裝裝其他 php module, 建議下面這些都裝, 可以用 dpkg --get-selections | grep php 來看已經裝了甚麼
$ sudo apt-get install php5.6-mbstring php5.6-mcrypt php5.6-mysql php5.6-xml php5.6-dev php5.6-cli php5.6-json

#Verify your version
$sudo php -v

接下來就是把 phalcon 2.0.13 (應該是最後一個 2.0.x 的版本?) 裝在 php 5 的環境裡面,理論上只要

$ sudo apt-add-repository ppa:phalcon/stable
$ sudo apt-get update
$ sudo apt-get install php5-phalcon

但是在 ubuntu 16.04 上,以我自己的經驗會比較建議官方網頁上自己 compile 的方式

#Ubuntu
$ sudo apt-get install php5-dev php5-mysql gcc libpcre3-dev

# Compilation

# 1. To create the extension from C source follow these steps:
$ git clone --depth=1 git://github.com/phalcon/cphalcon.git
$ cd cphalcon/build
$ sudo ./install

# 2. Add the extension to your php.ini:

extension=phalcon.so

但差別是最後面這邊的add extensioin,以自己裝的經驗來看,雖然寫在 php.ini 裏頭,但是居然不會被載入,找了一下前人的經驗,說建議寫到 /etc/php/5.6/mods-available/phalcon.ini 裏頭去。

理論上這樣 phalcon 就可以跑起來了,在 phpinfo() 可以看到類似這樣的東西。
phalcon2_enabled

但是接下來應該還會遇到 apache2 rewrite module跟 volt directory 啟用跟無法寫入的問題。

Mod-Rewrite is not enabled
Please enable rewrite module on your web server to continue

解決方式就是拿 apache2 的 a2enmod 工具把 rewrite module 開起來

$ sudo a2enmod rewrite
$ sudo systemctl restart apache2

至於Volt directory 無法寫入會出現像這樣的畫面

phalcon2_voltdirectorywriteenabled

主要原因是Volt template engine 會將 .volt 頁面先做處理,存放在 ./app/cache/ 裡面,所以是寫入權限的關係,所以要給www-data有適當的權限,最簡單的方式是 chown

$ sudo chown -R www-data:www-data ./app/cache/