以往都是使用 lnmp 一键安装包,进行开发环境的搭建,这两天自己手动编译安装php、nginx使其能成功打印出
代码语言:javascript复制hello world
Let's go:
nginx 安装 (FYI)
1. vi /etc/yum.rep [nginx]name=nginx repobaseurl=http://nginx.org/packages/centos/releasever/basearch/gpgcheck=0enabled=1 3. yum -y install nginx
php 安装 (FYI官方安装)
0. yum install libpng-devel libjpeg-devel libcurl-devel freetype-devel libxml2-devel -y 1. 错误:configure: error: mcrypt.h not found. Please reinstall libmcrypt. 解决方法: wget ftp://mcrypt.hellug.gr/pub/crypto/mcrypt/libmcrypt/libmcrypt-2.5.7.tar.gz tar zxf libmcrypt-2.5.7.tar.gz cd libmcrypt-2.5.7 ./configure make && make install 2. 错误:checking for known struct flock definition... configure: error: Don't know how to define struct flock on this system, set --enable-opcache=no 解决办法: vim /etc/ld.so.conf.d/local.conf /usr/local/lib :wq ldconfig -v 3. wget http://cn2.php.net/distributions/php-5.6.23.tar.bz2 4. tar -jxvf php-5.6.23.tar.bz2 5../configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-fpm-user=www --with-fpm-group=www --enable-fpm --enable-opcache --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --disable-fileinfo --with-iconv-dir=/usr/local --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-exif --enable-sysvsem --with-curl --enable-mbregex --enable-inline-optimization --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-ftp --with-gettext --enable-zip --enable-soap --disable-ipv6 --disable-debug 6.make && make install
编写Nginx和PHP-FPM的启动、重启、停止脚本 (FYI)
根据FYI步骤一步一步配就行了,注意其中需要在 php-fpm.conf 中开启 xxx.pid 配置
server 相关配置
代码语言:javascript复制server {
listen 80;
server_name localhost;
#charset utf-8;
#access_log /var/log/nginx/log/host.access.log main;
root /vagrant/test;
index index.php;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ .php$ {
fastcgi_index index.php;
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
#fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}
}
总结:
- 通过自己编译配置开发环境,可以进一步理解 php 及其相关如 php-fpm、nginx 的工作流程
- 强化 Linux 的使用,如 useradd、groupadd、sudo netstat -anp、ps -ef、groups [user]、tar 等等
- 配置期间遇到一个 No input file specified. 的问题,经 google、baidu 后,主要是 server 配置的问题,需要把 root 和 index 那两行从 location / 中拿到外部出来就行正常使用,关于这个原因是为什么,我现在还是不太理解,我请求的是 127.0.0.1:80 理应能匹配到 location / ,为何会有问题呢?希望知情同学给予解答。
附录:
如何在编译好的PHP环境中安装PHP扩展模块
1、先进入php解压缩后的源码包中,找到要安装的扩展模块的目录。 [root@redhat5 sockets]# cd /home/soft/php-5.2.12/ext/sockets 在sockets目录下面以绝对路径运行phpize程序,这时会自动生成sockets的configure程序,在sockets目录下面可以看到。 [root@redhat5 sockets]# /home/webserver/php5.2.12/bin/phpize 2、进行编译安装 [root@redhat5 sockets]# ./configure --with-php-config=/home/webserver/php5.2.12/bin/php-config [root@redhat5 sockets]#make [root@redhat5 sockets]#make install 执行完make install屏幕上会提示sockets.so存放的路径,然后把它复制到php的extensions目录中,例如我的路径为 /home/webserver/php5.2.12/lib/php/extensions 3、修改php.ini文件 找到extension_dir = "./" 这行,修改为: extension_dir = "/home/webserver/php5.2.12/lib/php/extensions/" 然后再新增加一行: extension=sockets.so 4、重启web服务器(apache/nginx)即可生效。