热门关键字: php net javascript java
Just Internet && Only Internet
您的位置:web > Centos6.5下安装httpd搭配php实验
Centos6.5下安装httpd搭配php实验
发布时间:2019-08-28 06:04:48


关于apxs必须要知道的:

apxs是apache下的一个模块编译工具,一般apache是不具备二次开发,只有在安装了该工具之后,才能进行二次开发,比如编译phpso文件等(apache安装php采用源码安装时,需要调用apxs这个模块进行编译).所以需要安装apache的开发包httpd-devel。实验过程中由于私自删除了apxs这个文件,导致了php无法进行编译安装(./configure命令的参数 --with-apxs=xx项无法起作用)。于是先卸载httpd-devel(原来安装有,只不过被我删除了apxs文件,导致无法工作了),重新安装yum install httpd-devel安装,然后就出现了/usr/sbin/apxs(注意这是一个文件不是目录)


php的安装实验:

1. 下载php5.6源码包编译安装,进入目录下直接执行:

./configure

make && make install

成功安装php5.6,执行 php -v 命令可以正常显示php版本号。

2. 配置httpd.conf,想加入 LoadModule libphp5.so,结果发现,httpd安装目录下的modules文件夹不存在libphp5.sophp的安装目录下也不存在该文件,执行

find / -name *php5.so

全目录查找该文件也未找到,后来才发现没有生成。经过检查,发现在执行./congigure命令时,只有添加了 --with-apxs=/xxx/xxx 参数才会生成该文件。

搜索apxs找不到,经过百度,这个东西要另外安装httpd-devel才会出现。于是执行yum install httpd-devel,成功找到apxs,在/usr/sbin/apxs(注:这是个文件,不是目录哦),于是尝试删除phpyum remove php, rpm -e php都运行了,发现php -v还可以正常显示php版本号,目测不知道怎么卸载php!!无语)。重新配置php,并重新编译生成,两个重要参数设置如下

./confgigure --prefix=/usr/local/php --with-apxs=/usr/sbin/apxs

然后出现错误:

Error:You have enabled apache 1.3 support while your server is apache 2,please use the appropriate switch.

检查发现--with-apxs是针对apache1.x的,--with-apxs2才是针对apache2的,于是修改参数如下

./confgigure --prefix=/usr/local/php --with-apxs2=/usr/sbin/apxs

然后执行 make && make install

安装成功(重要说明:安装php的过程中为了获得mysql的支持还需要configure更多的参数,参见后面遇到的mysql的坑。另外后期使用php的过程中遇到了生成验证码所需的gd库的freetype自由字体没安装的坑,目前仍然没有解决,只是跳过了,configure步骤决定了生成的php是否能支持apachemysqlgd库等各种各样的功能,因此根据自己的需求确定要开启什么模块,事先规划好才是明智的

生成libphp5.so/usr/local/php5.6/libs目录下,cp命令复制到/etc/httpd/modules下,如果/etc/httpd/conf.d/php.conf没有ifmodules指明要加载的libphp5.so的位置,那么就需要在httpd.conf文件里加入以下配置:

LoadModule php5_module modules/libphp5.so

重启httdservice httpd restart,访问php ok nice!!


这里我们需要搞清楚以下几个东西的关系:

1. httpdhttpd-develhttpd-develapache的开发包,php的安装需要该开发包的支持(apxs

2. httpdphp的关系:

httpd只能输出静态htmlphp代码需要php模块单独解析,httpdphp的关系有几种,cgi, cli, sapi……

总结:

   因为不清楚各个事物的关系,所以进行了许多错误的实践,耗费了许多精力,又是一次低效的实践过程。还是得静下心来弄清楚关系再实验。



2019-08-19 php不支持mysql连接的各种坑

执行phpmysqli_connect方法:

$conn = mysqli_connect("localhost","root","","helper");

报错:

PHP Warning:  mysqli_connect(): No such file or directory

查找发现网络统一说是phpmysqli.default_socket没有配置,php找不到mysqlsocket连接文件导致(如果mysql没有启动也会提示这个信息)。于是查找mysql安装目录的mysql.sock文件位置:/var/lib/mysql/mysql.sock,设置到/etc/php.ini下。错误仍旧。

查看phpinfo发现Loaded Configuration File项为nonephp没有成功加载php.ini文件。于是安装 yum install strace 追踪插件,发现php加载的php.ini的位置是 /usr/local/lib(注:原以为php.ini的位置应该是Configuration File (php.ini) Path 项设置的目录,该值为/etc/php,php.ini原来也放在/etc/php/目录下),于是把php.ini复制到 /usr/local/lib目录下,php终于成功加载php.ini

localhost127.0.0.1192ip,则提示permission deny(难道是grant PRIVELEGES不正确?)。无语,找到所有php相关文件删除,重新编译php,复制libphp5.so文件到 /etc/httpd/modules,IP连接仍然提示没有权限,改回localhost提示连接成功!!!!!


总结:php单独安装编译时,./configure的参数尤其重要,尽量不要缺失设置项,否则后面可能出现各种错误,示例:

Mysql Native Driver本地驱动,简称:mysqlnd,在PHP5.3.0版本中被引入,PHP5.4之后的版本mysqlnd被作为默认配置选项。

php5.3以后的写法如下:(新版调用php自己写的驱动)

./configure --prefix=/usr/local/php --with-apxs2=/usr/sbin/apxs --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd

php5.3以前的写法如下:(旧版本调用mysql开发的驱动)

./configure --prefix=/usr/local/php --with-apxs2=/usr/sbin/apxs --with-mysql=/usr/local/mysql --with-pdo-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config

  

发现:当php.ini加载错了的时候,不知道如何超找php.ini的准确位置,该如何确定php.ini的位置?????另,strace插件对于追踪php内部错误有一点作用。示例用法: strace -T /phpinfo.php > /php.log

上面的意思是执行phpinfo.php文件,生成的日志到php.log下,方便查看。



接下来遇到的问题:

1. 验证码无法显示。检查发现是少了freetype(这个东西允许php生成验证码的时候调用自定义的字体),日志提示 call to undefined function imagettftext().

鼓捣了半天仍然无法安装这个鬼东西,单独去编译gd库仍然不能正常工作,又不想去重新编译整个php,难道每次开启模块都要重新编译php?最后决定弃用freetype,用imagestring代替,该方法无法调用自定义字体,对freetype没有依赖。

2. 登录时提示验证码不正确,查看日志发现session无法正常工作了,检查发现php.ini配置的session.save_path的文件夹不存在,于是在 /var/lib/php/下面建立session文件夹,然后chmod 777 session,赋予读写权限,session正常了。

登录 评论文章
声明:本站部分内容来自网络,如您发现本站内容侵害到您的利益,请联系本站管理员处理。