iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >如何配置php环境
  • 767
分享到

如何配置php环境

2023-06-15 04:06:56 767人浏览 安东尼
摘要

如何配置PHP环境?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一.nginx实现php动态解析原理Nginx 是一个高性能的Http服务器和反向代理服务器。即

如何配置PHP环境?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

一.nginx实现php动态解析原理

Nginx 是一个高性能的Http服务器和反向代理服务器。即nginx可以作为一个HTTP服务器进行网站的发布处理,也可以作为一个反向代理服务器进行负载均衡。但需要注意的是:nginx本身并不会对php文件进行解析。对PHP页面的请求将会被nginx交给FastCGI进程监听的IP地址及端口,由php-fpm(第三方的fastcgi进程管理器)作为动态解析服务器处理,最后将处理结果再返回给nginx。即nginx通过反向代理功能将动态请求转向后端php-fpm,从而实现对PHP的解析支持,这就是Nginx实现PHP动态解析的基本原理。

首先需要了解一些概念。(nginx + php-fpm +fastcgi)

  • Nginx 是非阻塞io & IO复用模型,通过操作系统提供的类似 epoll 的功能,可以在一个线程里处理多个客户端的请求。Nginx 的进程就是线程,即每个进程里只有一个线程,但这一个线程可以服务多个客户端。

  • PHP-FPM 是阻塞的单线程模型,pm.max_children 指定的是最大的进程数量,pm.max_requests 指定的是每个进程处理多少个请求后重启(因为 PHP 偶尔会有内存泄漏,所以需要重启)。PHP-FPM 的每个进程也只有一个线程,但是一个进程同时只能服务一个客户端。

  • fastCGI :为了解决不同的语言解释器(如php、python解释器)与WEBserver的通信,于是出现了cgi协议。只要你按照cgi协议去编写程序,就能实现语言解释器与webwerver的通信。如php-cgi程序。但是webserver每收到一个请求,都会去fork一个cgi进程,请求结束再kill掉这个进程。这样有10000个请求,就需要fork、kill php-cgi进程10000次。 fastcgi是cgi的改良版本。fast-cgi每次处理完请求后,不会kill掉这个进程,而是保留这个进程,使这个进程可以一次处理多个请求。大大提高了效率。

补充:反向代理与正向代理的相关知识(简言之,正向代理-代理的是客户端;反向代理-代理的是服务器)

正向代理的用途:
                (1)访问原来无法访问的资源,如Google
                (2) 可以做缓存,加速访问资源
                (3)对客户端访问授权,上网进行认证
                (4)代理可以记录用户访问记录上网行为管理,对外隐藏用户信息)

反向代理的用途:反向代理,"它代理的是服务端",主要用于服务器集群分布式部署的情况下,反向代理隐藏了服务器的信息。
               (1)保证内网的安全,通常将反向代理作为公网访问地址,Web服务器是内网
               (2)负载均衡,通过反向代理服务器来优化网站的负载

二.nginx实现php动态解析.之如何配置nginx

1.了解nginx配置相关常识 (nginx.conf)

