zoukankan      html  css  js  c++  java
  • 10-编译PHP并与nginx整合

    nginx的URL重写。nginx+PHP的配置也是不可不学的部分。PHP自己手动编译,mysql就自己yum了。



    yum install 安装mysql


    同时进行php的编译,手动编译php

     这么多的选项不要记,记也没用。你随时编译什么软件你看它的configure -help,帮助,是否包含mysql的支持?DIR是mysql的base(基础目录),php自带了原生的mysql驱动,不需要依赖于mysql的目录了。你要是想用原生的mysql驱动可以指定为mysqlnd。如果mysqli没有值默认为mysqlnd。肯定得开启mysqlnd。


    还需要gd库支持,这些东西你需要什么就随时去找。死记硬背是没有任何意义的。你的gd库装在哪里?你手动装的gd那你指定,你要是没有手动编译gd那你直接先yum安装一下。

    得清除yum源并且重新配置本地光盘为yum源

    ttf是写字的,字体功能,gd是画图,画图上你想写字还得有字体。


    安装字体相关的软件

     

    把ttf的选项--enable-gd-native-ttf加上去php的编译命令


     再看看有没有安装freetype


     编译安装php的命令:./configure --prefix=/usr/local/fastphp

    --with-mysql=mysqlnd

    --enable-mysqlnd

    --with-gd

    --enable-gd-native-ttf

    --enable-gd-jis-conf

    至此,把php编译在哪里,mysql要支持,gd库要支持,字体库要支持,可以动手编译了。

     

    缺少了libxml2,编译不成功


    libxml2已经安装了

    yum clean all之后删除掉packagekit-media.repo就意味着yum源被重新配置了,然后yum安装libxml2-devel成功


    重新编译安装php又报错了,少了png.h,png.h是头文件,头文件少了肯定是缺少了devel系列的包。没有头文件,头文件里面有一些数据结构它必须要利用。

    经查资料说是libpng,devel包没安装,执行下面两条命令即可解决yum install libpng,yum install libpng-devel,然后重新编译安装就行了

    又报这个错,还是重新配置yum源吧。

    又来了,不断地重复yum clean all然后删除掉packagekit-media.repo以重新配置yum源。

    安装libpng-devel成功了


     编译安装PHP成功


    试一下安装gd-devel

    又来了,又是yum源的问题

    重新配置yum源之后再安装,没有gd-devel的包可以安装。


      编译安装php的命令应该改为:./configure --prefix=/usr/local/fastphp

    --with-mysql=mysqlnd

    --enable-mysqlnd

    --with-gd

    --enable-gd-native-ttf

    --enable-gd-jis-conv

    经过漫长的等待,php终于编译成功了,编译完毕了。


    php不是要以一个进程的方式在跑吗?管理php进程的那个东西叫做fastcgi_process_manager程序,它现在没有给我们产生conf。


    嘴里念叨着四个选项还是少了些选项。你得说你是fpm形式,它才能以独立进程编译。

    使用新的选项

    修改配置php的命令:

    ./configure --prefix=/usr/local/fastphp

    --with-mysql=mysqlnd

    --enable-mysqlnd

    --with-gd

    --enable-gd-native-ttf

    --enable-gd-jis-conv

    --enable-fpm

    必须要声明enable-fpm才可以,然后用新的选项把它configure,make&&make install

    编译安装

    一不小心落了一个参数,二十分钟白费了,又要重新编译。一定要在编译之前好好看看你的参数。为什么非得加fpm?因为nginx和php是平级的,都是各自独立的进程,所以要把php编译成fpm的形式。


    整合php和nginx


    因为nginx和php是两个独立的进程,因此它俩要通信要说话。

    不灵


    进行调试

     

    修改:

    为什么差一点就不行?fastcgi通俗意思是两个程序之间说话,程序之间说话肯定少不了N多变量而且是约定成俗的变量。刚才你要是不包含的话(include fastcgi_params)会少了很多东西。缺少了很多变量PHP不知道怎么解释,你得给人充分的变量才行。


    PHP已经安装成功了

    gd库已经安装了

    mysql也支持

    有mysql有gd库就已经够了,现在php已经安装完毕了。和nginx也整合完毕了。



    启动mysql失败

    还差一个,刚才装的只是客户端,还要装mysql-server。

    mysql-server服务器和mysqld已经安装,查看mysql日志应该是磁盘空间满了,删除掉之前nginx日志切割课程的日志文件应该就可以了。经查nginx日志才147KB,看来不是大容量文件。


    nginx和php是怎么配合的?

    php是嵌入式嵌入apache当做它的小功能块。nginx和php的关系是平等的。php占着9000端口当做一个独立的进程在运行着。nginx收到请求发现想运行php,把你的相关请求信息原封不动地送给php。php处理完毕再返回给nginx,nginx再返回给用户。这是两者的不同之处。针对.php文件做一次转发,转发给php进程。nginx和php是相互独立的,只要碰到.php的请求直接原封不动转给php进程来请求。不等php编译好先去帮nginx配置。知道原理了又会location了你就知道该怎么做了。


    配置nginx  配置nginx.conf

    正则匹配,当碰到.php的时候,这件事不能由我处理了,得由php进程来处理了。php进程运行的时候在哪一个端口?咱们应该告诉人家。fastcgi就是你接收到的这一系列请求的上下文的变量,通过9000端口来处理。9000端口将是谁来运行呢?就是由php来运行。


    当location(定位),当它碰到.php的这种文件的时候,它就把浏览器给它的一系列信息原封不动地给9000端口,让9000端口去处理。给9000端口去处理的时候你总得让php这个进程知道你来找a.php还是b.php,你得让人家知道你来找哪个php啊。所以cgi里面有一个参数,这是cgi标准定的,cgi里面有一个参数叫做fastcgi_script_name,就告诉了php说你去找/scripts$fastcgi_script_name(scripts目录下的fastcgi_script_name这个文件名)。scripts目录是干什么的?就是你的php放哪个目录你得说清楚。总之这个location是:现在有人要访问php文件,原封不动地把它转到9000端口,同时告诉这个9000端口我要找的是$document_root$fastcgi_script_name这个文件名来执行。也就是说9000端口的php请帮我执行$docuemnt_root$fastcgi_script_name这个php,执行结果返回给nginx。


    实际上原理就是说:

  • 相关阅读:
    我的知识库(4) java获取页面编码(Z)
    知识库(3)JAVA 正则表达式 (超详细)
    The Struts dispatcher cannot be found. This is usually caused by using Struts tags without the associated filter. Struts
    某人总结的《英语听力的技巧 》,挺搞的
    我的知识库(5)java单例模式详解
    构建可扩展程序
    SerialPort (RS232 Serial COM Port) in C# .NET
    Python学习笔记——String、Sequences
    UI题目我的答案
    jQuery学习系列学会操纵Form表单元素(1)
  • 原文地址:https://www.cnblogs.com/ZHONGZHENHUA/p/6560691.html
Copyright © 2011-2022 走看看