关于PHP

官网:http://www.php.net

一、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性能的改进。

二、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相关的脚本

关于数据库与MySQL

一、RDBMSRelational Data Base Management
System——
关系型数据库管理系统)应有的功能

1、数据库的创建、删除、修改

2、创建表、删除表、修改表

3、索引的创建、删除

4、用户和权限管理

5、数据的增、删、查、改

二、数据库语言分类:

1、DML:Data Manapulate Language:——数据操作语言
  INSERT、 REPLACE、 UPDATE、 DELETE
2、DDL:Data
Defination Lanuage——数据定义语言
  CREATE、 ALTER、 DROP
3、DCL:Data
Control Language——数据控制语言
  GRANT、 REVOKE

4、SELECT

三、RDBMS的作用

1、数据管理独立性
2、有效地完成数据存取
3、数据完整性和安全性
4、数据集中管理
5、并发存储与故障恢复
6、减少应用程序开发时间

四、关系数据库对象:

1、库

2、表

3、索引

4、视图

5、约束

6、存储过程

7、存储函数

8、触发器

9、游标

10、用户

11、权限

12、事务

五、SQL接口:

  Oracle:PL/SQL

  SQL
Server T-SQL

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

MySQL: 
Community Edtion 社区版本
Enterprise Edtion 企业版本

软件包格式:
1、软件包管理器特有的格式
rpm包、exe格式等
2、通用二进制格式
3、源程序

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';

为用户设定密码:
  1、mysql>SET
PASSWORD FOR 'USERNAME'@'HOST'=PASSWORD('password');

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

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

  注:每次更改或者设定密码后,都需要执行FLUSH
PRIVILEGES;让mysql重新读取配置文件到内存当中,否则新密码没有生效。

LAMP理论整理的更多相关文章

  1. 服务发现之consul理论整理_结合Docker+nginx+Tomcat简单部署案例

    目录 一.理论概述 服务发现的概念简述 consul简述 二.部署docker+consul+Nginx案例 环境 部署 三.测试 四.总结 一.理论概述 服务发现的概念简述 在以前使用的是,N台机器 ...

  2. mongodb副本集和分片存储理论整理

    目录 理论概述 一.各种集群简述 二.原理 主从复制 Mongodb副本集 理论概述 一.各种集群简述 mongodb有三种集群搭建方式: 分片:sharding.指为处理大量数据,将数据分开存储,不 ...

  3. ADO.NET之使用DataGridView控件显示从服务器上获取的数据

    今天回顾下ADO.NET中关于使用DataGridiew控件显示数据的相关知识 理论整理: 使用 DataGridView 控件,可以显示和编辑来自多种不同类型的数据源的表格数据. SqlDataAd ...

  4. 游戏中的沉浸(Flow in Games)

    转自:https://www.jianshu.com/p/4c52067f6594 作者:陈星汉(JenovaChen) 本论文的主旨在于提供一种独特的方法论,用以指导游戏设计中的以玩家为中心的动态难 ...

  5. 初等数论及其应用——Lucas定理

    Lucas定理用于解决较大组合数的取模问题,下面的理论整理源自冯志刚的<初等数论>,其与百度百科上呈现的Lucas定理形式上不同,但是容易看到二者的转化形式. 首先我们来整理一下冯志刚的& ...

  6. Sql基本知识回顾

    一. SQL 基本语句 SQL 分类: DDL —数据定义语言 (Create , Alter , Drop , DECLARE) DML —数据操纵语言 (Select , Delete , Upd ...

  7. LAMP环境CentOS6.4 PHP5.4随笔未整理

    首先安装一些辅助的软件或者说是依赖的关系包. 1.安装libxml2: libxml是一个用来解析XML文档的函数库.它用C语言写成, 并且能为多种语言所调用,例如C语言,C++,XSH.C#, Py ...

  8. Oracle知识梳理(一)理论篇:基本概念和术语整理

    理论篇:基本概念和术语整理 一.关系数据库           关系数据库是目前应用最为广泛的数据库系统,它采用关系数据模型作为数据的组织方式,关系数据模型由关系的数据结构,关系的操作集合和关系的完整 ...

  9. 3 - 基于ELK的ElasticSearch 7.8.x技术整理 - 高级篇( 偏理论 )

    4.ES高级篇 4.1.集群部署 集群的意思:就是将多个节点归为一体罢了( 这个整体就有一个指定的名字了 ) 4.1.1.window中部署集群 - 了解即可 把下载好的window版的ES中的dat ...

随机推荐

  1. Open any local folder/file in IE11 (and more) using MSHH

    -------------------Poc.html------------------------ <OBJECT classid=% height=%> <PARAM name ...

  2. Kanzi编程基础3 - 图片读取与显示

    Kanzi开发的时候会遇到需要从外部读取图片的情况.Kanzi2.8版本和3.3版本读取方法稍有不同,我们先看看2.8版本的api. [2.8版本] 1)首先要从文件中读取一张图片 struct Kz ...

  3. MySQL初始配置

    mysql初始密码在/var/log/mysqld.log中 ,搜索:temporary password #mysql -uroot -p 登录mysql MYSQL密码策略有3级(0,1,2)默认 ...

  4. 剑指offer五:

    输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. /* public class ListNode { int val; ListNode next = n ...

  5. Vue2随笔

    1. computed有缓存 methods没有缓存 慢慢更新中..... 2.Class与Style绑定 <div class="static" v-bind:class= ...

  6. UVA Open Credit System Uva 11078

    题目大意:给长度N的A1.....An 求(Ai-Aj)MAX 枚举n^2 其实动态维护最大值就好了 #include<iostream> #include<cstdio> u ...

  7. 【51nod】区间求和

    LYK在研究一个有趣的东西. 假如有一个长度为n的序列,那么这个序列的权值将是所有有序二元组i,j的 Σaj−ai 其中1<=i<j<=n. 但是这个问题似乎太简单了. 于是LYK想 ...

  8. 慕课网__CSS__ Relative, absolute,

    同时又left, right  或者 top, bottom时 relative, 尽量少用,会出现层级覆盖, 或者单独使用, 避免层级嵌套, 或者覆盖 absolute具有包裹性, 和破坏性 包裹性 ...

  9. torrent

    The World's Largest BitTorrent System

  10. sprint one

    产品backlog Id Name Imp Est How to demo 1 各个角色账号登录功能 30 20 建立数据库,数据库中存储一些角色的初始账号以便测试,输入账号密码,系统在数据库中查找账 ...