Laravel 所需的 PHP Extension

  • OpenSSL PHP Extension
  • PDO PHP Extension
  • Mbstring PHP Extension
  • Tokenizer PHP Extension

尚未開啟前,顯示以下錯誤訊息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
-> # composer install
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Your requirements could not be resolved to an installable set of packages.
Problem 1
- Installation request for laravel/framework v5.3.21 -> satisfiable by laravel/framework[v5.3.21].
- laravel/framework v5.3.21 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
Problem 2
- Installation request for phpunit/phpunit 5.6.2 -> satisfiable by phpunit/phpunit[5.6.2].
- phpunit/phpunit 5.6.2 requires ext-dom * -> the requested PHP extension dom is missing from your system.
To enable extensions, verify that they are enabled in those .ini files:
- /etc/php.ini
- /etc/php.d/bz2.ini
- /etc/php.d/calendar.ini
- /etc/php.d/ctype.ini
- /etc/php.d/curl.ini
- /etc/php.d/exif.ini
- /etc/php.d/fileinfo.ini
- /etc/php.d/ftp.ini
- /etc/php.d/gettext.ini
- /etc/php.d/gmp.ini
- /etc/php.d/iconv.ini
- /etc/php.d/json.ini
- /etc/php.d/opcache.ini
- /etc/php.d/phar.ini
- /etc/php.d/shmop.ini
- /etc/php.d/simplexml.ini
- /etc/php.d/sockets.ini
- /etc/php.d/tokenizer.ini
- /etc/php.d/xml.ini
- /etc/php.d/zip.ini
You can also run `php --ini` inside terminal to see which files are used by PHP in CLI mode.

檢視目前開啟的 PHP Configuration File

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$ php --ini
Configuration File (php.ini) Path: /etc
Loaded Configuration File: /etc/php.ini
Scan for additional .ini files in: /etc/php.d
Additional .ini files parsed: /etc/php.d/bz2.ini,
/etc/php.d/calendar.ini,
/etc/php.d/ctype.ini,
/etc/php.d/curl.ini,
/etc/php.d/exif.ini,
/etc/php.d/fileinfo.ini,
/etc/php.d/ftp.ini,
/etc/php.d/gettext.ini,
/etc/php.d/gmp.ini,
/etc/php.d/iconv.ini,
/etc/php.d/json.ini,
/etc/php.d/opcache.ini,
/etc/php.d/phar.ini,
/etc/php.d/shmop.ini,
/etc/php.d/simplexml.ini,
/etc/php.d/sockets.ini,
/etc/php.d/tokenizer.ini,
/etc/php.d/xml.ini,
/etc/php.d/zip.ini

設定 php.ini

Loaded Configuration File: /etc/php.ini

根據 Problem 1 描述,需要安裝 ext-mbstring

可先檢查目前裝了哪些 PHP 的 Modules (檢視後的確沒有 ext-mbstring 這個模組)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
-> # php -m
[PHP Modules]
bz2
calendar
Core
ctype
curl
date
exif
fileinfo
filter
ftp
gettext
gmp
hash
iconv
json
libxml
openssl
pcntl
pcre
Phar
readline
Reflection
session
shmop
SimpleXML
sockets
SPL
standard
tokenizer
xml
Zend OPcache
zip
zlib
[Zend Modules]
Zend OPcache

開始安裝 php-mbstring

1
$ yum install php-mbstring

錯誤訊息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
-> # yum install php-mbstring
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: download.nus.edu.sg
* epel: epel.mirror.angkasa.id
* extras: mirror.0x.sg
* ius: mirrors.ircam.fr
* remi-safe: mirror.innosol.asia
* updates: download.nus.edu.sg
* webtatic: uk.repo.webtatic.com
Resolving Dependencies
--> Running transaction check
---> Package php-mbstring.x86_64 0:5.4.16-36.3.el7_2 will be installed
--> Processing Dependency: php-common(x86-64) = 5.4.16-36.3.el7_2 for package: php-mbstring-5.4.16-36.3.el7_2.x86_64
--> Running transaction check
---> Package php-common.x86_64 0:5.4.16-36.3.el7_2 will be installed
--> Processing Conflict: php70w-common-7.0.12-1.w7.x86_64 conflicts php-common < 7.0
--> Finished Dependency Resolution
Error: php70w-common conflicts with php-common-5.4.16-36.3.el7_2.x86_64
You could try using --skip-broken to work around the problem
You could try running: rpm -Va --nofiles --nodigest

