所见非所得,历练见真知
最近要代码迁移,TP框架要求PHP版本5.6,老板大方的给了一台1核2G服务器并大气的说,“拿去,随便玩”。我也是一口吃下了老板给的大度。
说正题,这服务器里面内容挺全,nginx1.10,php5.4,mysql 5.6,redis 3.2,。其他的与项目无关的我就不多说了。其他的大致能满足,就是PHP版本低了些。我选择了重装了。
随便找个路径下载软件 mkdir soft
cd soft
wget http://am1.php.net/distributions/php-5.6.40.tar.g
tar -zxvf php-5.6.40.tar.gz
cd php-5.6.40
./configure --prefix=/usr/local/php --with-curl=/usr/local/curl --with-freetype-dir --with-gd --with-gettext --with-iconv-dir --with-kerberos --with-libdir=lib64 --with-libxml-dir --with-mysqli --with-openssl --with-pcre-regex --with-pdo-mysql --with-pdo-sqlite --with-pear --with-png-dir --with-xmlrpc --with-xsl --with-zlib --enable-fpm --enable-bcmath --enable-libxml --enable-inline-optimization --enable-mbregex --enable-mbstring --enable-opcache --enable-pcntl --enable-shmop --enable-soap --enable-sockets --enable-sysvsem --enable-xml --enable-zip
make && make install
我以为很成功,没想到来了个芭比Q。
既来之则安之。一顿百度猛如虎,得来全部是痛苦
大部分说在Makefile找到 EXTRA_LIBS 行,在行末添加 ‘ -llber ‘ 保存退出再次make即可,可能不同症状吧,我是没成功,呵呵~
那就换一种!
php 5.5 collect2: ld returned 1 exit status - 陈俊武 - 博客园
这种靠谱点,口味对上了,
建立软链接
ln -s /usr/local/lib/libiconv.so.2 /usr/lib64/
make ZEND_EXTRA_LIBS='-liconv'
make install
天灵灵,地灵灵~ 等待菊花开。
一切顺利,开始配置工作
配置php
php.ini-production拥有较高的安全性设定,适合服务器上线运营当产品。一般修改php.ini-production为php.ini
cp php.ini-production /usr/local/php/etc/php.ini
创建php-fpm.conf文件
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
网上还有一个www.conf,我是没找到,那就先不搞了。
好赖弄个自启动吧,毕竟要装的像一点
设置开机自动启动
vim /lib/systemd/system/php-fpm.service
[Unit]
Description=The PHP FastCGI Process Manager
After=syslog.target network.target
[Service]
Type=simple
PIDFile=/run/php-fpm.pid
ExecStart=/usr/local/php/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php/etc/php-fpm.conf
ExecReload=/bin/kill -USR2 MAINPIDExecStop=/bin/kill−SIGINTMAINPID
[Install]
WantedBy=multi-user.target
开启开机自动启动:
systemctl enable php-fpm.service
来,给各位大爷启动一下
service php-fpm restart
ps -ef | grep php
不错,味道好极了,可是还没结束
php -v
还是5.4版本,额。。。。。幻觉?双版本?
应该是双版本,但我喜欢看到的是5.6,古人云,凡事不求人,遇事找度娘。
她说修改profile配置文件,可以么?
好的~
export PATH=$PATH:$HOME/bin:/usr/local/php/bin
source /etc/profile
执行 php -v,不行喔
她说,那重启下服务器?我:..... 听你的。
重启服务器命令:shutdown -r now (反正老板说随便玩)
重启后, php -v 还是5.4!!!
她说,要不重启下httpd.
service httpd restart
唉,不想看结果。。。
她不死心,把原来版本位置文件删了!
cd /usr/bin/
rm -fr ./php
rm -fr ./php-cgi
rm -fr phpize
php -v 果然有韧性!666
接下来就是运行项目了
配置域名、项目路径,访问了html 后缀文件,可以访问,但是,访问.php后缀的文件出现
心态崩了啊!
网站中的静态页面 *.html 都能正常访问,而 *.php 文件虽然会返回200状态码, 但实际输出给浏览器的页面内容却是空白。
原因是nginx无法正确的将 *.php 文件的地址传递给php-fpm去解析, 相当于php-fpm接受到了请求,但这请求却指向一个不存在的文件,于是返回空结果。
需要改动下配置文件fastcgi_params:
添加两行:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
不放心,重启下nginx
service nginx restart
终于可以访问了。
剩下的工作其实还没完
后续的出现了以下问题:
1、 thinkphp无法找到模块
解决:
include pathinfo.conf
pathinfo.conf内容:
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
set $path_info $fastcgi_path_info;
fastcgi_param PATH_INFO $path_info;
try_files $fastcgi_script_name =404;
再添加以下内容:
location ~ \.php { # 原来有个$符号的,度娘说不能有,就删了。
#root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /var/www/html/tanchishe/public$fastcgi_script_name;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
2、启动phpinfo查看发现少了php.ini路径
解决:
strace /usr/local/php7/sbin/php-fpm -i 2>1.log
把/usr/local/php/etc/php.ini 复制到/usr/local/php/lib/
或者直接写个软连接:
ln -s /etc/php.ini /usr/local/php/lib/php.ini
重启下php-fpm
完成!