PHP基础笔记

WBOY
WBOYasal
2016-06-23 14:30:421081semak imbas

要求:

将知识点整理到博客园 每个知识点要配上代码测试,并且代码是自己独自敲出来的。 对于安装配置操作整理成文档,对代码进行整理。

 

韩顺平推荐

研究linux内核

研究算法

研究网络技术(网管,网络安全)

研究数据库

  PHP笔记 .php目前由zend公司管理,mysql(mysql->sun->oracle)  (LAMP) 跨平台,同时支持多种数据库;效率比较高,具有良好的安全性。免费使用;开放源代码(学习别人的代码); Php4,php5开始支持面向对象 弱数据类型 Web站点:WEB站点是多个web资源的集合。简单点说,可以把web应用理解为硬盘上的一个目录,这个目录用于管理多个web资源。Web站点通常称之为web网站或web项目/工程。

 

PHP的基本概念 php是personla homepage 目前由zend公司管理 php嵌入到html代码,php脚本运行在服务端 1994(php1.0),1995(php2.0),1997(php3.0),2000(php4.0),2008(php5.0) Php6.0增加:更好的支持web2.0,支持更加好的Unicode支持,面向对象编程支持力度增加,对XMl编程支持,soap(简单对象协议)

 

l  软件开发中有个非常重要的原则:编译环境和运行环境要一致。

l  资料先在官网上找,多上英文网站

B/S和C/S的比较 开发成本低,管理维护简单,产品升级便利,对用户的培训费用低,用户使用方便,出现故障的概率小;安全性不足;客户端不能随心变化,受到浏览器的限制。 了解发送和接受到的内容。工具:httpwatch Lighttpd服务器,nginx服务器 Apache手册 管理apache,通过命令行来管理:httpd ?k start[shutdown|restart] Httpd.conf Apache目录结构 Apache服务器

bin:该目录用于存放apache常用的命令,比如httpd,apachemonitor

cgi-bin:该目录存放Linux下的常用命令.sh

conf:存放配置文件httpd.conf

error:错误记录

htdocs:存放我们的站点的文件夹(默认情况下),如果有多个站点,可以通过文件夹来分类

icons:存放图标

logs:记录apache的相关日志

manual:手册

modules:apahche模块

Apache启动时会对读httpd.conf,加载相关模块

运行机制图

 

Mpm:mutil processing module 多重处理模块

Apr:可移植运行库

Apache的生命周期 配置虚拟目录

我们把web应用放在apache默认的hdocs目录下,apache就会自动的管理。

l  添加虚拟目录节点

#欢迎页面

DirectoryIndex index.html index.htm,index.php

#站点别名

Alias /myblog “D:/myblog”

#访问权限设置

Order allow,deny

      Allow from all

l  注释DocumentRoot "D:/phpenv/apache/htdocs"

10. 访问权限设置

#表示对d盘下面的myblog文件设置权限设置

#表示先许可所有的ip访问,deny表示拒绝所有ip访问,先看allow后看deny

Order allow,deny

#先看看allow

Allow from all

案例

#先看deny再看allow,allow中的设置会覆盖deny

Order deny,allow

Allow from 218.20.253.2

#218.20开头的ip被拒绝

Deny from 218.20

11. 虚拟主机的设置

l  启用httpd-vhosts.conf:在httpd.conf文件中添加

Include

l  在\extra\httpd-vhosts.conf配置虚拟主机

#这里配置欢迎首页面

DirectoryIndex index.html index.htm index.php

options FollowSymLinks

#不许可别人修改我们的页面

AllowOverride None

#设置访问权限

Order allow,deny

Allow  from  all

l  修改hosts文件,讲www.sohu.com重定向到本地的页面

练习:

在Httpd.conf文件中配置一台www.sohu.cn的虚拟主机(一个网站,站点),然后在window系统中注册www.sohu.cn这台主机

在httpd.conf文件中启用httpd-vhosts.conf,即把#注销掉,

Include  conf/extra/httpd-vhosts.conf

假设我们的虚拟主机在c:\myweb(即一个网站)

设置http-vhosts.conf文件

在hosts文件中添加我们的ip和主机映射关系:c:/windows/system32/drivers/etc/hosts

(想想hosts的域名配置公网Ip和内网ip)

在虚拟主机的根目录中创建一个名称为itcast站点,并在该应用下创建一个index.html页面,然后把web应用映射到缺省web应用,index.html页面设置为web应用的首页

 

 