可能原因:

  • php-common 使用的是 5.4
  • 需要安裝 php-mbstring for php7

使用 yum search 檢查有哪些版本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
-> # yum search php-mbstring
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: download.nus.edu.sg
* epel: epel.mirror.angkasa.id
* extras: mirror.0x.sg
* ius: syd.mirror.rackspace.com
* remi-safe: mirrors.thzhost.com
* updates: download.nus.edu.sg
* webtatic: uk.repo.webtatic.com
======================================================================================== N/S matched: php-mbstring ========================================================================================
php-mbstring.x86_64 : A module for PHP applications which need multi-byte string handling
php56-php-mbstring.x86_64 : A module for PHP applications which need multi-byte string handling
php70-php-mbstring.x86_64 : A module for PHP applications which need multi-byte string handling
php71-php-mbstring.x86_64 : A module for PHP applications which need multi-byte string handling
Name and summary matches only, use "search all" for everything.

安裝 php70-php-mbstring.x86_64
-> # yum install php70-php-mbstring.x86_64

不論是重新編譯或者安裝 php-mbstring 套件, 完成後都要重新啟動 HTTPD 伺服器才會生效。

重新啟動
-> # service httpd restart

yum 用法整理:
http://www.vixual.net/blog/archives/101

補充:在 Apache、Nginx 上面運行 PHP

Apache 需要安裝 mod_php 這個 Apache module
Nginx 需要安裝 PHP-FPM 來運行 PHP code

當開發 Elixir 的環境都建置好了,除了可以在 terminal 輸入 iex 開啟 Interactive mode 來測試開發之外,此時更值得我們花點時間來挑選一個順手的編輯器,有聰明的語法自動補齊(Autocomplete)、Syntax Highlighting 等等功能,可以讓你開發起來更加行雲流水喔!

這裡推薦 3款 Elixir 的開發工具:Sublime Text、IntelliJ、Vim。

請見以下於公司內部分享的簡報:

Elixir 好用的編輯器 from bobo52310

緣起:

最近因為新工作環境要使用 Elixir 來開發一個新專案,而我從未接觸過這門程式語言,且新專案的時程相當趕,預計只有一個月的時間…需要我從完全新手到開發完成這個專案… 這實在是相當大的挑戰!

不過既然挑戰出現了,就勇敢的面對它吧!同時聽到主管說他學習一門新的程式語言竟然只花了3天,我的資質駑鈍不如他,那麼多花個6天、9天也許有機會一窺這個新玩意兒,也只能如此安慰勉勵自己 XD

另外聽說藉由專案驅動學習是最有效率的…(特別是這種死線緊湊的效果應該又更好 @_@)

-

由於今天賺到一天颱風假,趕緊花一個下午快速認識一下 Elixir 這個語言,發現中文的文件好少喔,邊學的同時也隨手整理了一下,分享給大家,以下的資訊有助於我快速入門,希望也有幫助有緣路過的你/妳~

既然中文資料還不多,我就來貢獻一篇吧!

Elixir 是啥玩意兒?

沒聽過是很正常的,目前 Elixir 相關的中文的討論還不多,這門程式語言在台灣還不算很流行,周遭的朋友也都沒聽說有人在玩,反而是我在英國工作的同學說他們公司有在使用!這是我身邊少數聽到有在使用這個語言的公司。話說我們公司也只有 CTO 本人有寫過…

