LAMP快速部署及LAMP組合深入講解-1

 

lamp

php

  • php: 腳本編程語言、嵌入到html中的嵌入式web程序開發語言;基于zend編譯成opcode(二進制格式的字節碼,重復運行,可省略編譯環境)

    • 一、PHP簡介
      
      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程序了,這即是PHP 1.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性能的改進。
      
      二、PHP Zend Engine
      
      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的二進制格式(類似Java的字節碼),并將其存儲于內存中;第二階段是使用Zend Engine去執行這些轉換后的Opcode。
      
      三、PHP的Opcode
      
      Opcode是一種PHP腳本編譯后的中間語言,就像Java的ByteCode,或者.NET的MSL。PHP執行PHP腳本代碼一般會經過如下4個步驟(確切的來說,應該是PHP的語言引擎Zend):
      1、Scanning(Lexing) —— 將PHP代碼轉換為語言片段(Tokens)
      2、Parsing —— 將Tokens轉換成簡單而有意義的表達式
      3、Compilation —— 將表達式編譯成Opocdes
      4、Execution —— 順次執行Opcodes,每次一條,從而實現PHP腳本的功能
      
        掃描-->分析-->編譯-->執行
      
      四、php的加速器
      
      基于PHP的特殊擴展機制如opcode緩存擴展也可以將opcode緩存于php的共享內存中,從而可以讓同一段代碼的后續重復執行時跳過編譯階段以提高性能。由此也可以看出,這些加速器并非真正提高了opcode的運行速度,而僅是通過分析opcode后并將它們重新排列以達到快速執行的目的。
      
      常見的php加速器有:
      
      1、APC (Alternative PHP Cache)
      遵循PHP License的開源框架,PHP opcode緩存加速器,目前的版本不適用于PHP 5.4。項目地址,http://pecl.php.net/package/APC。
      
      2、eAccelerator
      源于Turck MMCache,早期的版本包含了一個PHP encoder和PHP loader,目前encoder已經不在支持。項目地址, http://eaccelerator.net/。
      
      3、XCache
      快速而且穩定的PHP opcode緩存,經過嚴格測試且被大量用于生產環境。項目地址,http://xcache.lighttpd.net/
      
      4、Zend Optimizer和Zend Guard Loader
      Zend Optimizer并非一個opcode加速器,它是由Zend Technologies為PHP5.2及以前的版本提供的一個免費、閉源的PHP擴展,其能夠運行由Zend Guard生成的加密的PHP代碼或模糊代碼。 而Zend Guard Loader則是專為PHP5.3提供的類似于Zend Optimizer功能的擴展。項目地址,http://www.zend.com/en/products/guard/runtime-decoders
      
      5、NuSphere PhpExpress
      NuSphere的一款開源PHP加速器,它支持裝載通過NuSphere PHP Encoder編碼的PHP程序文件,并能夠實現對常規PHP文件的執行加速。項目地址,http://www.nusphere.com/products/phpexpress.htm
      
      五、PHP源碼目錄結構
      
      PHP的源碼在結構上非常清晰。其代碼根目錄中主要包含了一些說明文件以及設計方案,并提供了如下子目錄:
      
      1、build —— 顧名思義,這里主要放置一些跟源碼編譯相關的文件,比如開始構建之前的buildconf腳本及一些檢查環境的腳本等。
      2、ext —— 官方的擴展目錄,包括了絕大多數PHP的函數的定義和實現,如array系列,pdo系列,spl系列等函數的實現。 個人開發的擴展在測試時也可以放到這個目錄,以方便測試等。
      3、main —— 這里存放的就是PHP最為核心的文件了,是實現PHP的基礎設施,這里和Zend引擎不一樣,Zend引擎主要實現語言最核心的語言運行環境。
      4、Zend —— Zend引擎的實現目錄,比如腳本的詞法語法解析,opcode的執行以及擴展機制的實現等等。
      5、pear —— PHP 擴展與應用倉庫,包含PEAR的核心文件。
      6、sapi —— 包含了各種服務器抽象層的代碼,例如apache的mod_php,cgi,fastcgi以及fpm等等接口。
      7、TSRM —— PHP的線程安全是構建在TSRM庫之上的,PHP實現中常見的*G宏通常是對TSRM的封裝,TSRM(Thread Safe Resource Manager)線程安全資源管理器。
      8、tests —— PHP的測試腳本集合,包含PHP各項功能的測試文件。
      9、win32 —— 這個目錄主要包括Windows平臺相關的一些實現,比如sokcet的實現在Windows下和*Nix平臺就不太一樣,同時也包括了Windows下編譯PHP相關的腳本。
    • 配置文件:/etc/php.ini, /etc/php.d/*.ini

      • 配置文件在php解釋器啟動時被讀取,因此,對配置文件的修改如何生效?
        Modules:重啟httpd服務;
        FastCGI:重啟php-fpm服務;
    • ini

      vi /etc/php.ini
      
      [foo]:Section Header
      directive = value
      
      注釋符:較新的版本中,已經完全使用;進行注釋;
      #:純粹的注釋信息
      ;:用于注釋可啟用的directive

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

      <?php 
        ...php code...
      ?>

lamp

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

      • 客戶端技術: javascript
        服務器端技術:php, jsp
  • CGI:Common Gateway Interface
    可以讓一個客戶端,從網頁瀏覽器向執行在網絡服務器上的程序傳輸數據;CGI描述了客戶端和服務器程序之間傳輸的一種標準;
  • amp

    • a: apache (httpd)
      m: mysql, mariadb
      p: php, perl, python

    • httpd:接收用戶的web請求;靜態資源則直接響應;動態資源為php腳本,對此類資源的請求將交由php來運行;
      php:運行php程序;
      MariaDB:數據管理系統;

      • httpd與php結合的方式:
        modules (把php編譯成為httpd的模塊)
        FastCGI:php-fpm
    • amp組合方式:

      client --> http protocol --> httpd + php module --> (php-mysql, mysql protocol) --> mysqld
      client --> http protocol --> httpd --> fastcgi protocol --> fpm (php application server) --> (php-mysql, mysql protocol) --> mysqld
  • 快速部署amp:

    • CentOS 7:
      • Modules:程序包,httpd, php, php-mysql, mariadb-server
        啟動的服務:systemctl start mariadb.service httpd.service
      • FastCGI:程序包,httpd, php-fpm, php-mysql, mariadb-server
        啟動的服務:systemctl start mariadb.service php-fpm.service httpd.service
    • CentOS 6:
      • Modules:程序包,httpd, php, php-mysql, mysql-server
        啟動的服務:service mysqld start, service httpd start
  • php測試代碼
    <php?
          phpinfo();
      ?>

    示例:

    <html>
          <title>PHP Page</title>
          <body>
                  <h1>PHP Info Page</h1>
                  <?php
                          phpinfo();
                  ?>
          </body>
      </html>
  • php連接mysql的測試代碼:
    <?php
          $conn = mysql_connect('172.16.100.67','testuser','testpass');
          if ($conn) 
              echo "OK";
          else
              echo "Failure";
      ?>

 

原創文章,作者:s,如若轉載,請注明出處:http://www.www58058.com/77505

(1)
ss
上一篇 2017-06-04
下一篇 2017-06-04

相關推薦

  • CentOS6.9系統上編譯安裝httpd.2.2.32

    本文所做的所有操作是在一部新安裝的CentOS6.9系統上。 1.環境與配置 環境說明:VMware上安裝的CentOS6.9系統,兩張系統盤做成的yum源 配置:編譯生成的所有的文件都存放在/usr/local/httpd22/這個目錄下 2.安裝GCC編譯器 [root@localhost ~]# yum grouplist | grep “Develo…

    2017-04-20
  • Linux中的文件和目錄的權限管理

    Linux系統通過完善的權限管理來限制每一個用戶對于系統中文檔和目錄的訪問。在Linux系統中,文件和目錄的權限是有些差異的。一、權限介紹:如上所示,通過ll命令列出目錄下文件的時候同時也會列出文件的權限,從第二位開始,一直到第九位,即rw-r–r–就是文件的權限描述:其中3位為一組:第一組:rw-:代表文件的屬主(user)對文件的…

    Linux干貨 2017-04-01
  • 馬哥教育網絡班20期+第3周課程練習

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 [root@localhost ~]# who | cut -d" " -f1 | sort -u 2、取出最后登錄到當前系統的用戶的相關信息。 […

    Linux干貨 2016-06-26
  • Btrfs文件系統

    btrfs文件系統特性: 1、多物理卷支持 Btrfs可由多個底層物理卷組成:支持raid,以聯機添加,移除,修改 2、寫時復制機制(cow) ????復制,更新及替換指針,而非就地更新。在文件進行修改的時候,首先將文件復制一份出來,在復制的文件中進行修改,修改完成后,將指向原有文件的指針指向到修改完成的文件上,若修改完成的文件出現錯誤,則我們可以通過源文件…

    2016-04-10
  • 第三周作業

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 [root@localhost ~]# who user1    tty1         2016-12-27&nb…

    Linux干貨 2016-12-28
  • Linux基礎之正則表達式,用戶、組管理

    Linux基礎—正則表達式 正則表達式簡單來說就是一種行字符串處理的方式,通過一些特殊符號的輔助,可達到搜索、刪除、替換等某些特定字符串的處理方式 通配符(Globbing) 通配符與元字符類似,通配符主要用于文件名的匹配,而元字符則主要用在字符串的匹配上; 下面介紹幾種常用的通配符: * 表示匹配任意位數的任意字符 ? 表示…

    Linux干貨 2016-10-03
欧美性久久久久