l  访问网页的流程

例如:访问http://www.sohu.com/news.html

1)     解析主机www.sohu.com

2)     查询本地hosts文件:windows/sys32/drivers/../hosts(ip127.0.0.1对应域名)

3)     如果本地Hosts文件没找到ip,到dns(域名服务器)ip 域名

4)     找到ip

5)     发送http请求包

6)     Apache解析http请求包:解析主机,解析站点名称,解析资源名称

7)     取得资源

12. 配置Apache支持php(apache在默认情况下是不会处理php)

套件软件:appserver或者wmap。该软件把我们需要环境打包安装

Php和apache的整合(即让apache可以处理php):

#让apache载入php处理模块

LoadModule php5_module ~php安装路径/php5apache2_2.dll

#phpinidir这个用于指定php的ini文件,

PHPIniDir ”~php模块安装路径”

#这个配置表示,当有一个资源是*.php的时候就由php来处理

AddType application/x-httpd-php  .php .phtml

将php.ini-devlopment文件改成php.ini。因为我们的php的设置有需要在php.ini修改。启动开发模式。

在php.ini中指定扩展模块路径extension_dir=~php安装路径/ext(里面有很多功能库,如图形库,数据库库等),指定php的扩展库路径

让php支持mysql功能:在php.ini中启用php_mysql

如果没有启动,会报错找不到相关函数。

安装mysql

安装phpmyadmin(phpmyadmin是一个站点,所以直接解压到网站根目录下面)

安装并配置discuz论坛

1)     准备一个discuz论坛代码

2)     将其解压到 网站根目录下

3)     把discuz的upload文件拷贝到discuz文件夹下

4)     修改config.inc.php.数据库配置,以及一个管理员$forumfounders=’admin

5)     访问http://localhost/discuz’

完成配置:一台服务器上有多个站点,让每个站点配置一个域名

解决方案1:

1)     通过端口来区分不同的站点:按照绑定一个站点的方法做好准备

修改httpd.conf启用虚拟主机配置Virtual hosts;配置httpd-vhosts.conf文件;在hosts文件中添加ip和域名的对应关系;

同样添加一个新的域名与该ip绑定

在httpd-vhosts.conf中添加虚拟主机127.0.0.1:81

让apache监听81端口:加一个Listen 81

在hosts文件中再添加新的域名127.0.0.1  www.***.com

浏览器访问www.***.com:81

解决方案2:

通过ServerName端口区分不同的域名

在httpd-vhosts.conf文件中添加配置:

ServerName www.***.com

DirectoryIndex news.html

PHP变量(注意数据和变量概念的不一样) php变量是以$打头定义的,php变量的数据类型是变化的,php变量的数据类型是由运行时的上下文来决定的。 php是弱数据类型编程语言(数据类型不要转来转去) php基本数据类型:整形integer,小数(浮点型)float/double(php不区分单精度和双精度),布尔类型boolean,字符串型

php复合类型:数组array,对象(object)

php特殊数据类型:null,资源类型(resource):$conn=mysql_connect(“localhost”,”root”,”root”);

      $a=890;

      Var_dump($a);

      $a=1.1;

      Var_dump($a);

?>

整型的细节讨论

a)     八进制:$a=0123;,十六进制$a=0xAH;

b)   Php不支持无符号整数,即php的整数都是有符号数。一般占4个字节。可以通过PHP_INT_SIZE可以显示我们自己的机器,一个整数用几个字节表示。Echo PHP_INT_SIZE;最大整数echo PHP_INT_MAX,如果超过了,整形会自动转换为float;(需要整理最大最小值)

c)    如果给定一个数超出了integer的范围,将会被解释为float

思考实践题:

$a;

//如果只写了$a,但是没有赋值

Var_dump($a);//NULL,表示没有分配内存空间

Echo $a;

?>

 

代码考量:健壮性,扩展性,安全性,代码的效率(并发,效率) 布尔类型的细节讨论

a)    True,false都不区分大小写

b)   下面的值会被当做false对待:

布尔值FALSE自身

整型值0

浮点型值0.0

空字符串,以及字符串“0”

不包括任何元素的数组

不包括任何成员变量的对象

特殊类型NULL(包括尚未设定的变量)

浮点型细节

