工作好几年,一直做java,一直没玩过php,现在公司要搞个商城,小公司没精力重新开发,准备买个别人的,做二次开发。人家的是php,没办法,就叫我先把他们的项目跑起来。
先吐槽一下,国内这些做产品的真的太他妈水了,php也水。php没有向后兼容,基本算是完全固定版本。这个做产品的也不说要什么样的版本,版本太高报错,版本太低也报错
,本人外行,以为像java,弄个比较新的版本总没问题。遇到的种种问题就不详细说了,大概说下经过。
1、确定php版本
先安装的是5.5,各种报错,同事的5.4没问题,确定用5.4。
2、安装http服务
因为服务器已安装nginx,所以直接用ngxin,不用apache httpd。这里要说下,apache和nginx运行php的原理是不一样的。apache是直接加载php模块自己解析php脚本,nginx是转发,接收到php请求就把请求转发到php-fpm,所以nginx下一定要有php-fpm。还有就是比较老的php是没有这个程序的,需要自己去下载
3、安装php
主要是要注意一些选项
./configure --enable-fpm --with-mysql --prefix=/usr/local/php-5.4.45
--enable-fpm:启用php-fpm
--with-mysql:应该是安装mysql模块
3、修改php-fpm配置文件--prefix:安装目录,最好指定,不然要卸载只能一个一个去删了其他一些参数--with-libdir=lib64:设置系统lib目录,之前安装5.1的版本,默认的lib目录是lib而不是lib64,导致不能安装,5.4没发现此问题
cp ~/php-5.4.45/php.ini-production /usr/local/php-5.4.45/lib/php.ini
/usr/local/php-5.4.45/lib/php.ini这个就是php程序的配置文件,默认请求下php的配置文件放在安装目录的lib下
cd /usr/local/php-5.4.45/
cp etc/php-fpm.conf.default etc/php-fpm.conf
vi etc/php-fpm.conf
; Unix user/group of processes ; Note: The user is mandatory. If the group is not set, the default user's group ; will be used. user = www-data group = www-data
将user和group改为要运行php-fpm的用户和组,这个必须是已存在的用户,如果不存在会报错,创建用户useradd -M -r -s /sbin/nologin www-data
启动
sbin/php-fpm
4、配置nginx,取消默认的 PHP 配置块的注释,并修改为下面的内容
location / {
#proxy_pass http://localhost;
root /var/www;
index index.html index.htm index.php;
}
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;
}
/var/www/这个目录其实是apache httpd网页的默认目录,nginx的默认网页目录不是这个,这个可以是其他的
重启nginx
5、测试
创建一个测试文件放到/var/www/目录下
echo "<?php phpinfo(); ?>" >> /var/www//index.php
新手最好创建这个文件,这个页面可以提供php的很多信息,打开浏览器访问localhost/index.php就可以看到php的系统信息了。
因为我的nginx之前拿来做负载均衡,用了upstream模块功能,localhost的所有请求都被转发到其他地方了,所以这个页面不能打开,删除nginx的相关配置就可以了
6、安装其他的php项目
把其他的php项目复制到/var/www/目录,php项目一般都带有应用的初始化功能,这个过程遇到两个问题,记录下
1)系统时区问题,修改php.ini的date.timezone =Asia/Shanghai,但是php.ini文件在哪呢?默认是在安装目录的lib下,我的是在/usr/local/php-5.4.45/lib下,这个目录下可能没有php.ini文件,如果前面没有执行拷贝php.ini操作的话。如果没有就要从源码拷贝一个预先设置的php.ini文件到此目录。也有可能php程序读的配置文件不在这个目录下,这样我们在这里修改php.ini就没有作用了,如何确定配置文件的目录呢?我们建立的测试文件就有大用处了,访问index.php页面,找到
Configuration File (php.ini) Path | /usr/local/php-5.4.45/lib |
[root@VM_211_154_centos ~]# ps -ef|grep fpm
root 7404 2563 0 13:10 pts/1 00:00:00 vi /usr/local/php-5.4.45/etc/php-fpm.conf
root 10607 1 0 14:10 ? 00:00:00 php-fpm: master process (/usr/local/php-5.4.45/etc/php-fpm.conf)
www-data 10609 10607 0 14:10 ? 00:00:14 php-fpm: pool www
www-data 10924 10607 0 14:23 ? 00:00:12 php-fpm: pool www
www-data 11462 10607 0 14:31 ? 00:00:09 php-fpm: pool www
root 13390 7421 0 15:25 pts/0 00:00:00 grep fpm
[root@VM_211_154_centos ~]#
这个php-fpm: master process就是主进程
kill -9 10607
/usr/local/php-5.4.45/sbin/php-fpm
2)扩展库问题
我的这个项目要求curl扩展库,但我没安装,所以要新增curl扩展库。
确保系统已安装curl,从源码编译curl扩展库
cd ~/php-5.4.45/ext/curl/
/usr/local/php-5.4.45/bin/phpize
./configure --with-curl --with-php-config=/usr/local/php-5.4.45/bin/php-config
make
phpize是用来扩展php扩展模块的,具体的不太了解。编译好后会在curl下产生modules/curl.so,我们要把这个共享库放到php的扩展文件夹里,问题又来了,扩展文件夹在哪呢?在php.ini中extension_dir所指的目录就是。但是php.ini中可能没有配置这个(我的就没有),访问index.php页面看看
extension_dir | /usr/local/php-5.4.45/lib/php/extensions/no-debug-non-zts-20100525 | /usr/local/php-5.4.45/lib/php/extensions/no-debug-non-zts-20100525 |
我的是在这个目录下,而且还没有这个目录,需要自己新建。
mkdir -p /usr/local/php-5.4.45/lib/php/extensions/no-debug-non-zts-20100525
把刚才编译好的扩展模块放到这里
mv ~/php-5.4.45/ext/curl/modules/curl.so /usr/local/php-5.4.45/lib/php/extensions/no-debug-non-zts-20100525/
重启php-fpm
搞了两天终于搞好了