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
Nginx访问PHP文件的File not found错误处理,两种状况
这个错误很常见,原有有下面两种几种
1. php-fpm找不到SCRIPT_FILENAME里执行的php文件
2. php-fpm不能访问所执行的php,也就是权限问题
第一种状况
能够在你的location php 里面添加当文件不存在时返回404而不是交给php-fpm进行处理
location ~ \.php$
{
...
#文件不存在转404
try_files $uri = 404;
...
}
而后,在你的配置文件中找到下面这段
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
而后从新加载nginx配置文件
systemctl restart nginx
第二种状况
两种解决方法:
第一种,就是把你root文件夹设为其余用户容许
第二种,找到你的php-fpm的配置文件,找到下面这段,把apache替换成你要的用户组
; RPM: apache Choosed to be able to access some dir as httpd
user = apache
; RPM: Keep a group allowed to write in log dir.
group = apache
不积跬步,无以致千里;