91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何配置php環境

發布時間:2021-05-20 15:18:11 來源:億速云 閱讀:140 作者:Leah 欄目:編程語言

如何配置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語言,現在被很多的網站編程人員廣泛的運用。

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

依安县| 温宿县| 舟山市| 乐山市| 东安县| 永春县| 永善县| 竹山县| 交城县| 绵阳市| 三河市| 沙洋县| 陆良县| 平乡县| 福建省| 炎陵县| 黄冈市| 罗山县| 平舆县| 延津县| 虞城县| 卫辉市| 杨浦区| 徐州市| 阿瓦提县| 游戏| 天水市| 新乡县| 沙湾县| 措勤县| 颍上县| 肃北| 桃源县| 北安市| 杂多县| 福鼎市| 和田县| 济南市| 苗栗市| 鄂托克前旗| 隆德县|