• <dd id="hdgin"><track id="hdgin"></track></dd>
  • <em id="hdgin"><tr id="hdgin"></tr></em>
  • <th id="hdgin"><track id="hdgin"><noframes id="hdgin"></noframes></track></th>
        <rp id="hdgin"><ruby id="hdgin"></ruby></rp>

        <legend id="hdgin"><noscript id="hdgin"><video id="hdgin"></video></noscript></legend>
          <dd id="hdgin"><track id="hdgin"></track></dd>
            首頁 LAMP教程LAMP經典入門教程

            LAMP安裝

            運維派隸屬馬哥教育旗下專業運維社區,是國內成立最早的IT運維技術社區,歡迎關注公眾號:yunweipai
            領取學習更多免費Linux云計算、Python、Docker、K8s教程關注公眾號:馬哥linux運維

            動態資源與語言

            WEB資源類型:

            • 靜態資源:原始形式與響應內容一致,在客戶端瀏覽器執行
            • 動態資源:原始形式通常為程序文件,需要在服務器端執行之后,將執行結果返回給客戶端

            注意:靜態和動態的區別,不在于網頁是否能動態變化,而在于服務端的頁面文件和客戶端得到頁面文件是否一致

            范例:靜態資源

            #客戶端主機現在的時間:
            <script type="text/javascript">
            document.write(new Date());
            </script>

            Web相關語言
            客戶端技術: html,javascript,css
            服務器端技術:php,python,javascript(Node.js),jsp,asp,Perl、Ruby

            LAMP架構組成

            LAMP經典入門教程插圖

            LAM(M)P:

            L:linux

            A:apache (httpd)

            M:mysql, mariadb

            M:memcached

            P:php, perl, python

            LAMP經典入門教程插圖1

            CGI和fastcgi

            CGI

            CGI:Common Gateway Interface 公共網關接口

            CGI 在2000年或更早的時候用得比較多,以前web服務器一般只處理靜態的請求,如果碰到一個動態請求怎么辦呢?web服務器會根據這次請求的內容,然后會fork一個新進程來運行外部c程序(或bash,perl腳本等), 這個進程會把處理完的數據返回給web服務器,最后web服務器把內容發送給用戶,剛才fork的進程也隨之退出。 如果下次用戶還請求改動態腳本,那么web服務器又再次fork一個新進程,周而復始的進行。

            CGI 可以讓一個客戶端,從網頁瀏覽器通過http服務器向執行在網絡服務器上的程序傳輸數據;CGI描述了客戶端和服務器程序之間傳輸的一種標準

            請求流程:
            Client — (http協議) –> httpd — (cgi協議) –> application server (program file) — (mysql協議) –> mysql

            范例:httpd 利用CGI運行shell腳本

            [root@centos8 ~]#vim /etc/httpd/conf/httpd.conf 
            ...省略...
            <directory /data/script>
            require all granted
            </directory>
            <IfModule alias_module>
            ...省略...
            #ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
            ScriptAlias /sh/ "/data/script/"
            </IfModule>
            <directory /data/script>
            require all granted
            </directory>
            ...省略...
            
            [root@centos8 ~]#cat /data/script/cgi.sh
            #!/bin/bash
            #
            cat << EOF
            Content-Type: text/html
            
            <pre>
            My username is: $(id -un)
            My id is: $(id -u)
            
            My shell settings are:
            $(set)
            
            My environment variables are:
            $(env)
            
            Here is the file in /etc:
            $(ls -l /etc/redhat-release )
            $( cat  /etc/redhat-release )
            </pre>
            EOF
            [root@centos8 ~]#chmod +x /data/script/cgi.sh
            [root@centos8 ~]#ll /data/script/cgi.sh
            -rwxr-xr-x 1 root root 269 Dec 21 21:08 /data/script/cgi.sh
            
            [root@centos8 ~]#curl http://10.0.0.8/sh/cgi.sh
            <pre>
            My username is: apache
            My id is: 48
            
            My shell settings are:
            BASH=/bin/bash
            BASHOPTS=cmdhist:complete_fullquote:extquote:force_fignore:hostcomplete:interactive_comments:progcomp:promptvars:sourcepath
            BASH_ALIASES=()
            BASH_ARGC=()
            BASH_ARGV=()
            BASH_CMDS=()
            BASH_LINENO=([0]="0")
            BASH_SOURCE=([0]="/data/script/cgi.sh")
            BASH_VERSINFO=([0]="4" [1]="4" [2]="19" [3]="1" [4]="release" [5]="x86_64-redhat-linux-gnu")
            BASH_VERSION='4.4.19(1)-release'
            CONTEXT_DOCUMENT_ROOT=/data/script/
            CONTEXT_PREFIX=/sh/
            DIRSTACK=()
            DOCUMENT_ROOT=/var/www/html
            EUID=48
            GATEWAY_INTERFACE=CGI/1.1
            GROUPS=()
            HOSTNAME=centos8.localdomain
            HOSTTYPE=x86_64
            HTTP_ACCEPT='*/*'
            HTTP_HOST=10.0.0.8
            HTTP_USER_AGENT=curl/7.61.1
            IFS=$' \t\n'
            MACHTYPE=x86_64-redhat-linux-gnu
            OPTERR=1
            OPTIND=1
            OSTYPE=linux-gnu
            PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
            PPID=11692
            PS4='+ '
            PWD=/data/script
            QUERY_STRING=
            REMOTE_ADDR=10.0.0.8
            REMOTE_PORT=56396
            REQUEST_METHOD=GET
            REQUEST_SCHEME=http
            REQUEST_URI=/sh/cgi.sh
            SCRIPT_FILENAME=/data/script/cgi.sh
            SCRIPT_NAME=/sh/cgi.sh
            SERVER_ADDR=10.0.0.8
            SERVER_ADMIN=root@localhost
            SERVER_NAME=10.0.0.8
            SERVER_PORT=80
            SERVER_PROTOCOL=HTTP/1.1
            SERVER_SIGNATURE=
            SERVER_SOFTWARE='Apache/2.4.37 (centos)'
            SHELL=/sbin/nologin
            SHELLOPTS=braceexpand:hashall:interactive-comments
            SHLVL=1
            TERM=dumb
            UID=48
            UNIQUE_ID=Xf4ZhJSefdICWmRjEggE1wAAAAg
            _=/bin/bash
            
            My environment variables are:
            HTTP_HOST=10.0.0.8
            CONTEXT_DOCUMENT_ROOT=/data/script/
            HTTP_USER_AGENT=curl/7.61.1
            SERVER_ADMIN=root@localhost
            CONTEXT_PREFIX=/sh/
            SERVER_PORT=80
            SERVER_NAME=10.0.0.8
            QUERY_STRING=
            SCRIPT_FILENAME=/data/script/cgi.sh
            PWD=/data/script
            HTTP_ACCEPT=*/*
            REQUEST_METHOD=GET
            SERVER_SIGNATURE=
            SCRIPT_NAME=/sh/cgi.sh
            REMOTE_PORT=56396
            UNIQUE_ID=Xf4ZhJSefdICWmRjEggE1wAAAAg
            DOCUMENT_ROOT=/var/www/html
            SHLVL=1
            SERVER_PROTOCOL=HTTP/1.1
            REQUEST_URI=/sh/cgi.sh
            PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
            SERVER_ADDR=10.0.0.8
            GATEWAY_INTERFACE=CGI/1.1
            REQUEST_SCHEME=http
            REMOTE_ADDR=10.0.0.8
            SERVER_SOFTWARE=Apache/2.4.37 (centos)
            _=/usr/bin/env
            
            Here is the file in /etc:
            lrwxrwxrwx. 1 root root 14 Aug 14 14:42 /etc/redhat-release -> centos-release
            CentOS Linux release 8.0.1905 (Core) 
            </pre>
            
            #觀察錯誤日志
            [root@centos8 ~]#tail /var/log/httpd/error_log
            
            #修改cgi.sh最后加一行sleep 100
            [root@centos8 ~]#vim  /data/script/cgi.sh
            [root@centos8 ~]#tail -3 /data/script/cgi.sh
            </pre>
            EOF
            rm -rf /data/script
            sleep 100
            
            #再次運行后,可以觀察到下面進程樹
            [root@centos8 ~]#curl http://10.0.0.8/sh/cgi.sh

            LAMP經典入門教程插圖2

            fastcgi

            fastcgi的方式是,web服務器收到一個請求時,不會重新fork一個進程(因為這個進程在web服務器啟動時就開啟了,而且不會退出),web服務器直接把內容傳遞給這個進程(進程間通信,但fastcgi使用了別的方式,tcp方式通信),這個進程收到請求后進行處理,把結果返回給web服務器,最后自己接著等待下一個請求的到來,而不是退出

            請求流程:
            Client — (http協議) –> httpd — (fastcgi協議) –> fastcgi服務器 — (mysql協議) –> mysql

            CGI和fastcgi 比較

            LAMP經典入門教程插圖3
            LAMP經典入門教程插圖4

            PHP

            PHP 簡介

            PHP官網:http://www.php.net/

            PHP是通用服務器端腳本編程語言,主要用于web開發實現動態web頁面,也是最早實現將腳本嵌入HTML源碼文檔中的服務器端腳本語言之一。同時,php還提供了一個命令行接口,因此,其也可以在大多數系統上作為一個獨立的shell來使用
            Rasmus Lerdorf于1994年開始開發PHP,最初是一組被Rasmus Lerdorf稱作“Personal Home Page Tool” 的Perl腳本, 可以用于顯示作者的簡歷并記錄用戶對其網站的訪問。后來,Rasmus Lerdorf使用C語言將這些Perl腳本重寫為CGI程序,還為其增加了運行Web forms的能力以及與數據庫交互的特性,并將其重命名為“Personal Home Page/Forms Interpreter”或“PHP/FI”。此時,PHP/FI已經可以用于開發簡單的動態web程序了,這即PHP1.0。1995年6月,Rasmus Lerdorf把它的PHP發布于comp.infosystems.www.authoring.cgi Usenet討論組,從此PHP開始走進人們的視野。1997年,其2.0版本發布
            1997年,兩名以色列程序員Zeev Suraski和Andi Gutmans重寫的PHP的分析器(parser)成為PHP發展到3.0的基礎,而且從此將PHP重命名為PHP: Hypertext Preprocessor。此后,這兩名程序員開始重寫整個PHP核心,并于1999年發布了Zend Engine 1.0,這也意味著PHP 4.0的誕生。2004年7月,Zend Engine 2.0發布,由此也將PHP帶入了PHP 5時代。PHP5包含了許多重要的新特性,如增強的面向對象編程的支持、支持PDO(PHP Data Objects)擴展機制以及一系列對PHP性能的改進

            Zend Engine是開源的、PHP腳本語言的解釋器,它最早是由以色列理工學院(Technion)的學生Andi Gutmans和Zeev Suraski所開發,Zend也正是此二人名字的合稱。后來兩人聯合創立了Zend Technologies公司

            Zend Engine 1.0于1999年隨PHP 4發布,由C語言開發且經過高度優化,并能夠做為PHP的后端模塊使用。Zend Engine為PHP提供了內存和資源管理的功能以及其它的一些標準服務,其高性能、可靠性和可擴展性在促進PHP成為一種流行的語言方面發揮了重要作用

            Zend Engine的出現將PHP代碼的處理過程分成了兩個階段:首先是分析PHP代碼并將其轉換為稱作Zend opcode的二進制格式opcode(類似Java的字節碼),并將其存儲于內存中;第二階段是使用Zend Engine去執行這些轉換后的Opcode

            php各種版本官方支持時間:

            https://www.php.net/supported-versions.php

            LAMP經典入門教程插圖5

            PHP的Opcode語言

            Opcode是一種PHP腳本編譯后的中間語言,類似于Java的ByteCode,或者.NET的MSL。

            PHP的語言引擎Zend執行PHP腳本代碼一般會經過如下4個步驟

            1、Scanning 詞法分析,將PHP代碼轉換為語言片段(Tokens)
            2、Parsing 語義分析,將Tokens轉換成簡單而有意義的表達式
            3、Compilation 將表達式編譯成Opcode
            4、Execution 順次執行Opcode,每次一條,從而實現PHP腳本的功能

            即:掃描–>分析–>編譯–>執行

            php配置

            php 的配置文件:/etc/php.ini, /etc/php.d/*.ini
            配置文件在php解釋器啟動時被讀取

            對配置文件的修改生效方法

            • Modules:重啟httpd服務
            • FastCGI:重啟php-fpm服務

            /etc/php.ini配置文件格式:

            [foo]:Section Header
            directive = value   

            注釋符:

            • 以#開頭,純粹的注釋信息
            • 以 ; 開頭,用于注釋可啟用的directive

            提示:較新的版本中,已經完全使用 “ ; ” 進行注釋

            php.ini 配置參考文檔:

            php.ini的核心配置選項文檔: http://php.net/manual/zh/ini.core.php
            php.ini配置選項列表:http://php.net/manual/zh/ini.list.php

            php常見設置:

            • expose_php = On #在響應報文顯示首部字段x-powered-by: PHP/x.y.z,暴露php版本,建議設為off
            • max_execution_time= 30 最長執行時間30s
            • memory_limit=128M 生產不夠,可調大
            • display_errors=off 調試使用,不要打開,否則可能暴露重要信息
            • display_startup_errors=off 建議關閉
            • post_max_size=8M 最大上傳數據大小,生產可能調大,比下面項大
            • upload_max_filesize =2M 最大上傳文件,生產可能要調大
            • max_file_uploads = 20 同時上傳最多文件數
            • date.timezone =Asia/Shanghai 指定時區
            • short_open_tag=on 開啟短標簽,如: <? phpinfo();?>

            范例:

            [root@centos7 ~]#yum -y install httpd php
            [root@centos7 ~]#systemctl start httpd
            [root@centos7 ~]#cat /var/www/html/test.php 
            <?php
            phpinfo();
            ?>
            [root@centos6 ~]#curl  -I 10.0.0.7/test.php
            HTTP/1.1 200 OK
            date: Thu, 02 Apr 2020 04:02:57 GMT
            server: Apache/2.4.6 (CentOS) PHP/5.4.16
            x-powered-by: PHP/5.4.16   # 暴露PHP版本信息
            content-type: text/html; charset=UTF-8
            cache-control: private
            
            [root@centos7 ~]#vim /etc/php.ini 
            expose_php = Off
            [root@centos7 ~]#systemctl restart httpd
            
            [root@centos6 ~]#curl  -I 10.0.0.7/test.php
            HTTP/1.1 200 OK
            date: Thu, 02 Apr 2020 04:03:59 GMT
            server: Apache/2.4.6 (CentOS)
            content-type: text/html; charset=UTF-8
            cache-control: private
            PHP語言格式

            php語言有兩種使用格式:

            格式 1

            <?php  
                echo "<h1>Hello world!</h1>"
            ?>

            格式 2

            <h1>
                <?php echo "Hello world!" ?>
            </h1>
            php測試代碼
            [root@centos8 ~]# cat /var/www/html/phpinfo.php
            <?php
                echo date("Y/m/d  H:i:s");
                phpinfo();
            ?>
            [root@centos8 ~]#curl 127.0.0.1/phpinfo.php
            
            [root@centos8 ~]#cat ./phpinfo.php
            #!/bin/php
            <?php
            phpinfo();
            ?>
            [root@centos8 ~]#chmod +x ./phpinfo.php
            [root@centos8 ~]#./phpinfo.php

            LAMP實現方式

            httpd 接收用戶的web請求;靜態資源則直接響應;動態資源為php腳本,對此類資源的請求將交由php來運行

            httpd與php結合的方式

            modules :將php編譯成為httpd的模塊libphp5.so,只有prefork 模式才支持
            FastCGI

            LAMP架構實現

            靜態資源:

            Client — http –> httpd

            動態資源:

            Client — http –> httpd –> libphp5.so () — mysql –> MySQL server
            Client — http –> httpd –>fastcgi– mysql –> MySQL server

            本文鏈接:http://m.abandonstatusquo.com/36039.html

            LAMP安裝

            網友評論comments

            發表評論

            您的電子郵箱地址不會被公開。

            暫無評論

            Copyright ? 2012-2022 YUNWEIPAI.COM - 運維派 京ICP備16064699號-6
            掃二維碼
            掃二維碼
            返回頂部
            久久久久亚洲国内精品|亚洲一区二区在线观看综合无码|欧洲一区无码精品色|97伊人久久超碰|一级a爱片国产亚洲精品