LAMP理論整理

關於PHP

官網:http://www.php.netphp

1、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帶入了PHP5時代。PHP5包含了許多重要的新特性,如加強的面向對象編程的支持、支持PDO(PHP Data Objects)擴展機制以及一系列對PHP性能的改進。

mysql

2、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。

程序員

 

3、PHP的Opcode

Opcode是一種PHP腳本編譯後的中間語言,就像Java的ByteCode,或者.NET的MSL。PHP執行PHP腳本代碼通常會通過以下4個步驟(確切的來講,應該是PHP的語言引擎Zend):
一、Scanning(Lexing) —— 將PHP代碼轉換爲語言片斷(Tokens)
二、Parsing —— 將Tokens轉換成簡單而有意義的表達式
三、Compilation —— 將表達式編譯成Opocdes
四、Execution —— 順次執行Opcodes,每次一條,從而實現PHP腳本的功能

web

 

 

4、php的加速器

基於PHP的特殊擴展機制如opcode緩存擴展也能夠將opcode緩存於php的共享內存中,從而可讓同一段代碼的後續重複執行時跳過編譯階段以提升性能。由此也能夠看出,這些加速器並不是真正提升了opcode的運行速度,而僅是經過分析opcode後並將它們從新排列以達到快速執行的目的。

常見的php加速器有:

一、APC (Alternative PHP Cache)
遵循PHP License的開源框架,PHP opcode緩存加速器,目前的版本不適用於PHP 5.4。項目地址,http://pecl.php.net/package/APC。

二、eAccelerator
源於Turck MMCache,早期的版本包含了一個PHP encoder和PHP loader,目前encoder已經不在支持。項目地址, http://eaccelerator.net/。

三、XCache
快速並且穩定的PHP opcode緩存,通過嚴格測試且被大量用於生產環境。項目地址,http://xcache.lighttpd.net/

四、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

五、NuSphere PhpExpress
NuSphere的一款開源PHP加速器,它支持裝載經過NuSphere PHP Encoder編碼的PHP程序文件,並可以實現對常規PHP文件的執行加速。項目地址,http://www.nusphere.com/products/phpexpress.htm

sql

5、PHP源碼目錄結構

PHP的源碼在結構上很是清晰。其代碼根目錄中主要包含了一些說明文件以及設計方案,並提供了以下子目錄:

一、build —— 顧名思義,這裏主要放置一些跟源碼編譯相關的文件,好比開始構建以前的buildconf腳本及一些檢查環境的腳本等。
二、ext —— 官方的擴展目錄,包括了絕大多數PHP的函數的定義和實現,如array系列,pdo系列,spl系列等函數的實現。 我的開發的擴展在測試時也能夠放到這個目錄,以方便測試等。
三、main —— 這裏存放的就是PHP最爲核心的文件了,是實現PHP的基礎設施,這裏和Zend引擎不同,Zend引擎主要實現語言最核心的語言運行環境。
四、Zend —— Zend引擎的實現目錄,好比腳本的詞法語法解析,opcode的執行以及擴展機制的實現等等。
五、pear —— PHP 擴展與應用倉庫,包含PEAR的核心文件。
六、sapi —— 包含了各類服務器抽象層的代碼,例如apache的mod_php,cgi,fastcgi以及fpm等等接口。
七、TSRM —— PHP的線程安全是構建在TSRM庫之上的,PHP實現中常見的*G宏一般是對TSRM的封裝,TSRM(Thread Safe Resource Manager)線程安全資源管理器。
八、tests —— PHP的測試腳本集合,包含PHP各項功能的測試文件。
九、win32 —— 這個目錄主要包括Windows平臺相關的一些實現,好比sokcet的實如今Windows下和*Nix平臺就不太同樣,同時也包括了Windows下編譯PHP相關的腳本shell

 

關於數據庫與MySQL

1、RDBMSRelational Data Base Management System——關係型數據庫管理系統)應有的功能

一、數據庫的建立、刪除、修改數據庫

二、建立表、刪除表、修改表express

三、索引的建立、刪除apache

四、用戶和權限管理編程

五、數據的增、刪、查、改

 

2、數據庫語言分類:

