CentOS下Apache+PHP+MySQL不能登录页面
在CentOS 5.4 64位系统上,通过源码包httpd 2.2.17+php 5.2.17+mysql 5.1.59搭建了一个LAMP环境,并且配置好httpd.conf、php.ini、my.cnf,然后将PHP导入后。从浏览器中打开登录页面,一切正常,但输入用户名密码后,却不能跳转到欢迎页面。开始怀疑是mysql与php的连接问题,检查info.php,发现连接mysql的socket没有问题,并且web的日志中也记录了登录成功,并且apache的access.log中,也有登录成功,跳转并发送欢迎页面到浏览器的记录。于是用一个抓包工具抓了页面登录过程的包,分析后发现,确实登录成功了,并且apache将欢迎页面的包发送到了浏览器,但不知为什么,又被强制跳转回了登录页面。这种情况让我怀疑是不是php页面的session处理过程有问题,在欢迎页面上加入了输出session信息的代码,运行后,发现session信息为空,看来果然是欢迎页面没有获得到session,于是被当做还没登录,又给跳转回了登录页面。
再次查看info.php的信息,发现session.save_path一项写的路径是/var/lib/php/session,估计就是这里的问题了,打开centos的终端,进入/var/lib目录,却没有发现php这个目录的存在。于是,手动创建了/var/lib/php/session,并把这个目录的读写权限赋给了httpp.conf中设置的User(最简单的方法是chmod 777 /var/lib/php)。重启apache后,一切终于正常了。看来问题的原因是我给httpd.conf中设的User name没有权限来创建/var/lib/php/session目录,所以页面的session信息无法保存,也就造成了,登录页面后,再访问其他页面会被误认为还没登录,又被重定向到了登录页面。
另附编译mysql、apache、php的configure配置内容。注意安装顺序,通常是先装mysql或者apache,后装php,这主要是在php的编译过程中,要调用mysql和apache httpd的头文件和库文件,才能生成php的相应模块:
mysql的configure:
./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data --with-unix-socket-path=/var/lib/mysql/mysql.sock --enable-thread-safe-client --with-plugins=partition
--prefix=/usr/local/mysql 是主程序、库保存到/usr/local/mysql下
--localstatedir=/usr/local/mysql/data 是指数据库文件,也就是表的信息保存到/usr/local/mysql/data
--with-unix-socket-path=/var/lib/mysql/mysql.sock 这个是mysql的sock,当php与mysql连接时会用到
--enable-thread-safe-client 这个不太清楚,大于是mysql的client支持线程安全
--with-plugins=partition 启用分区表功能,这主要是我的数据库使用了分区表,如果没有使用分区表,这个可以不设
apache httpd的configure配置:
./configure --prefix=/usr/local/apache2 --enable-so --enable-rewrite --enable-module=all --enable-shared=max --enable-cgi
php的configure配置:
./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-libxml-dir=/usr/lib64 --with-mysqli=/usr/local/mysql/bin/mysql_config --with-gd=/usr/local/modules/gd --with-png-dir=/usr/lib64 --with-jpeg-dir=/usr/local/modules/jpeg6 --with-zlib --with-freetype-dir=/usr/local/modules/freetype --with-apxs2=/usr/local/apache2/bin/apxs --with-curl=/usr/local/curl --enable-fastcgi --enable-force-cgi-redirect --with-mcrypt
php的配置是最复杂的,其中主要的有:
--with-mysql=/usr/local/mysql mysql的路径,给出目录就行
--with-mysqli=/usr/local/mysql/bin/mysql_config mysql_config的路径
--with-apxs2=/usr/local/apache2/bin/apxs 这个是apache2下apxs文件的路径,通过这个文件php可以获得apache httpd的相关信息
编译php时,可能会遇到某些库文件的路径不清楚的问题,因为64位系统上默认的库位置在/usr/lib64下,而有的库文件的位置不对,就会造成编译程序出错。另外,
--with-libxml-dir=/usr/lib64
--with-gd=/usr/local/modules/gd
--with-png-dir=/usr/lib64
--with-jpeg-dir=/usr/local/modules/jpeg6
--with-freetype-dir=/usr/local/modules/freetype
--with-mcrypt