Heim  >  Artikel  >  Backend-Entwicklung  >  PHP基础笔记

PHP基础笔记

WBOY
WBOYOriginal
2016-06-23 14:30:421043Durchsuche

要求:

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

 

韩顺平推荐

研究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.外部排序法:数据量过大,无法全部加载到内存中,需要借助外部存储器 进行排序。包括合并排序和直接合并排序法。

 

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:在PHP中使用CurlNächster Artikel:php call_user_func的简介