a)    浮点数(也叫双精度或实数),浮点数的精度是14(从左边开始就是,第一个非0数就是精度开始;$a=0.23456789022222988;$b=0.00002222233334444;

b)   浮点数的字长和平台相关,通常最大值是1.8e308并具有14位十进制数字的精度(这个限制很重要)

字符串细节

a)    一个字符占用一个字节;$a=”hello”;占5个字节

b)   理论上,我们对字符串大小没有限制,即只有不超过内存就可

c)    我们定义字符串的时候,可以用单引号,也可以使用双引号,区别如下:双引号会解释变量的值。如果字符串包含在单引号中,除了来处理\”时,会输出\”外,其它规则都一样。

当一个变量包含在“”号中时,会输出它的值,而包含在’’号中是输出其字符本身。

Php字符类型的自动转换

变量的类型不由程序员设定的,确切地说,是由PHP根据该变量使用的上下文在运行时决定的,可以通过var_dump($变量1,$变量2…)方式来显示其类型。(PHP是不需要编译就能运行的)

10. php常量

a)    常量前面没有美元符号$

b)   常量用define()函数定义或者const,而不能通过赋值语句,在定义的时候就需要赋初值;常量的名称,一般全部大写,然后用下划线间隔;

define(“TAX_RATE”,0.08);在程序中我们不希望某个值变化,则考虑使用常量,比如圆周率,税率….

const  TAX_RATE=0.08;

c)    常量可以不用理会变量的作用域而在任何地方定义和访问;

d)    常量一旦定义就不能被重新定义或者取消定义;

e)    常量的值是标量【基本数据类型:】

11. 表达式

表达式是PHP最重要的基石。在PHP中,几乎所写的任何东西都是一个表达式。

所谓表达式,就是任何有值的东西。$a=7/3;如何将小数位数保存到2位(函数处理)

比较运算符:$a===$b全等$a!==$b非全等(值相等,并且类型也相同)

$a!=$b只有值不相等,则为true

$a!==$b只要值不相等,或者类型不相等,则为true

字符串运算符(.):当两个基本数据类型用.连接的时候,就表示把他们的内容当做字符串拼接起来。

类型运算符:instanceof用于确定一个PHP变量是否属于某一类class的实例。不能去判断是否属于基本数据类型。

12. Switch可以使用的数据类型可以是:整形,小数,字符串,布尔型,null。从我们学习if和switch分支来看,if往往是对某一个范围的判读,而switch是对一个点的判断。

PHP函数 基本概念:为完成一功能的程序指令(语句)的集合。在php中,函数分为:自定义函数,系统函数(php语句本身提供,可以直接使用的函数,php设计者认为,在项目开发的过程,很多人都会用的一些功能)。函数的基本结构:

Function 函数名(参数…){

//函数体

return  返回值;(可以没有)

}

函数的参数可以是多个,并且数据类型是php语言支持的任意类型;函数的命名跟自定义变量一样,首字母只能是_,A-Z,a-z开头,不要用数字或者特殊字符开头。

Php中页面相互调用

a)    require()和require_once()

一般放在php页面的最前面,php执行前,就先读入require所包含的页面,一旦出现错误,则退出程序(报错)。

这两个区别为,前面遇到即包含文件,后者会判断是否已经包含过了,如果包含过了,则不再包含文件。一可以节省资源,而可以避免重新定义的错误。

b)   include()和include_once()

可以放在php页面的调用函数前,当php执行到时,才会读入include所引入的php页面,如果出现错误,程序不会退出,会继续执行。

区别:前者Include遇到即包含文件,后者include_once()

 

c)    include和require区别(同时include_once和require_once区别)

相同的地方:都是可以引入别的页面

区别:include如果出现错误,程序继续运行;require出现错误,则会终止程序。

d)    使用哪个:做项目的时候,基本上使用的是require_once()

php执行时,一旦遇到函数的调用,就会开辟一个新栈 函数只是一个定义,函数执行的规则是只要一看到函数,则php就会开辟一个新栈 各个栈间的变量是相互独立的。(搞懂全局变量,局部变量)

PHP中有三种提示:

Notice:注意   waring:警告  error:错误

如果在函数中,我们不希望使用某个变量,或者是希望彻底的不再使用某个变量,则可以使用unset(变量名)来销毁变量。 在php函数中,我们可以给某个参数,赋一个默认的值。 Php默认是值传递,如果需要引用(地址)传递,使用&变量名。       $a=1>>2;

      $b=-1>>2;

      $c=1

      $d=-1

     

      Echo “a=”.a;

