安装PHP依赖:
# sudo -s
# LANG=C
# yum -y install gcc automake autoconflibtool make
# yum -y install gccgcc-c++glibc
# yum -y install libmcrypt-devel mhash-devel libxslt-devel \
libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel \
zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel \
ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel \
krb5 krb5-devel libidn libidn-devel openssl openssl-devel
yum install -y libpng*
yum install -y libjpeg*
yum install -y libXpm*
yum install -y freetype*
yum install -y zlib*
安装PHP
# wget http://cn2.php.net/distributions/php-5.4.7.tar.gz
tar zvxf php-5.4.7.tar.gz
cd php-5.4.7
# ./configure --prefix=/usr/local/php --enable-fpm --with-mcrypt \
--enable-mbstring --with-curl --with-mysql --with-mysqli --enable-pdo=shared --with-pdo-mysql=shared, /usr/local/mysql \
--enable-inline-optimization --with-bz2 --enable-sockets \
--enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex \
--with-mhash --enable-zip --with-pcre-regex\
--with-gd --enable-gd-native-ttf --with-png-dir=/usr/lib64/ --with-zlib-dir=/lib64/ --with-ttf \
--with-jpeg-dir=/usr/lib64/ --with-freetype-dir=/usr/lib64/ --with-xpm-dir=/usr/lib64/ \
# make
# make install
php配置文件(php解压包源码目录中进行复制)
# cp php.ini-development /usr/local/php/lib/php.ini
打开 php.ini:
vim /usr/local/php/lib/php.ini
cgi.fix_pathinfo=0 date.timezone = Asia/Shanghai
mysql.default_socket = /tmp/mysqld.sock pdo_mysql.default_socket= /tmp/mysqld.sock mysqli.default_socket =/tmp/mysqld.sock 注意修改了php配置文件后,php-fpm进程需要重新加载配置文件或者重启一下。 /tmp/mysqld.sock是mysql启动后的sock文件路径.
如果www用户不存在,创建www用户。
[root@iZ286pkhut4Z src]# groupadd www
[root@iZ286pkhut4Z src]# useradd -g www www
创建php-fpm配置文件(php-fpm是fastcgi主进程,可以启动和管理多个php-cgi子进程)
(fastcgi模型是由一个主进程和多个子进程构成,这个主进程进行管理这些子进程)
[root@iZ286pkhut4Z src]# cd
/
usr
/
local
/php
[root@iZ286pkhut4Z php]# cp etc/php-fpm.conf.default etc/php-fpm.conf
[root@iZ286pkhut4Z php]# vi etc/php-fpm.conf
user = www
group = www
listen = 127.0.0.1:9000
编辑配置文件php-fpm.conf
,只需修改上述三个指令,然后保存。
把php安装目录的权限设置成www用户和用户组:
# chmod u+w /usr/local/php
# chown -R www:www /usr/local/php
php-fpm 如何关闭 重启?
php-fpm 启动:
[root@iZ286pkhut4Z php]# ./sbin/php-fpm
[root@iZ286pkhut4Z php]# ps -ef | grep php-fpm
root 21100 1 0 13:04 ? 00:00:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
www 21101 21100 0 13:04 ? 00:00:00 php-fpm: pool www
www 21102 21100 0 13:04 ? 00:00:00 php-fpm: pool www
php-fpm 关闭:
kill -INT 21100
php-fpm 重启:
kill -USR2 21100
php安装完毕,下面是nginx中的fast-cgi配置
--------------------------------------------------------------------------------------------------------------------------------------------
nginx安装方式,自己打开链接看看。
在nginx安装完毕后:
(1) 创建一个供www.domain.com虚拟主机使用的目录:
[root@iZ286pkhut4Z src]# mkdir -p /data0/htdocs/www
[root@iZ286pkhut4Z src]# chmod +w /data0/htdocs/www
[root@iZ286pkhut4Z src]# chown -R www:www /data0/htdocs/www
(2)在/data0/htdocs/www目录下安装thinkphp3.2.2框架
#cd /data0/htdocs/www
# wget https://github.com/liu21st/thinkphp/archive/master.zip
解压缩thinkphp3.2.2
# unzip thinkphp-master.zip
# cd thinkphp-master
解压文件全部移动到www目录下
# mv * ../
# cd ..
删除这个空目录
# rm -rf think-master
更改thinkphp框架文件的user为www用户
# chown -R www:www /data0/htdocs/www/*
# ls
Application composer.json index.php Public README.md ThinkPHP
这样就安装好thinkphp框架了.
(3)配置thinkphp的URL模式为1pathinfo模式
# vim /data0/htdocs/www/ThinkPHP/Conf/convention.php
修改URL_MODEL => 1
(4)nginx配置文件修改
# vim /usr/local/nginx/conf/nginx.conf
user www;
worker_processes 2;
error_log logs/error.log;
pid logs/nginx.pid;
worker_rlimit_nofile 65535;
events {
use epoll;
worker_connections 65535;
}
http {
include mime.types;
default_type application/octet-stream server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 8m;
sendfile on;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
keepalive_timeout 65;
tcp_nopush on;
tcp_nodelay on;
#fastcgi
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
#gzip on;
server {
listen 80;
server_name www.domain.com domain.com;
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
# \.php 只处理动态请求,对于静态资源请求由下面的 location匹配和处理
location ~ \.php {
root /data0/htdocs/www;
fastcgi_pass 127.0.0.1:9000;
#包含nginx服务器传递给fastcgi程序的参数,php中通过$_SERVER['参数名']可获取
include fastcgi.conf;
#定义变量$fastcgi_script_name_new赋值为$fastcgi_script_name变量
set $path_info "";
set $fastcgi_script_name_new $fastcgi_script_name;
#判断url是否是pathinfo形式的,如果是则把这个url分割成两部分,index.php入口文件之后的pathinfo部分存入$path_info变量中,剩下的部分和$document_root根目录定位index.php入口文件在文件系统中的绝对路径 .
if ($fastcgi_script_name ~* "^(.+\.php)(/.+)$" ) {
set $fastcgi_script_name_new $1;
set $path_info $2;
}
#对fastcgi.conf中的SCRIPT_FILENAME和SCRIPT_NAME fastcgi参数进行重写,目的是指定入口文件在文件系统中的绝对路径给script_filename参数,让fastcgi知道index.php文件位置。
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name_new;
fastcgi_param SCRIPT_NAME $fastcgi_script_name_new;
#定义一个新的nginx服务器传递给fastcgi的参数PATH_INFO,thinkphp需要这个入口文件index.php后的pathinfo信息
fastcgi_param PATH_INFO $path_info;
}
# 用来匹配静态资源,如果不是静态资源就重写,然后重新轮训所有的location块,由上面的location块匹配后动态处理这个请求
location / {
root /data0/htdocs/www;
index index.php index.html index.htm;
if (!-e $request_filename){
rewrite ^(.*)$ /index.php$1 last;
}
}
}
}
上述就是nginx配置文件
,
(4)在/data0/htdocs/www目录下加入404.html文件和50x.html文件,因为在nginx.conf配置文件中配置了这两个文件。
(5)启动php-fpm和nginx
# /usr/local/php/sbin/php-fpm
# /usr/local/nginx/sbin/nginx
(6)测试nginx和thinkphp是否搭配好了。
在浏览器中输入 www.domain.com, 会显示如下内容:
:)
欢迎使用 ThinkPHP!
[ 您现在访问的是Home模块的Index控制器 ]
(7) 让thinkphp能够连接数据库
1. 没有安装PDO扩展时,thinkphp需要这个扩展 。
PDO安装错误:configure: error: Cannot find php_pdo_driver.h.
安装pdo_mysql必须先安装pdo模块,先装pdo模块吧
cd php5.4/ext/pdo/
/usr/local/webserver/php/bin/phpize
./configure --with-php-config=/usr/local/webserver/php/bin/php-config --enable-pdo=shared
make &&make install
cd php5.4/ext/pdo_mysql/
/usr/local/webserver/php/bin/phpize
./configure --with-php-config=/usr/local/webserver/php/bin/php-config --with-pdo-mysql=/data/mysql/bin/mysql_config
make &&make install
编译成功后会看到php安装目录下出现了扩展模块的目录
交以下几行添加至php/lib/php.ini 文件上
extension_dir = "/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20100525/"
extension=pdo.so
extension=pdo_mysql.so
2. 重启php-fpm和nginx一下
下面是PHP 加速插件 Zend Opcache安装和配置
------------------------------------------------------------------
以下zend opcache安装和配置转载自:http://www.laogui.com/Zend-Opcache
大家知道目前PHP的缓存插件一般有三个: APC、 eAccelerator、 XCache,但未来它们可能都会消失,因为PHP 5.5已经集成 Zend Opcache,功能和前三者相似但又有少许不同,缓存速度据说比它们更快(注意:只是据说,我没测试过)。
这几个PHP加速插件的主要原理都相同,就是把PHP执行后的数据缓冲到内存中从而避免重复的编译过程,能够直接使用缓冲区已编译的代码从而提高速度,降低服务器负载,它们的效率是显而易见的,像drupal这种庞大的CMS,每次打开一个页面要调用数十个PHP文件,执行数万行代码,效率可想而知,在安装APC等加速器后打开页面的速度明显加快。
Zend Opcache 已经集成在了PHP 5.5里面,编译安装PHP5.5的时候加上--enable-opcache就行了。但也支持低版本的 PHP 5.2.*, 5.3.*, 5.4.*,未来会取消对5.2的支持,下面是我在PHP 5.4下的安装方法:
依次执行下面的命令
wget http://pecl.php.net/get/zendopcache-7.0.2.tgz
tar xzf zendopcache-7.0.2.tgz
cd zendopcache-7.0.2
phpize
如果找不到phpize 的话自己找PHP路径,我的在/usr/local/php/bin/phpize,下面这行也要按你的php.ini路径自行修改
./configure --with-php-config=/usr/local/php/bin/php-config
make
make install
如果显示Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-zts-20100525/ 表示安装完成,下面要修改php的配置文件让它生效
在 php.ini 的最后面加入下面几行
zend_extension=/usr/local/php/lib/php/extensions/no-debug-zts-20100525/opcache.so
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1
128意思是给它分配128M内存,
重启nginx服务器和php-fpm 管理器, 然后在nginx服务器根目录下新建test.php文件,
文件内容为:
在浏览器输入localhost/test.php 可以看到如下画面:
页面的下面可以看到的运行状态
如果嫌这个不直观可以装个PHP文件查看,地址在 https://gist.github.com/ck-on/4959032,把上面的代码保存为一个php文件放到你的网站目录下面打开就可以看到:
命中率100%。
Zend Opcache因为最近才出来,现在还是测试版,相信在未来几年会越来越流行,现在真没多少人用。目前测试来看还比较稳定,我已经在 vbulletin论坛下运行了几天,不过没看出和APC、xcache有啥区别,只是最近我的APC老让apache崩溃(可能是apache和php版本太新的原因),想换个试试,毕竟Zend Opcache和APC都是php官方的,值得信赖。