nginx.conf组成及基本配置语法讲解详见另外一篇文章,此处将解析php配置用到的几个语法做一下简单介绍:

  • try_files $uri $uri/ /index.php$is_args$args  : (https://blog.51cto.com/13930997/2311716、、、Nginx try_files 里的一个坑---try_files 的最后一个位置(fall back)是特殊的,它会发出一个内部 “子请求” 而非直接在文件系统里查找这个文件!!!)

  • 对nginx location ~ \.php$配置的一个疑问 ( https://segmentfault.com/q/1010000012298020)

  • rewrite (https://segmentfault.com/a/1190000002797606)

  • 附录:nginx配置相关语法  (注意nginx里面还包含一些可用的全局变量,详见链接内容;也可以查看nginx官方文档http://www.nginx.org/            https://www.cnblogs.com/knowledgesea/p/5175711.html )

2.nginx解析php的配置范例

server {    listen       8000 backlog=4096;    server_name  www.baidu.com localhost;    access_log logs/access.log main;    root   /home/leimengyao/api/app/htdocs;    location / {        index  index.php index.html index.htm;        try_files $uri $uri/ /index.php?$args;    }    location ~ \.php$ {        #fastcgi_pass   127.0.0.1:9000;        fastcgi_pass unix:/home/leimengyao/php7/var/run/php-fpm.sock;        fastcgi_index  index.php;        fastcgi_param  SCRIPT_FILENAME  /home/leimengyao/api/app/htdocs$fastcgi_script_name;        include        fastcgi_params;    }    error_page  404              /404.html;    location = /404.html {        root   /usr/share/nginx/html;    }    # redirect server error pages to the static page /50x.html    #    error_page   500 502 503 504  /50x.html;    location = /50x.html {        root   /usr/share/nginx/html;    }    location ~ /\.ht {        deny  all;    }}

如上配置,当一个http请求到来时,被处理的过程如下:

以http://10.94.120.124:8000/A/B?c=1&d=4为例:

  • http请求到来后,通过server全局块里监听的端口号,匹配到相应server。然后接下来进行location路径的匹配。

  • 首先匹配到location / ,在这个匹配规则中,通过try_files 先在root目录(/home/leimengyao/api/app/htdocs)下查找是否有$uri文件;没有匹配到,然后再查找root目录下是否有$uri/目录;同样没有匹配到,则匹配最后一项/index.php?$args,即发出一个"内部子请求",也就相当于nginx发起了一个http请求到http://10.94.120.124:8000/index.php?c=1&d=4

  • 这个子请求会被location ~ \.php${ ... }catch住,也就是进入 FastCGI 的处理程序(nginx需要通过FastCGI模块配置,将相关php参数传递给php-fpm处理。在该项中设置了fastcgi_pass相关参数,将用户请求的资源发给php-fpm进行解析,这里涉及到nginx FastCGI模块的相关配置语法下文会介绍)。而具体的 URI 及参数是在 REQUEST_URI 中传递给 FastCGI 和 WordPress 程序的,因此不受 URI 变化的影响!!!!。

    public static function detectPath() {    if (!empty($_SERVER['SCRIPT_URL'])) {        $path = $_SERVER['SCRIPT_URL'];    } else {        //as: www.baidu.com/A/B?saadf=esdf        if (isset($_SERVER['REQUEST_URI'])) {          //$_SERVER['REQUEST_URI']="/m/test?saadf=esdf";            $request_uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);            if (false !== $request_uri) {                $path = $request_uri;              //echo $path; /A/B              //exit;        } elseif ($_SERVER['REQUEST_URI'] && strpos($_SERVER['REQUEST_URI'], '?') !== false) {            $path = strstr($_SERVER['REQUEST_URI'], '?', true);        }        } else {            $path = $_SERVER['PHP_SELF'];        }    }    return $path;}

3. Nginx配置.之PHP FastCGI

首先需要了解一些文件。(nginx.conf + fastcgi_params + php-fpm.conf + php.ini)

  • fastcgi_params 文件一般保存在/usr/local/etc/nginx下(ubuntu可保存于/etc/nginx下),它为FastCGI模块定义了基本的环境变量。这些fastcgi环境变量,我们在配置nginx的fastcgi_params时会用到。内容见下:

    如何配置php环境

  • Nginx.conf 的PHP FastCGI模块允许nginx同FastCGI协同工作,并且控制哪些参数将被安全传递。常见的fastcgi参数配置含义下文会具体介绍。配置范例如下:

    location / {  fastcgi_pass   localhost:9000;  fastcgi_index  index.php;   fastcgi_param  SCRIPT_FILENAME  /home/www/scripts/php$fastcgi_script_name;  fastcgi_param  QUERY_STRING     $query_string;  fastcgi_param  REQUEST_METHOD   $request_method;  fastcgi_param  CONTENT_TYPE     $content_type;  fastcgi_param  CONTENT_LENGTH   $content_length;}

(https://www.jianshu.com/p/9bae5c49a163)

  • php-fpm.conf

  • php.ini   使用php --ini查看php加载的配置文件路径(https://www.jianshu.com/p/a118f10d738c)

    如何配置php环境

查看发现配置文件目录在/etc目录,但是加载php.ini显示为none;切换到/etc下目录查看,确实没有php.ini文件。

如何配置php环境

复制php.ini.default为php.ini,再次执行php --ini  查看发现加载php.ini文件成功

如何配置php环境

php -m 查看会列出命令行 PHP Cli 已经安装的扩展。

查看php拓展安装目录命令:   php-config | grep -i extension (http://www.blogdaren.com/post-2520.html)

如何配置php环境

切换到该目录下查看拓展

如何配置php环境

其次了解一些nginx.conf中常用fastcgi配置的含义

  • fastcgi_pass:该参数设置的是nginx与php-fpm的通信方式,nginx和php-fpm的通信方式有两种,一种是Socket形式,一种是tcp形式。配置两种方式都可以,但是必须保证nginx配置的监听方式,和php-fpm.conf配置的监听方式保持一致性!(https://segmentfault.com/q/1010000004854045、https://www.jianshu.com/p/eab11cd1bb28)

其中TCP是IP加端口,可以跨服务器.而UNIX Domain Socket不经过网络,只能用于Nginx跟PHP-FPM都在同一服务器的场景.用哪种取决于你的PHP-FPM配置:
方式1:
php-fpm.conf: listen = 127.0.0.1:9000
nginx.conf: fastcgi_pass 127.0.0.1:9000;
方式2:
php-fpm.conf: listen = /tmp/php-fpm.sock
nginx.conf: fastcgi_pass unix:/tmp/php-fpm.sock;
其中php-fpm.sock是一个文件,由php-fpm生成,类型是srw-rw----.

UNIX Domain Socket可用于两个没有亲缘关系的进程,是目前广泛使用的IPC机制,比如X Window服务器和GUI程序之间就是通过UNIX Domain Socket通讯的.这种通信方式是发生在系统内核里而不会在网络里传播.UNIX Domain Socket和长连接都能避免频繁创建TCP短连接而导致TIME_WAIT连接过多的问题.对于进程间通讯的两个程序,UNIX Domain Socket的流程不会走到TCP那层,直接以文件形式,以stream socket通讯.如果是TCP Socket,则需要走到IP层,对于非同一台服务器上,TCP Socket走的就更多了.

UNIX Domain Socket:
Nginx <=> socket <=> PHP-FPM
TCP Socket(本地回环):
Nginx <=> socket <=> TCP/IP <=> socket <=> PHP-FPM
TCP Socket(Nginx和PHP-FPM位于不同服务器):
Nginx <=> socket <=> TCP/IP <=> 物理层 <=> 路由器 <=> 物理层 <=> TCP/IP <=> socket <=> PHP-FPM

  • fastcgi_index:

  • fastcgi_param:

以上配置文件全部修改完成以后,需要进行重启nginx和php-fpm,修改的内容才能生效:

  • 修改配置(nginx.conf,php-fpm.conf,php.ini)需要进行的操作(修改配置的时候通过 find / -name php-fpm.conf命令来查找),另外重启php-fpm(Mac重启php-fpm)和nginx (nginx -s reload     https://www.jianshu.com/p/2726ca520f4a 、  https://www.jianshu.com/p/9bae5c49a163)

三.nginx实现php动态解析.之配置过程中常见错误

  1. php-fpm需要进行一些配置修改(超时时长:request_slowlog_timeout等   php-fpm 的request_terminate_timeout设置不当导致的502错误)

  2. Nginx-配置误区 (fastcgi_param SCRIPT_FILENAME)

  3. Nginx + Php-fpm 一个神奇的502错误

  4. nginx+php-fpm打开index.php显示空白

  5. php国际化插件安装、debug插件安装(extension  php.ini)

  6. php缓存信息关闭(https://www.cnblogs.com/JohnABC/p/3529786.html   !!开启缓存会引起许多问题,视情况而定)

  7. ?php执行流程:https://www.jianshu.com/p/042c56e08939

四.Mac下配置神器PhpStrom开发环境

https://blog.csdn.net/tfy_2425482491/article/details/79377672

如何配置php环境

如何配置php环境

如何配置php环境

点击debug报如下错误:安装debug扩展

如何配置php环境

php是什么语言

php,一个嵌套的缩写名称,是英文超级文本预处理语言(PHP:Hypertext Preprocessor)的缩写。PHP 是一种 HTML 内嵌式的语言,PHP与微软的ASP颇有几分相似,都是一种在服务器端执行的嵌入HTML文档的脚本语言,语言的风格有类似于C语言,现在被很多的网站编程人员广泛的运用。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网PHP编程频道,感谢您对编程网的支持。

--结束END--

本文标题: 如何配置php环境

本文链接: https://www.lsjlt.com/news/277437.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何配置php环境
    如何配置php环境?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一.nginx实现php动态解析原理nginx 是一个高性能的http服务器和反向代理服务器。即...
    99+
    2023-06-15
  • apache如何配置php环境
    要配置 Apache 和 PHP 环境,需要按照以下步骤进行操作:1. 安装 Apache Web 服务器:首先,要安装 Apach...
    99+
    2023-08-24
    apache php
  • php开发环境如何配置
    要配置PHP开发环境,您需要执行以下步骤:1. 安装PHP:从PHP官方网站(https://www.php.net/downloa...
    99+
    2023-09-05
    php
  • 如何配置php与apache环境
    本文将为大家详细介绍“如何配置php与apache环境”,内容步骤清晰详细,细节处理妥当,而小编每天都会更新不同的知识点,希望这篇“如何配置php与apache环境”能够给你意想不到的收获,请大家跟着小编的思路慢慢深入,具体内容如下,一起去...
    99+
    2023-06-06
  • PHP环境配置
    文章目录 安装前的准备安装 ApachePHP 安装MySQL 的安装phpMyAdmin 配置 安装前的准备 查看本机的类型(x86/x64, 即 32 位还是 64 位)安装好 V...
    99+
    2023-09-10
    php apache 开发语言
  • Linux系统如何配置PHP环境
    这篇文章主要介绍了Linux系统如何配置PHP环境,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。PHP简介:PHP(“PHP: Hypertext Preprocessor”...
    99+
    2023-06-28
  • apache+php环境配置
    1.下载文件   apache在Apache VS16 binaries and modules download下载 php在PHP For Windows: Binaries and sources Releases 下载 注意选择正...
    99+
    2023-09-05
    apache php 开发语言 环境配置
  • ubuntu20.04配置php环境
    一、安装 PHP 7.4,配合 Apache 如果你正在使用 Apache 作为你的网络服务器,运行下面的命令来安装 PHP 和 Apache PHP 模块: sudo apt update sudo apt install php lib...
    99+
    2023-09-05
    php apache 服务器
  • 如何使用SublimeText3配置 PHP IDE环境
    首先是安装好PHP之后配置环境变量 然后在cmd中输入php -v 能看到版本号即为配置好了 之后在sublime中新建编译系统,输入代码 { "cmd": ["ph...
    99+
    2024-04-02
  • Window2003 IIS+MySQL+PHP+Zend环境如何配置
    这篇“Window2003 IIS+MySQL+PHP+Zend环境如何配置”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有...
    99+
    2024-04-02
  • LNMP环境如何配置
    这篇文章主要介绍了LNMP环境如何配置的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇LNMP环境如何配置文章都会有所收获,下面我们一起来看看吧。 LNMP环境配置 概念 ...
    99+
    2024-04-02
  • Lunix如何安装和配置PHP环境
    本篇内容主要讲解“Lunix如何安装和配置PHP环境”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Lunix如何安装和配置PHP环境”吧!步骤一:安装 Apache首先,你需要安装 Apache...
    99+
    2023-07-06
  • 如何在VSCode配置PHP开发环境
    目录一、下载XAMPP二、 下载xdebug插件三、下载并安装VSCode一、下载XAMPP XAMPP是一个易于安装的Apache发行版,其中包含MariaDB、PHP和Perl。...
    99+
    2024-04-02
  • 如何安装配置php编程环境
    今天小编给大家分享一下如何安装配置php编程环境的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。在Windows上安装PHP编...
    99+
    2023-07-05
  • 如何配置nodejs环境
    这篇文章主要介绍如何配置nodejs环境,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、由于node有多种版本号,每个版本号的API肯定也有些细微的差别,在工作中有可能要经常切换n...
    99+
    2024-04-02
  • Flex1.5环境如何配置
    这篇文章主要为大家展示了“Flex1.5环境如何配置”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Flex1.5环境如何配置”这篇文章吧。Flex1.5环境配置虽然价格高,但无可否认!它是目前同...
    99+
    2023-06-17
  • pycharm环境如何配置
    配置教程:1、下载并安装PyCharm;2、选择Python解释器;3、配置虚拟环境;4、配置代码风格;5、配置调试器;6、配置版本控制工具;7、配置插件;8、配置Python路径和环境变量;9、配置其他选项。详细介绍:1、从PyCharm...
    99+
    2023-12-19
    pycharm
  • Flutter环境如何配置
    这篇文章主要介绍了Flutter环境如何配置的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Flutter环境如何配置文章都会有所收获,下面我们一起来看看吧。当前环境win10as2022.1.1版本jdk11配...
    99+
    2023-07-05
  • mysql如何配置环境
    mysql 环境配置步骤:安装 mysql 安装程序。创建 root 用户并授予权限。修改配置文件(datadir、bind-address、port)。启动 mysql 服务。测试安装...
    99+
    2024-04-14
    mysql
  • windows下如何安装和配置php环境
    这篇文章主要讲解了“windows下如何安装和配置php环境”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“windows下如何安装和配置php环境”吧!下载PHP安装包首先,你需要从PHP官...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作