簡單來說 Elixir 是架構一個在古老語言(Erlang)上面的一個年輕語言,特色簡介如下:

  • 2013年誕生,相當年輕的程式語言。
  • Functional programming 可讀性高,也更好維護。
  • 基於 Erlang VM(BEAM)之上,完全與 Erlang 語言相容,但是語法更親民且並提供更多的功能。
  • 語法類似 Ruby,因為 Elixir 的創造者 José Valim(葡萄牙文,巴西人) 他也是 Ruby on Rails 的核心團隊成員!難怪有不少 Ruby 的開發者跑來學。
  • 來多認識一點 Elixir 老爸 「An Interview with Elixir Creator José Valim」
  • 有接近 Ruby 易懂的語法和 Erlang 分散式高效能,可算是 RubyErlang 兩個生出來的小孩。
  • 偏向動態強型別語言 (變數型別不會在運算中自動轉型) 如同 RubyPython 這類動態強型別語言。相較於 PHPJavaScript 這類語言則是偏向動態弱型別 (自動轉型)
  • 善於處理 concurrency 問題,利於開發分散式/雲端運算平台。
  • Elixir provides a macro system and polymorphism via protocols, both aiming to make the language more extensible
  • 開發 Web 可以搭配 Phoenix Framework (也是 MVC 架構)

Elixir 值得學嗎?

新技術、新語言那麼多!什麼都想學,有這麼多時間嗎?學得完嗎?

我們該如何評估一門技術是否值得投入寶貴的時間去學習呢?

就像我當年回「大安高工資訊科」和學弟妹分享的簡報:「軟體工程師的3大試煉」,我們可以使用一些工具來評估一門技術目前是否流行,是否值得投入學習。

  • 比如我們用 Google Trends 來檢視看看 Elixir 趨勢
  • 2015 年在 Hacker News 有一些討論,開始被比較多人關注。
  • 台灣社群約莫在 2016 年初開始關注,Facebook 社團「Elixir Taiwan」也是約莫在此時成立。
  • 國內外社群逐漸活躍,生態圈越來越豐富,有一種當年接觸早期 Laravel Framework 整要起步的感覺。

不過說實在的講這麼多,凡是專案要用到的、主管要你用的,你就認命乖乖學吧~ 哈哈

有哪些公司使用 Elixir?

  • Pinterest [ref]
    • 運用在「通知系統」一秒可以傳送 14,000 筆訊息,只需要15台主機。原本用 JAVA 的舊架構則需要 30台主機。而且程式碼檔案大小僅有原本的 1/10 唷!
      (Pinterest’s notification system now uses Elixir to deliver 14,000 notifications per second)
    • 核心 API 也用 Elixir 改寫,運行速度比 Memcached-based predecessor 的反應時間還要更快速。
      (The rate-limiting system for Pinterest’s core application programming interface (API) and Ads API is also now written in Elixir, providing faster response times than its Memcached-based predecessor.)
  • Brightcove [ref]
    • 使用 Phoenix Framework。讓登入後台的使用者可以關注特定轉檔、修改影片等等事件,並且在完成時通知使用者。
  • WhatsApp
  • Whisper
    • 使用 Phoenix Framework。

更多名單請見:doomspork/elixir-companies

有哪些專案使用 Elixir 開發

  • Elixometer // Logging library 由 Pinterest 開發釋出
  • riffed // Provides idiomatic Elixir bindings for Apache Thrift 由 Pinterest 開發釋出

推薦的 Elixir 相關書籍

推薦的 Elixir 線上教學資源

補充一下 Erlang 語言:

  • 1987 年誕生的老語言,由 Ericsson 開發。早期主要應用在電信業系統,經長年證實其穩定性超高。
  • Erlang 老爸 Joe Armstrong 當年的論文中譯版
  • Erlang 老爸也對 Elixir 讚譽有嘉。
  • 主要的特色是 COP(Concurrency-oriented programming, 平行導向程式設計) 強調程式的容錯處理。
  • Facebook Chat 就是用 Erlang 開發