1. 程式人生 > >Mac OS X 10.9自帶php-fpm的配置使用和擴充套件安裝

Mac OS X 10.9自帶php-fpm的配置使用和擴充套件安裝

Mac OS X 10.9已經自帶有php-fpm,對於有乾淨系統強迫症的人,或者原裝控來說,用brewhome重灌一遍總感覺心裡會有小兔子,下面把原裝的php-fpm配置起來。

直接執行,有報錯找不到配置檔案。

$ php-fpm

[11-Jan-2014 16:03:03] ERROR: failed to open configuration file '/private/etc/php-fpm.conf': No such file or directory (2)

[11-Jan-2014 16:03:03] ERROR: failed to load configuration file '/private/etc/php-fpm.conf'

[11-Jan-2014 16:03:03] ERROR: FPM initialization failed

可以在/private/etc/ 目錄下生成配置檔案,需要root許可權(sudo)

或者在普通使用者有許可權的目錄裡放置配置檔案,通過--fpm-config引數指定配置檔案的位置,如下:

# cp /private/etc/php-fpm.conf.default /usr/local/etc/php-fpm.conf

$ php-fpm --fpm-config /usr/local/etc/php-fpm.conf

[11-Jan-2014 16:10:49] ERROR: failed to open error_log (/usr/var/log/php-fpm.log): No such file or directory (2)

[11-Jan-2014 16:10:49] ERROR: failed to post process the configuration

[11-Jan-2014 16:10:49] ERROR: FPM initialization failed

錯誤資訊顯示:不能正確的開啟”日誌“檔案,原因是預設在/usr/var目錄下工作,可以修改配置檔案指定正確的日誌檔案路徑

$ vim /usr/local/etc/php-fpm.conf

修改php-fpm.conf檔案中的error_log項,預設字首是/usr/var ,但並沒有這個路徑

error_log = /usr/local/var/log/php-fpm.log

pid = /usr/local/var/run/php-fpm.pid

或者不修改配置檔案中配置項的路徑,在php-fpm的執行引數中(-p)指定放置執行時檔案的相對路徑字首

$ php-fpm --fpm-config /usr/local/etc/php-fpm.conf  --prefix /usr/local/var

到此,php-fpm守護程序已經基本可以正確的啟動了。

下面我們看下php.ini配置檔案及擴充套件的安裝。

首先看下編譯引數,有些值是編譯進執行程式的,無法更改。

$ php -i|grep config

找到配置檔案(php.ini)、目錄的位置,下面兩項的值指定

'--with-config-file-path=/etc'

'--with-config-file-scan-dir=/Library/Server/Web/Config/php'

所以我們需要在/etc目錄下建立php.ini,Mac在/private/etc,/etc下均提供了樣例檔案php.ini.default,通過查驗,兩個檔案完全相同,所以複製哪一個都無所謂,Mac有提供md5而不是Linux下的md5sum:

$ md5 /private/etc/php.ini.default /etc/php.ini.default

MD5 (/private/etc/php.ini.default) = 1c47241665ea5efdc55fd5809f675449

MD5 (/etc/php.ini.default) = 1c47241665ea5efdc55fd5809f675449

/etc目錄許可權root:wheel,需要root許可權或使用sudo,關於如何設定Mac的sudo命令需要的密碼,請檢視

http://support.apple.com/kb/HT4103?viewlocale=zh_CN&locale=zh_CN

http://support.apple.com/kb/PH6515?viewlocale=zh_CN

# cp /etc/php.ini.default  /etc/php.ini

變更own,以後修改不用老是切換root,生產環境最好不要改

# chown <你的使用者名稱> /etc/php.ini

# chmod u+w /etc/php.ini

安裝PHP擴充套件

/Library/Server/Web/Config/php 這個目錄並不存在,或者Mac OS X Server版本有吧,不知道,手動建立他,以root許可權

# mkdir -p /Library/Server/Web/Config/php

編譯擴充套件,brewhome是另起爐灶,brew方式安裝擴充套件需要依賴php,如php54-redis會依賴php54,至於編譯出來的擴充套件是否可以配置到自帶的,沒有實驗過。下面以php_discuz擴充套件(https://github.com/potterhe/php_discuz下載)為例。

假如擴充套件原始碼在/Users/apple/php_discuz目錄

$ ./configure

$ make

擴充套件編譯後,預設會儲存在 /Users/apple/php_discuz/modules/discuz.so

將擴充套件在配置檔案中開啟

$ echo "extension=/Users/apple/php_discuz/modules/discuz.so" > /Library/Server/Web/Config/php/discuz.ini

測試驗證

$ php -i|grep discuz

discuz support => enabled

執行用例測試

php -f /Users/apple/php_discuz/discuz.php

#測試php-fpm配置
php-fpm -t
php-fpm -c /usr/local/etc/php/5.5/php.ini -y /usr/local/etc/php/5.5/php-fpm.conf -t

#啟動php-fpm
php-fpm -D
php-fpm -c /usr/local/etc/php/5.5/php.ini -y /usr/local/etc/php/5.5/php-fpm.conf -D

#關閉php-fpm
kill -INT `cat /usr/local/var/run/php-fpm.pid`

#重啟php-fpm
kill -USR2 `cat /usr/local/var/run/php-fpm.pid`

#也可以用上文提到的brew命令來重啟php-fpm,不過他官方不推薦用這個命令了
brew services restart php55

#還可以用這個命令來啟動php-fpm
launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.php55.plist

啟動php-fpm之後,確保它正常執行監聽9000埠:

lsof -Pni4 | grep LISTEN | grep php
php-fpm   30907 calvin    9u  IPv4 0xf11f9e8e8033a2a7      0t0  TCP 127.0.0.1:9000 (LISTEN)
php-fpm   30917 calvin    0u  IPv4 0xf11f9e8e8033a2a7      0t0  TCP 127.0.0.1:9000 (LISTEN)
php-fpm   30918 calvin    0u  IPv4 0xf11f9e8e8033a2a7      0t0  TCP 127.0.0.1:9000 (LISTEN)
php-fpm   30919 calvin    0u  IPv4 0xf11f9e8e8033a2a7      0t0  TCP 127.0.0.1:9000 (LISTEN)
#正常情況,會看到上面這些程序

PHP-FPM開機啟動:

ln -sfv /usr/local/opt/php55/*.plist ~/Library/LaunchAgents
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.php55.plist

安裝php composer

brew install composer
#檢查一下情況
composer --version
Composer version 1.0.0-alpha8 2014-01-06 18:39:59

redis memcached這些軟體brew 已經自動依賴安裝上,如果想開機自動啟動,或者檢視使用說明 brew info redis即可。另外,composer的中文文件:猛戳這裡

安裝Nginx

brew install nginx --with-http_geoip_module

Nginx啟動關閉命令:

#測試配置是否有語法錯誤
nginx -t

#開啟 nginx
sudo nginx

#重新載入配置|重啟|停止|退出 nginx
nginx -s reload|reopen|stop|quit

#也可以使用Mac的launchctl來啟動|停止
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.nginx.plist
launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.nginx.plist

Nginx開機啟動

ln -sfv /usr/local/opt/nginx/*.plist ~/Library/LaunchAgents
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.nginx.plist

Nginx監聽80埠需要root許可權執行,因此:

sudo chown root:wheel /usr/local/Cellar/nginx/1.6.0_1/bin/nginx
sudo chmod u+s /usr/local/Cellar/nginx/1.6.0_1/bin/nginx