PHP学习总结
一、php与语言简单概述
网站web服务:
1、静态数据资源-静态页面 所有配置需要人工调整
2、动态数据资源-动态页面 某些功能配置可以自动调整
二、php编写环境
1.学习环境:phpstudy
(1)安装PHPstudy软件程序
(2)运行程序启动apache组件功能 cmd – netstat -an命令 — 80端口信息
(3)找到程序目录中WWW子目录
(4)在WWW子目录中编写一个php文件
ps:①每行代码写完都必须注意加引号“;”
②两行中间空格回车多少都无所谓,可用来分段使代码更好看
③php的代码部份全部要用半角的英文,切忌中文符号
④PHP代码的最后一行可以加也可不加分号(最好养成每行都加的习惯)
⑤给php文件命名,只用英文半脚(a-z A-Z 0-9 _-)这些字符来命名文件。文件命名不要用中文,不要用特殊附号,不要中间加空格,严格区分大小
(5)浏览器访问测试代码文件
2.写代码工具:phpstrom
二、php变量
1.变量概念:
1.可以便于修改调整数据信息
2.某些特定变量具有特定功能
变量 = 变量值
oldboy=123
2.变量几个特点
1.必须要以 开 始 。 如 变 量 x 必 须 要 写 成 开始。如变量x必须要写成 开始。如变量x必须要写成x
2.变量的首字母不能以数字开始
3.变量的名字区分大小写
4.变量不要用特殊符号、中文,_不算特殊符号
5.变量命名要有意义(别写xxx,aaa,ccc这种 变量名)
3.变量分类
可变变量
$oldboy=456 $$shu <-- $biao <-- 鼠标
外部变量:
用户通过POST方法提交过来的变量 识别提交的信息进行处理
<form action="reg.php" method="post">
ps:常用外部变量
$_COOKIE | 得到会话控制中cookie传值 |
---|---|
$_SESSION | 得到会话控制中session的值 |
$_FILES | 得到文件上传的结果 |
$_GET | 得到get传值的结果 |
$_POST | 得到post传值的结果 |
$_REQUEST | 即能得到get的传值结果,也能得到Post传值的结果 |
环境变量
可以获取主机信息/特殊功能作用
<?php
phpinfo();
?>
ps:其他常用的环境变量
$_SERVER[“REQUEST_METHOD”] | 请求当前PHP页面的方法 |
---|---|
$_SERVER[“REQUEST_URI”] | 请求的URI |
$_SERVER[“SERVER_SOFTWARE”] | 用的是哪一种服务器 |
$_SERVER[“REMOTE_ADDR”] | 客户的IP地址 |
$_SERVER[“SERVER_ADDR”] | 当前服务器的IP地址 |
$_SERVER[“SCRIPT_FILENAME”] | 主前请求文件的路径 |
$_SERVER[“HTTP_USER_AGENT”] | 当前访问这个网址的电脑和浏览器的情况 |
$_SERVER[“HTTP_REFERER”] | 上级来源(用户从哪个地址进入当前网页的) |
$_SERVER[“REQUEST_TIME”] | 当前的时间 |
三、常量
概念:长久不变的值
define(常量名, 常量值)
define('MY_NAME','PHP中文网')
注:
1.常量名可以小写,但是通常大写
2.常量名可以不加引号,但是通常加上引号。
3.在字符串中调用常量的时候,必须在引号外面
4.常量名建议只用字母和下划线
ps:一些规定好的常量
*常量名* | *说明* |
---|---|
LINE | 当前所在的行 |
FILE | 当前文件在服务器的路径 |
FUNCTIOIN | 当前函数名 |
CLASS | 当前类名 |
METHOD | 当前成员方法名 |
PHP_OS | PHP运行的操作系统 |
PHP_VERSION | 当前PHP的版本 |
TRAIT | Trait 的名字,php5.4新加 |
DIR | 文件所在的目录 |
NAMESPACE | 当前命名空间的名称(区分大小写) |
3.5、注释
因为代码是英文的、并且代码很长,时间长了人会忘。所以我们会加上注释
单行注释
// 表示单行注释
# 也表示单行注释,用的比较少
//声明一部iphone6手机的价格变量
$iphone6_price = 6088;
//显示输出手机价格
echo $iphone6_price;
多行注释
/*
作者:oldboy
时间:2048.12.23
功能:这是一个假的多行注释的例子
*/
四、php数据类型(主要几种)
就是对数据分类的一个划分
PHP中一共有八种数据类型,包括4中标量数据类型,即boolean(布尔类型)integer(整型),float/double(浮点型)和string(字符串型)两种复合数据类型,即array(数组)和object(对象), 两种特殊的数据类型:即resource(资源)与 null (无,空白)
1. 整形数据类型 int
主要有
10进制
8进制(以0开始,后面跟0-7的整数)
16进制(以0x开始,后面跟0-f的,0x的abcdef不区分大小写)
$zhengshu=1000;
$bajingzhi = 033145;
$shiliu = 0x6ff;
2.布尔数据类型
真与假分类,多会应用布尔类型进行判断
3. 字符串类型
需要用到单引号、双引号或者字界符(需要输入非常大段的字符串时使用)
$zifu='这是一串字符';
$str = "这是另一串字符";
$dingjie = <<<ABC
这里有很多字
ABC;
单双引号区别
1.双引号解析变量,但是单引号不解析变量。
2.在双引号里面插入变量,变量后面如果有英文或中文字符,它会把这个字符和变量拼接起来,视为一整个变量。一定要在变量后面接上特殊字符,例如空格等分开。
3.如果在双引号里面插变量的时候,后面不想有空格,可以拿大括号将变量包起来。
4.双引号解析转义字符,单引号不解析转义字符。但,单引号能解析’ 和\
转义字符:1.可以将有特殊意义的符号信息, 转变为不具有特殊的作用
2.可以将没有意义字符信息,转变为具有特殊意义的信息 例如: \n 换行符
5.单引号效率高于双引号,尽可能使用单引号
6.双号和单引号可以互插!!!双引号当中插入单引号,单引号当中插入变量,这个变量会被解析。
7.神奇的字符串拼接胶水——(.)点,用来拼接字符串。
8.我们将定界符声明字符串视为双引号一样的功能来看待。
4.浮点类型
可以理解为:我们数学里面的小数。
声明方式:普通声明方式/科学声明方式
$fudian = 12121.3132;
$fl = 0.8873;
var_dump($fl);
var_dump(识别变量) --> 变量信息类型
gettype(识别命令) --> 变量信息类型
五、php运算方式介绍
1.自增自减
$x++ $x-- ++$x --$x
2.比较运算符号
常用的有:> , <,>= ,<= ,==(等于,单=为赋值), !=(不等)
3.逻辑运算符号
控制多个判断条件匹配关系
常用:
&& 并且
|| 或者
! 取反
4.三元运算符
将if流程控制语句做了简化
判断条件?条件真的执行语句:条件假的执行语句;
$x ? $y = 5 : $y = 6;
5.特殊符号
反引号``
在反引号中可以放入命令信息,在执行代码时,会将命令执行结果保留下来,呈现在浏览器页面
echo `ipconfig`;
六、PHP流程控制语句
1.if条件结构流程
· if(条件表达式){ 条件满足执行动作 }
· if(条件表达式){ 条件满足执行动作 }else{ 条件不满足执行相应操作 }
· if(条件表达式){ 条件满足执行动作 }elseif(第二条件){ 条件满足执行动作 }elseif(第三条件){ 条件满足执行动作 }else{所有条件都不满足执行动作}
多个条件流程控制:
<?php
//定义一个随机变量,抵达时间,随机0点至23点
$dida = rand(0,23);
if($dida > 6 && $dida < 10){
echo '我爱泡澡';
}else if($dida >10 && $dida < 14){
echo '吃神户牛肉';
}else if($dida >=19 && $dida < 22){
echo '找一个朋友聊聊内心的寂寞';
}elseif($dida > 22 && $dida <= 23){
echo '泡澡';
}elseif($dida >= 1 && $dida <3){
echo '泡澡';
}else{
echo '睡觉或者工作';
}
?>
2.if语句嵌套形式
<?php if(判断1){ if(判断2){ 代码段 1 }else{ 代码段2 } }else{ if(判断3){ 代码段3 }else{ 代码段4 } } ?><?php
//0表示工作秘书,1表示生活秘书
//用代码模拟随机产生当前的工作是生活秘书的还是工作秘书的
$mishu = rand(0,1);
if($mishu){
//下雨和不下雨的状态,随机产生
//下雨状态为1
//不下雨状态为0
$xiyu = rand(0,1);
if($xiyu){
//是否购买雨伞
$you = rand(0,1);
if($you){
echo '下雨天,已购买不用买雨伞';
}else{
echo '下雨天,未购买,需要买雨伞';
}
}else{
//是否购买防晒霜
$you = rand(0,1);
if($you){
echo '没下雨,有防晒霜';
}else{
echo '没下雨,需要准备防晒霜';
}
}
}else{
//是否准备好了会议议程
$shifou = rand(0,1);
if($shifou){
echo '已准备好,可以随时出发';
}else{
echo '没有准备好,需要打印,延迟出发';
}
}
此例结果分析
1-取生活秘书——1-下雨状态——1-购买雨伞————输出–下雨天,已购买不用买雨伞
100 1生活秘书——0未下雨——0未买防晒霜————输出–没下雨,需要准备防晒霜
101 ——————————————————————输出–没下雨,有防晒霜
110 ———————————————————————输出–雨天,未购买,需要买雨伞
00 ————————————————————————输出–没有准备好,需要打印,延迟出发
3.while循环语句
语句结构: 条件为真会一直循环/条件为假会终止循环
while(条件){ 操作动作 }: 先判断条件再执行动作
do{ 动作 }while(条件信息): 先执行动作在判断条件
<?php
//定义需要往返的次数,老外喜欢从0开始计数,所以系统也是从0开始
$count=0;
//while后面接布尔值判断,为真执行,为假停止
//$count小于100的时候执行,也就是$count为0至99的时候执行.
//如果$count不小于100了,循环停止执行后续的代码
//循环开始处
while($count < 100){
echo "这是王总第 $count 次出差 <br />";
//每次执行让$count+1,这样的话,就不会产生$count永远小于100的情况了
$count++;
}
//循环结束
?>
4.switch语句
语句结构:switch(变量){ //字符串,整形
case 具体值1:
执行代码1;
break;
case 具体值2:
执行代码2;
break;
case 具体值3:
执行代码3;
break;
defult:
}
注:break和default是可选的;不要在case后面写成分号,后面是冒号;不要在case后面写判断区间
5.for循环语句
语句结构:
for(条件01: 初始值;条件02: 判断信息(控制循环次数);条件03: 变量做自增或者自检运算)
需要执行的代码段;
<?php
for($i=1;$i<=10;$i++)
echo ‘分手后第’.$i.’年, 我全都忘了你的样子<br />’;
}
?>
6.goto循环语句
作用:标记一个位置点, 可以利用goto代码直接跳转到代码指定标记点,执行动作
忽略一些没用操作/可以某些时候打破循环
<?php
for ($i=0;$i<100;$i++){
echo '第'.$i.'每周往返北京大连<br />';
if($i == 17){
goto end;
}
}
end:
echo '集团公司要求停止此项';
?>
七、PHP函数功能介绍
1.函数定义方法
函数的英文叫做:function,而function的解释项中有另外一个含义”功能”,函数就是功能,调用一个函数就是在调用一个功能
2.函数信息调用方法
语法规范如下:
Function 函数名(参数名1=[值1], 参数名2=[值2] , 参数名n=[值n])
{
函数中的功能体
[return 返回值]
}
3.常见函数信息
八、PHP数组与数据结构
PHP数组概念
英文是array,一组数据类型信息集合,是一个复合数据类型
多个不同数据类型信息统一赋值给一个变量, 这个变量成为数组
数组包含内容:
① 数据名称
② 数据元素信息
③ 数据下标信息 通过下标可以调取指定元素信息
数组定义方法
$shu = array(1 , 1.5 , true ,'天王盖地虎,小鸡炖蘑菇');
数组元素信息如何调取
用for循环遍历索引数组
$num = array(1,2,3,4,5,6,7,8,9,10);
for($i = 0 ; $i < count($num) ; $i++){
echo $num[10].'<br />';
}
用数组函数调用
$mingren = array("邓超", "黄晓明", "宁泽涛", "钟汉良");
$dc = array_shift($mingren);
echo $dc .'<br />';
print_r($mingren);
九、PHP正则符号信息
作用
正则符号主要用途就是匹配信息的
PHP的正则表达示定界符的规定如下:定界符,不能用a-zA-Z0-9\ 其他的都可以用。必须成对出现,有开始就有结束
/中间写正则/
$中间写正则$
错误的书写方式
(中间写正则)
A中间写正则A
如何进行正则匹配
正则表达式格式:
preg_match ( string $正则 , string KaTeX parse error: Expected 'EOF', got '&' at position 12: 字符串 , array&̲结果] )
功能:根据 正 则 变 量 , 匹 配 正则变量,匹配 正则变量,匹配字符串变量。如果存在则返回匹配的个数,把匹配到的结果放到$结果变量里。如果没有匹配到结果返回0。
和正则匹配有关函数
我们常用的正则函数有:
序号 | 函数信息 | 说明 | 实例 |
---|---|---|---|
1 | preg_filter | 执行一个正则表达式搜索和替换 | |
2 | preg_grep | 返回匹配模式的数组条目 | |
3 | preg_match | 执行一个正则表达式匹配 | |
4 | preg_match_all | 执行一个全局正则表达式匹配 | |
5 | preg_replace_callback_array | 传入数组,执行一个正则表达式搜索和替换使用回调 | |
6 | preg_replace_callback | 执行一个正则表达式搜索并且使用一个回调进行替换 | |
7 | preg_replace | 执行一个正则表达式的搜索和替换 | |
8 | preg_split | 通过一个正则表达式分隔字符串 |
十、PHP文件系统管理
1.fopen、fread、fcloes操作
file_get_contents打开文件
$filename = 'NoAlike.txt';
$filestring = file_get_contents($filename);
echo $filestring;
注:file_get_contents打开文件的方式简单、粗暴。
resource fopen ( string $文件名, string 模式)
string fread ( resource $操作资源, int 读取长度)
bool fclose ( resource $操作资源 )
$fp = fopen('NoAlike.txt', "r");
注:fopen的模式的几种用法
r | 只读方式打开,将文件指针指向文件头。 |
---|---|
r+ | 读写方式打开,将文件指针指向文件头。 |
w | 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建 |
w+ | 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建 |
a | 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建 |
a+ | 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之 |
x | 创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建 |
x+ | 创建并以读写方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建 |
2.php 创建和修改文件内容
ile_put_contents写入文件:
int file_put_contents ( string $文件路径, string $写入数据])
$data = "在PHP中文网学好PHP,妹子票子不再话下!";
$numbytes = file_put_contents('binggege.txt', $data);
注:
① 文件不存在时, 可以进行创建
② 文件已经存在时,原有文件内容会被清空
3.创建临时文件
//创建了一个临时文件
$handle = tmpfile();
//向里面写入了数据
$numbytes = fwrite($handle, '写入临时文件');
//关闭临时文件,文件即被删除
fclose($handle);
4.php移动、拷贝和删除文件
重命名文件:
bool rename( 旧 名 , 旧名, 旧名,新名);
//旧文件名
$filename = 'test.txt';
//新文件名
$filename2 = $filename . '.old';
//复制文件
rename($filename, $filename2);
复制文件:
bool copy(源文件,目标文件)
//旧文件名
$filename = 'copy.txt';
//新文件名
$filename2 = $filename . '_new';
//修改名字。
copy($filename, $filename2);
删除文件:
bool unlink(指定路径的文件)
$filename = 'test.txt';
if (unlink($filename)) {
echo "删除文件成功 $filename!\n";
} else {
echo "删除 $filename 失败!\n";
}
5.检测文件属性函数
file_exists('install.lock')
常用文件属性函数:
bool file_exists ( $指定文件名或者文件路径)
功能:文件是否存在。
bool is_readable ( $指定文件名或者文件路径)
功能:文件是否可读
bool is_writeable ( $指定文件名或者文件路径)
功能:文件是否可写
bool is_executable ( $指定文件名或者文件路径)
功能:文件是否可执行
bool is_file ( $指定文件名或者文件路径)
功能:是否是文件
bool is_dir ( $指定文件名或者文件路径)
功能:是否是目录
void clearstatcache ( void )
功能:清楚文件的状态缓存
十一、php实现文件留言本
文件结构:
index.php —展示输入框和留言内容
write.php —向message.txt写入数据
message.txt —存入聊天内容
index.php
<?Php
//设置时区
date_default_timezone_set('PRC');
//读了内容
@$string = file_get_contents('message.txt');
//如果$string 不为空的时候执行,也就是message.txt中有留言数据
if (!empty($string)) {
//每一段留言有一个分格符,但是最后多出了一个&^。因此,我们要将&^删掉
$string = rtrim($string, '&^');
//以&^切成数组
$arr = explode('&^', $string);
//将留言内容读取
foreach ($arr as $value) {
//将用户名和内容分开
list($username, $content, $time) = explode('$#', $value);
echo '用户名为<font color="gree">' . $username . '</font>内容为<font color="red">' . $content . '</font>时间为' . date('Y-m-d H:i:s', $time);
echo '<hr />';
}
}
?>
<h1>基于文件的留言本演示</h1>
<form action="write.php" method="post">
用户名:<input type="text" name="username" /><br />
留言内容:<textarea name="content"></textarea><br />
<input type="submit" value="提交" />
</form>
write.php
<?php
//追加方式打开文件
$fp=fopen('message.txt','a');
//设置时间
$time=time();
//得到用户名
$username=trim($_POST['username']);
//得到内容
$content=trim($_POST['content']);
//组合写入的字符串:内容和用户之间分开,使用$#
//行与行之间分开,使用&^
$string=$username.'$#'.$content.'$#'.$time.'&^';
//写入文件
fwrite($fp,$string);
//关闭文件
fclose($fp);
header('location:index.php');
?>
十二、php实现文件上传
php文件上传的步骤:
1、系统返回的错误码详解
2、自定义判断是否超出文件大小范围
3、判断后缀名和mime类型是否符合
4、生成文件名
5、判断是否是上传文件
6、移动临时文件到指定位置
1. index.html 文件
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>
<body>
<h1>上传文件</h1>
<form action="chuli.php" method="post" enctype="multipart/form-data">
请选择文件:<input type="file" name="file" /><input type="submit" value="上传" />
</form>
</body>
</html>
2. chuli.php
<?php
//取文件信息
$arr = $_FILES["file"];
//var_dump($arr);
//加限制条件
//1.文件类型
//2.文件大小
//3.保存的文件名不重复
if(($arr["type"]=="image/jpeg" || $arr["type"]=="image/png" ) && $arr["size"]<10241000 )
{
//临时文件的路径
$arr["tmp_name"];
//上传的文件存放的位置
//避免文件重复:
//1.加时间戳.time()加用户名.$uid或者加.date('YmdHis')
//2.类似网盘,使用文件夹来防止重复
$filename = "./images/".date('YmdHis').$arr["name"];
//保存之前判断该文件是否存在
if(file_exists($filename))
{
echo "该文件已存在";
}
else
{
//中文名的文件出现问题,所以需要转换编码格式
$filename = iconv("UTF-8","gb2312",$filename);
//移动临时文件到上传的文件存放的位置(核心代码)
//括号里:1.临时文件的路径, 2.存放的路径
move_uploaded_file($arr["tmp_name"],$filename);
echo "文件上传成功";
}
}
else
{
echo "上传的文件大小或类型不符";
}
?>
enctype=“multipart/form-data”>
请选择文件:
2. chuli.php
<?php
//取文件信息
$arr = $_FILES["file"];
//var_dump($arr);
//加限制条件
//1.文件类型
//2.文件大小
//3.保存的文件名不重复
if(($arr["type"]=="image/jpeg" || $arr["type"]=="image/png" ) && $arr["size"]<10241000 )
{
//临时文件的路径
$arr["tmp_name"];
//上传的文件存放的位置
//避免文件重复:
//1.加时间戳.time()加用户名.$uid或者加.date('YmdHis')
//2.类似网盘,使用文件夹来防止重复
$filename = "./images/".date('YmdHis').$arr["name"];
//保存之前判断该文件是否存在
if(file_exists($filename))
{
echo "该文件已存在";
}
else
{
//中文名的文件出现问题,所以需要转换编码格式
$filename = iconv("UTF-8","gb2312",$filename);
//移动临时文件到上传的文件存放的位置(核心代码)
//括号里:1.临时文件的路径, 2.存放的路径
move_uploaded_file($arr["tmp_name"],$filename);
echo "文件上传成功";
}
}
else
{
echo "上传的文件大小或类型不符";
}
?>