?>

二进制:逢二进一。使用二进制只有0,1两个数,简单易于电子方式实现。同时,通过0,1的组合可以表示任意一个数。

原码,反码,补码:

1-->  原码   00000000 00000000 00000000 00000001

 

a)    二进制的最高位是符号位:0表示整数,1表示负数

b)   整数的原码,反码,补码都一样

c)    负数的反码=它的原码的符号位不变,其他位取反

-1  -->原码:10000000 00000000 00000000 00000001

          反码:11111111 11111111 11111111 11111110

  补码:11111111 11111111 11111111 11111111

d)    负数的补码=它的反码+1

e)    0的反码,补码都是0

f)     Php没有无符号数之说,即:php中的输都是有符号的

g)    在计算机运算的时候,都是以补码的方式来运算的。意思就是不管一个数是正数还是负数,都要转成补码,然后进行运算。

Php中有4个位运算,分别是“按位与&”,“按位或|”,“按位异或^”,”按位取反~”,运算规则如下:

按位与&:两位全为1,结果为1

按位或|:两位有一个为1,结果为1

按位异或^:两位一个为0,一个为1,结果为1

按位取反~:0->1,1->0

步骤:求出补码(因为所有的运算都是以补码的方式进行的)

~2=?   -3

补码:00000000 00000000 00000000 00000010

          11111111 11111111 11111111 11111101(结果是补码)->原码

反码:11111111 11111111  11111111  11111100(先减1)

原码:10000000 0000000 0000000 000000011(-3)

2&3:首先找到2和3的补码   =2

2的补码:00000000 00000000 00000000 00000010

3的补码:00000000 00000000 00000000 00000011

2&3        :00000000 00000000 00000000 00000010

位移运算:对二进制数进行左右移动,运算规则是:

>>算数右移:低位溢出,符号位不变,并用符号位补溢出的高位

$a=1>>2;  $a=0

1的补码:00000000  00000000  00000000  00000001

1>>2     :  0000000  000000000 00000000 00000000   (0)

 

$b=-1>>2;    -1

-1的原码:10000000 00000000 00000000 00000001

-1的反码:   11111111 1111111 1111111 11111110

-1的补码: 1111111 11111111 11111111 11111111

-1

-1>>2     :  1111111 11111111 11111111 11111111 (结果为反码)

      反码:    1111111 11111111 11111111 11111110

     原码:      1000000 0000000 000000000 00000001(-1)

数组  排序  查找 为什么要数组:可以用于存放多个数据的数据类型,我们称为数组。 概念

$array[0]=123;

[0]--> 下标,关键字

$array[0]-->数组的一个元素

123  -->元素对应的值

$array--->数组名

 

在php数组中,元素存放的值可以是任意数据类型的。

$arr[true]=”hello”; ==>$arr[1]

$arr[false]=”world”;==>$arr[0];

$arr[null]=”北京”;==>$arr[null]或者$arr[“”];

如果用小数做键值,会自动截断小数部分。

我们可以使用print_r来显示数组的情况。

PHP的数组是可以动态增长的。

$a = array(2,3);

$a[2]=56;

Echo $a[2];

 

一维数组引用陷阱:$arr[bar]=”hello,world”;

Echo$arr[bar];(会把bar当做常量)

 

      $a[0]=1;$a[1]=2;$a[2]=5;

           Count($a);     =3

      $a[0]=1;$a[5]=2;$a[10]=5;

Count($a);     =3

$arr=array();

Echo count($arr);  =0

 

Unset()函数允许销毁数组中的某个元素,也可以删除某个变量,但要注意数组的关键字不会重新索引。

 

?>

数组默认传递的是值,不是地址。对象默认传递的是地址。

排序,选择排序法,插入排序法 排序是将一组数据,依指定的顺序进行排列的过程。排序是一个程序员基本功。 分类:a. 内部排序法:将需要处理的所有数据都加载到内部存储器中进行排序。包括交换式排序法(冒泡法,快速排序法),选择式排序法和插入式排序法

b.外部排序法:数据量过大,无法全部加载到内存中,需要借助外部存储器 进行排序。包括合并排序和直接合并排序法。

 

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:在PHP中使用CurlArtikel seterusnya:php call_user_func的简介