一、DML:Data Manapulate Language:——數據操做語言
  INSERT、 REPLACE、 UPDATE、 DELETE
二、DDL:Data Defination Lanuage——數據定義語言
  CREATE、 ALTER、 DROP
三、DCL:Data Control Language——數據控制語言
  GRANT、 REVOKE

四、SELECT

 

3、RDBMS的做用

一、數據管理獨立性
二、有效地完成數據存取
三、數據完整性和安全性
四、數據集中管理
五、併發存儲與故障恢復
六、減小應用程序開發時間

 

4、關係數據庫對象:

一、庫

二、表

三、索引

四、視圖

五、約束

六、存儲過程

七、存儲函數

八、觸發器

九、遊標

十、用戶

十一、權限

十二、事務

 

5、SQL接口:

  Oracle:PL/SQL

  SQL Server T-SQL

 

6、MySQLhttp://www.mysql.com/

MySQL: 
Community Edtion 社區版本
Enterprise Edtion 企業版本

 

軟件包格式:
一、軟件包管理器特有的格式
rpm包、exe格式等
二、通用二進制格式
三、源程序

 

MySQL客戶端的運行模式:
  1、交互式模式

  注:交互式模式中的命令類別:
    客戶端命令:在客戶端自己執行的命令,例如:quit
    服務器端命令:要發送到服務器端由服務器執行並返回到客戶端的命令,都必須使用語句結束符,默認爲分號
  2、批處理模式——經過執行mysql腳原本完成數據操做

 

基本MySQL語句:

DDL

  建立數據庫
    CREATE DATABASE db_name; 
    CREATE DATABASE [IF NOT EXISTS] db_name;

  刪除數據庫
    DROP DATABASE [IF EXISTS] db_name;

  建立表
    CREATE TABLE tb_name(col1,col2,...);

  查看庫中的表

    SHOW TABLES FROM db_name;


  查看錶的結構

    DESC tb_name;

 

  刪除表:

    DROP TABLE tb_name;

  修改表
    ALTER TABLE tb_name 
      MODIFY  修改某個字段的屬性
      CHANGE  修改某個字段的名稱和屬性
      ADD  添加字段
      DROP  刪除字段

    注:詳細用法可經過help alter table查詢

DML:

  插入數據
    INSERT INTO tb_name (col1,col2,...) VALUES|VALUE ('STRING', NUM,...);
    INSERT INTO tb_name (col1,col2,...) VALUES|VALUE ('STRING', NUM,...),('STRING',NUM,...);


  更改數據
    UPDATE tb_name SET column=value WHERE

  

  刪除數據

    DELETE FROM tb_name WHERE CONDITION;

  查詢數據
    SELECT 字段 FROM tb_name WHERE CONDITION
      *: 全部字段
      WHERE:沒有條件表示顯示全部行;

  建立用戶
    CREATE USER 'USERNAME'@'HOST' [IDENTIFIED BY 'PASSWORD'];

    HOST字段能夠爲:HOST、IP、HOSTNAME、NETWORK、也可使用通配符

        _:匹配任意單個字符, 172.16.0._
        %:匹配任意字符;

  刪除用戶
    DROP USER 'USERNAME'@'HOST';

DCL:

  受權
    GRANT pri1,pri2,... ON DB_NAME.TB_NAME TO 'USERNAME'@'HOST' [IDENTIFIED BY 'PASSWORD'];

 

  取消受權
    REVOKE pri1,pri2,... ON DB_NAME.TB_NAME FROM 'USERNAME'@'HOST';

  查看用戶的受權

    SHOW GRANTS FOR 'USERNAME'@'HOST';

 

爲用戶設定密碼:
  一、mysql>SET PASSWORD FOR 'USERNAME'@'HOST'=PASSWORD('password');

  二、# mysqladmin -uUSERNAME -hHOST -p password 'password'

  三、mysql> UPDATE user SET Password=PASSWORD('password') WHERE USER='root' AND Host='127.0.0.1';

  注:每次更改或者設定密碼後,都須要執行FLUSH PRIVILEGES;讓mysql從新讀取配置文件到內存當中,不然新密碼沒有生效。

相關文章
相關標籤/搜索