赞
踩
PHP是Hypertext Preprocessor的缩写,(超文本预处理器)是一种在服务器端运行的开源的脚本语言。
LAMP组合(Linux,Apache,MySQL,PHP),这四个产品都是公开源代码的产品
php是一门语言,用来做业务逻辑
apache为PHP提供了运行环境
linux为Apache的运行提供了平台
mysql数据库用来存储数据
多学一招:什么是wamp组合
windows+apche+mysql+php
1、静态页面和动态页面
静态页面:服务器不执行的页面
动态页面:服务器执行的页面
问题:动态网站中是否可以存放静态页面
答:可以
2、客户端和服务器端
浏览者这段是客户端
服务器端:给浏览者提供服务
3、端口和端口号 端口号的范围: 0-65535
4、BS架构和CS架构
BS:通过浏览器去访问服务器
b:browser(浏览器)
s:sever(服务器)
优点:
1、只要有浏览器就可以访问
2、开发低
缺点:
2、开发的代码都放在服务器上 胖服务器-瘦客户端
所有的web都是BS架构的
CS:通过客户端软件去访问服务器
c:client(客户端)
s:server(服务器)
优点:
1、可以开发客户端和服务器端,这时候就可以实现负载的均衡
缺点:
1、必须要安装一个软件才能去访问
2、开发成本高
例如:QQ、炒股软件
5、前台和后台
前台:浏览器看到的界面
后台:管理员看到的界面
从互联网开始崛起到现在,经历了从web1.0、2.0到web3.0的过程
Web1.0(信息共享)的主要特点在于用户单纯的获取信息
Web2.0(信息共建)更注重用户的交互作用,用户既是网站内容的浏览者,也是网站内容的制造者。
Web3.0(信息传承)通过第三方信息平台对多家网站的信息进行整合,用户在互联网上拥有自己的数据,并能在不同网站上使用
举例:
Web1.0:来到一个餐馆,老板给你上了一盘番茄炒蛋;
Web2.0:来到一个餐馆,你跟老板主动点了一份番茄炒蛋;
Web3.0:来到一个餐馆,老板见到你就问,老规矩,还要番茄炒蛋?
静态网站原理(浏览器-服务器)
动态网站原理(浏览器-服务器-数据库)
智能网站原理(浏览器-服务器【分析推荐】-数据库)
直接解压即可
启动服务
在www目录下创建demo.php页面
<?php
phpinfo();
访问服务器
访问规则:http://服务器ip地址/php页面
比如:
http://localhost/demo.php
http://127.0.0.1/demo.php
补充DOS命令
切换盘符 盘符+冒号
进入目录 cd 目录地址
Apache的命令
httpd -v 查看apache版本号 version
httpd -t 检测运行环境 test
PHP的命令
php -v PHP版本号
本质一台电脑访问另外一台电脑资源、寻址过程(IP地址、端口、域名、DNS)
在互联网上,IP地址是用来区分每台计算机的标识,但是IP记忆不友好,我们将IP地址取一个名字,一个IP对应一个名字,这个名字就称为域名。
访问过程:
步骤:
1、客户端输入域名(网址),在最近的机房做DNS解析(Domain Name Server),DNS解析就是将域名转化成IP地址
2、通过IP地址访问服务器
目标:ip地址访问服务器不方便,通过域名来访问。
hosts文件
测试
小结:
hosts文件用来做DNS解析
1、更改虚拟目录
要更改虚拟目录的位置,需要到apache的配置文件中更改(conf/httpd.conf)
在phpstudy中,httpd.conf和vhost.conf都有配置虚拟目录的指令,并且两个配置文件中都有配置虚拟目录的指令,为了测试,我们注释掉vhost.conf的引入
更改虚拟目录
提醒:项目上线以后,不可以显示目录结构
权限的练习
例题一:
Order allow,deny
Allow from all
# 允许所有请求访问
例题二:
Order allow,deny
Allow from all
Deny from all
# 拒绝所有请求访问
练习三:
Order allow,deny
Deny from all
Allow from all
# 拒绝所有请求访问
练习四:
<Directory "C:/PHP/Apache/htdocs">
Order deny, allow
Allow from 192.168.101.50
Deny from 192.168
</Directory>
# 拒绝192.168开头,但除去(192.168.101.50)的IP的访问
练习五:
<Directory "C:/PHP/Apache/htdocs">
Order deny, allow
Allow from 192.168.101.50
Deny from all
</Directory>
# 只允许192.168.101.50访问
练习六:
<Directory "C:/PHP/Apache/htdocs">
Order allow,deny
Allow from 192.168
Deny from 192.168.101.50
</Directory>
# 只允许192.168开头的,但要去除192.168.101.50 的IP访问
2、更改默认首页
在httpd.conf配置文件中
默认首页的查找顺序,从前往后。
3、更改监听端口
在httpd.conf配置文件中设置
通过Listen指令设置监听的端口
可以设置多个监听端口
访问:
http://域名:端口号/demo.php
补充:查看端口的占用情况
在命令行下使用 netstat -ano查看
在结果中查找字符串
需求:
输入www.baidu.com 打开web1的网站
输入www.sina.com打开web2的网站
配置过程:
要配置虚拟主机,需要在httpd.conf中引入虚拟主机的培训文件(vhosts.conf)
vhosts.conf配置如下
<VirtualHost _default_:80> DocumentRoot "C:\web1" #指定虚拟目录路径 ServerName www.baidu.com # 虚拟目录绑定的域名 DirectoryIndex aa.php # 默认首页 <Directory "C:\web1"> Options -Indexes -FollowSymLinks +ExecCGI AllowOverride All Order allow,deny Allow from all Require all granted </Directory> </VirtualHost> <VirtualHost _default_:80> DocumentRoot "C:\web2" ServerName www.sina.com DirectoryIndex bb.php <Directory "C:\web2"> Options -Indexes -FollowSymLinks +ExecCGI AllowOverride All Order allow,deny Allow from all Require all granted </Directory> </VirtualHost>
在host文件中做dns解析
访问结果
补充:站点、虚拟目录、虚拟主机的区别
站点:站点就是一个文件夹,用来保存与网站有关的所有素材
虚拟目录:站点+权限
虚拟主机:虚拟目录+域名
编译语言和解释语言的区别在于是否保存最终的可执行程序。
PHP执行过程
因为PHP是脚本语言,所以需要定界符
1、标准风格(推荐使用)
<?php
?>
例题
<?php
echo 'i am a boy!';
?>
提醒,如果整个页面都是PHP代码,PHP结束符是可以省略的(推荐)
<?php
echo 'i am a boy!';
2、短标记风格(默认情况下不支持,需要在php配置文件中开启支持段标记)
<?
?>
例题:
<?
echo '锄禾日当午';
?>
小结:
httpd.conf是apache的配置文件
php.ini是php的配置文件
单行注释: //和#
多行注释: /* */
echo:输出
print:输出,输出成功返回1
print_r():输出数组
var_dump():输出数据的详细信息,带有数据类型和数据长度
<?php
var_dump('abc'); //string(3) "abc"
?>
变量的本质就是内存中的一段空间
下列变量是否合法
$a 合法
$a1 合法
$1a 不合法
$_1a 合法
注意:PHP语句必须以分号结尾
<?php
$a=10;
$name='Tom';
?>
变量名可以变,将变量名存储在另外一个变量中
例题
<?php
$a=10;
$b='a';
echo $$b; //10
例题
<?php
$name1='tom';
$name2='berry';
if(rand(1,10)%2){
$name='name1'; //将变量名存储在$name中
}else{
$name='name2';
}
echo $$name;
小结:
1、rand(1,10):获取1-10的随机整数
变量的传递有值传递和地址传递(引用传递)
<?php
//值传递
$num1=10; //将10付给$num1
$num2=$num1; //将$num1的值付给$num2
$num2=20; //更改$num2
echo $num1; //10
//地址传递
$num1=10; //将10付给$num1
$num2=&$num1; //将$num1的地址付给$num2
$num2=20; //更改$num2
echo $num1; //20
小结:
1、参数的传递有两种,值传递和地址传递
2、&表示获取变量的地址
3、值传递中,一个变量变了,另一个变量没有影响,因为是两个空间
4、地址传递中,一个变量变了,另一个也变了,因为两个变量指向同一个空间
用unset()来销毁变量,销毁的是变量名,变量值由PHP垃圾回收机制销毁
<?php
$num1=10;
$num2=&$num1;
unset($num1); //销毁的是变量名
echo $num2; //10
没有变量引用的值是垃圾。
phpstudy安装完毕后,有一个phpmyadmin的管理数据库软件,默认情况下,放在虚拟目录下,这样不合理,请重新配置虚拟主机访问phpmyadmin
输入phpmyadmin.com
打开phpmyadmin管理软件
在整个运行过程中,固定不变的值
1、用define()函数定义常量
define(常量名,值,[是否区别大小写]) true表示不区分大小写,默认是false
常量名前没有$符
常量名推荐使用大写
例题:
<?php
define('NAME','tom'); //定义常量
define('PI',3.14,true); //定义常量,不区分大小写
echo NAME,'<br>',Pi;
//true表示不区分大小写,默认是区分大小写的。
2、定义常量可以用特殊字符,但是在调用的时候必须用constant
关键字调用
define('%-%','tom');
echo constant('%-%'); //通过constant获取特殊字符作为常量名的常量
3、判断常量是否定义,通过defined()判断常量是否已经定义
if(!defined('NAME')){
define('NAME','berry');
}
echo NAME; //berry
4、还可以使用const关键字定义常量
const NAME='tom';
echo NAME; //tom
小结:
1、定义常量有两种方式,define()和const
2、常量在整个运行过程中值保持不变,常量不能重新定义
3、使用constant获取特殊字符做的常量名的值
4、defined()用来判断常量是否被定义
PHP预先定义好的常量
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KekuV6zj-1669803084213)(C:/Users/SUNJIANSONG/AppData/Roaming/Typora/typora-user-images/1559355891156.png)]
例题
echo PHP_VERSION,'<br>'; //PHP版本号
echo PHP_OS,'<br>'; //PHP操作系统
echo PHP_INT_MAX,'<br>'; //PHP中整型的最大值
魔术常量它们的值随着它们在代码中的位置改变而改变
echo __LINE__,'<br>'; //获取当前行号
echo __FILE__,'<br>'; //文件的完整路径和文件名
echo __DIR__,'<br>'; //文件所在的目录
数据类型有两种:强类型和弱类型
PHP是弱类型
1、整型
存整数,PHP_INT_MAX获取整形最大值
PHP支持8、10、16机制的整数
<?php
$num1=10; //十进制
$num2=010; //八进制(数字前面加0)
$num3=0x10; //十六进制(数字前面加0x)
echo $num1,'<br>'; //10
echo $num2,'<br>'; //8
echo $num3; //16
进制转换
机制 | 缩写 | 单词 |
---|---|---|
十进制 | dec | decimalist |
二进制 | bin | binary |
八进制 | oct | octonary |
十六进制 | hex | hexdecimalist |
例题
PHP提供了进制转换函数
echo decbin(123),'<br>'; //十进制转二进制
echo bindec(1111011),'<br>'; //二进制转十进制
echo dechex(123),'<br>'; //十进制转十六进制
echo hexdec('7b'),'<br>'; //十六进制转十进制
echo decoct(123); //十进制转八进制
2、浮点型
浮点数在内存中保存的是近似值
浮点数不能参与比较
var_dump(0.9==(1-0.1)); //bool(true)
echo '<br>';
var_dump(0.1==(1-0.9)); //bool(false)
如果浮点数要比较,必须确定比较的位数
var_dump(0.9==(1-0.1)); //bool(true)
echo '<br>';
var_dump(0.1==(1-0.9)); //bool(false)
echo '<br>';
var_dump(bccomp(0.1,1-0.9,5)); //比较小数点后面5位 int(0) 0表示相等
提醒:如果一个整数超出了整形的范围,会自动的转成浮点型
3、布尔型
不能使用echo 和print输出布尔型,要使用var_dump()输出
$flag=false;
var_dump($flag); //bool(false)
4、字符串型
在PHP中单引号字符串和双引号字符串是有区别的
单引号字符串是真正的字符串
双引号字符串要解析字符串中的变量
例题
$name='tom';
echo '我的名字叫$name','<br>'; //我的名字叫$name
echo "我的名字叫$name",'<br>'; //我的名字叫tom
例题:{ }取变量值
$name='tom';
echo '$name是我的名字','<br>'; //$name是我的名字
echo "{$name}是我的名字",'<br>'; //{}表示获取变量的值(tom是我的名字)
echo "${name}是我的名字",'<br>'; //$和{只要挨着一起就可以(tom是我的名字)
输出特殊字符
echo '毛主席说:\'上课不要睡觉\'','<br>'; //转义字符 毛主席说:'上课不要睡觉'
echo '文件保存在c:\\'; //文件保存在c:\
字符串定界符
1、有<<<开头,后面跟的是标识符
2、字符串定界符的结束符必须顶格写,前面不能有任何的空白字符
3、字符串定界符分为两种,heredoc(双引号),nowdoc(单引号)
1、数组
在PHP中数组有两种形式,索引数组和关联数组
索引数组:用整数做下标,默认从0开始,后面依次加一
关联数组:用字符串做下标,通过=>符号将下标和值关联起来
例题:数组的声明
<?php //1、索引数组的声明 $stu=array('tom','berry','ketty'); //索引数组 print_r($stu); //输出数组 Array ( [0] => tom [1] => berry [2] => ketty ) echo '<hr>'; echo $stu[0],'<br>'; //tom echo $stu[1],'<br>'; //berry echo $stu[2],'<hr>'; //ketty ------------------------------------------ //2、关联数组 $emp=array('name'=>'李白','sex'=>'男','age'=>22); print_r($emp); //Array ( [name] => 李白 [sex] => 男 [age] => 22 ) echo '<hr>'; echo $emp['name'],'<br>'; //李白 echo $emp['sex'],'<br>'; //男 echo $emp['age']; //22
练习:写出数组的下标
$array=array(1=>'a','b','c','d');
print_r($array); //Array ( [1] => a [2] => b [3] => c [4] => d )
echo '<br>';
--------------------------
$array=array('a',2=>'b','c',5=>'d');
print_r($array); //Array ( [0] => a [2] => b [3] => c [5] => d )
echo '<br>';
----------------------------
$array=array('a','name'=>'b','c','sex'=>'d');
print_r($array); //Array ( [0] => a [name] => b [1] => c [sex] => d )
echo '<br>';
------------------------------
$array=array(1=>'a',1=>'b',1=>'c','d');
print_r($array); //Array ( [1] => c [2] => d )
数组的下标只能是正整数和字符串
思考如下下标
$stu[true]='tom'; //转成1
$stu[false]='berry'; //转成0
$stu[12.9]='aa'; //转成12(取整数部分)
$stu[-10]='bb'; //负数可以做下标
$stu[-12.3]='cc'; //取负整数
$stu['10']='dd'; //字符串数字转成数字
$stu['']='ee'; //空字符串也可以做下标
$stu[null]='ff'; //转成空字符串做下标
print_r($stu);
短数组语法,可以直接通过中括号声明数组
$stu=['tom','berry','ketty'];
print_r($stu); //Array ( [0] => tom [1] => berry [2] => ketty )
多学一招:在PHP7.1中可以支持数组的赋值
//例题,两个数交换
$num1=10;
$num2=20;
[$num1,$num2]=[$num2,$num1];
echo $num1,'<br>',$num2;
二维数组的声明
$stu=[ ['name'=>'tom','sex'=>'男','age'=>22], ['name'=>'berry','sex'=>'女','age'=>23] ]; echo '<pre>'; print_r($stu); //运行结果 Array ( [0] => Array ( [name] => tom [sex] => 男 [age] => 22 ) [1] => Array ( [name] => berry [sex] => 女 [age] => 23 ) )
多学一招:字符串可以通过数组的方式去调用
echo 'abc'[0],'<br>'; //a
echo 'abc'[-1],'<br>'; //c,从右边开始取第一个 7.1开始支持
小结:
1、数组在内存中一段连续的空间
2、如果要保存同一类型的多个数据就使用数组
2、对象
对象在后面专门讲解(面向对象编程)
1、资源
2、null
提醒:在PHP中 null和NULL是一样的,不区分大小写
1、自动类型转换:当提供的类型和需要的类型不一致的时候会自动进行类型转换
$num=10;
if($num){ //自动将数字转成布尔型
echo 'aa';
}else{
echo 'bb';
}
---------------------------------
echo '20'-10; //自动的将字符串转成数字
2、强制类型转换
语法:(数据类型)数据
<?php
$num1='12';
var_dump($num1,(int)$num1,(float)$num1); //string(2) "12" int(12) float(12)
其他类型和布尔之间的转换
规则:0、空为假,非0非空为真
<?php var_dump((bool)'abc'); echo '<br>'; //bool(true) var_dump((bool)''); echo '<br>'; //bool(false) var_dump((bool)'0'); echo '<br>'; //bool(false) var_dump((bool)'0.0'); echo '<br>'; //bool(true) var_dump((bool)'00'); echo '<br>'; //bool(true) var_dump((bool)'false'); echo '<br>'; //bool(true) var_dump((bool)'null'); echo '<br>'; //bool(true) var_dump((bool)1); echo '<br>'; //bool(true) var_dump((bool)0); echo '<br>'; //bool(false) var_dump((bool)-10); echo '<br>'; //bool(true) var_dump((bool)0.0); echo '<br>'; //bool(false) var_dump((bool)array()); echo '<br>'; //bool(false) var_dump((bool)array(1)); echo '<br>'; //bool(true) var_dump((bool)array(false)); echo '<br>';//bool(true) var_dump((bool)null); echo '<br>'; //bool(false)
一元运算符 | 二元运算符 |
---|---|
++ | + |
– | - |
* | |
/ | |
% (取模) |
注意:在PHP中,算术运算符只能做数学运算。
<?php
echo '10'+'20','<br>'; //30
echo '10ab'+'20cd','<br>'; //30
echo 'ab10'+'cd20','<br>'; //0
++前置:先自增再运算
++后置:先运算再自增
练习
$num=10;
$num++;
echo $num; //11
-------------------------
$num=10;
echo $num++; //10
------------------------
$num=10;
echo ++$num; //11
练习
<?php
$num=5;
echo (++$num)+(++$num)+(++$num); //21
-------------------------
<?php
$num=5;
echo ($num++)+($num++)+($num++); //18
>
>=
<
<=
==
!=
===
!==
比较运算符的运算结果是布尔值
& 与:运算符两边的表达式都要计算
| 或:运算符两边的表达式都要计算
&& 短路与:如果前面的条件不满足,后面的条件就不用计算了
|| 短路或
! 非
例题
<?php $a=5; $b=10; if($a>10 && ++$a>20) echo '你好吗'; echo $a; //5 //分析:$a>10为false, 与中只要有一个是false,另一个不用计算结果肯定是false,所以短路与++a就不计算了,结果是5 ---------------------------- <?php $a=5; $b=10; if($a<10 || ++$a>20) echo '你好吗'; echo $a; //5 //分析:短路或只要有一个为true,结果肯定是true,$a<10结果是true,后面++$a就不用计算了。
= //赋值
+= //a+=b a=a+b
-=
*=
/=
%=
echo 'aa'.'bb'; //字符串链接 aabb
错误抑制符只对表达式有效
<?php
echo @($aa+$bb); //错误抑制
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。