• 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。


    实际上原理就是说:

  • 相关阅读:
    LeetCode 第46题 全排列
    docker安装单节点minio
    git的免密设置
    mysql不同字符集的转换过程
    二进制安装MySQL 8.0
    二进制方式安装mysql5.7.24
    mysql替换字段中指定的部分字符串
    Minio设置永久下载链接
    pt-online-schema-change使用详解
    Oracle pctfree和pctused详解
  • 原文地址:https://www.cnblogs.com/ZHONGZHENHUA/p/6560691.html
Copyright © 2020-2023  润新知