PHP 基础
php 基础知识
php 简介
- php 被译为个人主页:超文本预处理器。它是一种运行在服务器端的脚本语言,必须在服务器环境下才能运行。
php 运行环境配置
- 搭建方式
- 一键搭建
- 手动搭建
- 修改 php 配置文件(php.ini)
- 将时区修改为系统时区:
date.timezone = PRC
- 将时区修改为系统时区:
基本语法
-
第一个 php 程序
<?php echo "我是一朵小红花!"; ?>
-
解决 php 程序中文汉字乱码问题
在 php 的代码首行加入如下代码
<?php header('Content-Type: text/html; charset="utf8"'); ?>
-
-
php 注释
-
单行注释
<?php // 此处为单行注释 # 此处也为单行注释 ?>
-
多行注释
<?php /* 此处为多行注释 */ ?>
-
-
常量
- 使用 define() 函数定义:
define(name, value, case_insensitive);
- CONST 关键字定义:
CONST PI = 3.14125926;
- 常量输出方式
echo PI;
echo constant("PI");
- 使用 define() 函数定义:
-
变量
- 使用
$
符号定义:$elem = "value";
- 输出:
echo $elem;
- 使用
-
运算符
- 算术运算符:
+,-,*,/,%,++,--
- 赋值运算符:
=,+=,-=,*=,/=,%=,.=
- 比较运算符:
==,===,!=,!==,>,<,>=,<=
- 逻辑运算符:
&&,||,!
- 字符串连接运算符:
.
- 算术运算符:
-
输出:
echo "输出内容"
-
日期和时间
-
格式化
Y: 4位数字年份 y: 2位数字年份 m: 前导 0 月份 n: 无前导 0 月份 d: 前导 0 日期值 j: 无前导 0 日期值 D: 前三字母星期数 w: 0~6星期数,0 为星期日 M: 前三字母星期数 H: 24 小时制时值 h: 12 小时制时值 i: 分钟值 s: 秒值
-
获取当前时间戳函数:
$time = strtotime('2022-12-12');
-
-
流程控制语言
-
分支语句
-
if
-
if-else
-
if-else if-else
-
switch:
switch(表达式){case 值1: {语句块;bread;}...[default:{语句块;}]}
-
-
循环语句
- for:
for(表达式1; 循环条件; 迭代器){代码块}
- while:
while(循环条件){代码块}
- do...while():
do{代码块}while(循环条件)
- for:
-
-
数组
-
定义:
$arrName = array(...);
-
获取数组长度:
$len = count($arrName);
-
数组类型
- 索引数组:
array('a', 'b','c');
- 关联数组:
array("index1"=>"value1", "index2"=>"value2");
- 混合数组:
array('index1'=>'value',2,3)
- 多维数组:
array(0 => ('NO'=>'202212110','name'=>'zs'),1 => ('NO'=>'202212111', 'name'=>'ls'));
- 索引数组:
-
数组遍历
-
循环遍历
<?php $arr = array(1,2,3,4); for ($i = 0; $i < count($arr); $i++) { echo $arr[$i]; } ?>
-
each() 函数遍历
<?php $stu = array('No'=>'20221212110','name'=>'zs'); for ($i = 0; $i < count($stu); $++) { $print = each($stu); echo "$print[key]=>$print[value]"; } ?>
-
foreach() 遍历
<?php $stu = array('No'=>'20221212110','name'=>'zs'); foreach ($stu on $key => $value) { echo "$key => $value"; } ?>
-
-
表单数据提交
- 基本数据提交
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>表单数据提交</title>
</head>
<body>
<form method="post" action="up.php">
用户名:<input type="text" name="uname" id="uname"><br />
性别:<input type="radio" name="sex" id="radio1" value="男">
<!-- 单选按钮 -->
<input type="radio" name="sex" id="radio2" value="女"><br />
爱好:<input type="checkbox" name="like[]" value="0">看球
<!-- 多选框 -->
<input type="checkbox" name="like[]" value="1">看书
<input type="checkbox" name="like[]" value="2">跑步<br />
<!-- 下拉框 -->
下拉框:<select name="slt" id="slt">
<option selected="selected">请选择城市</option>
<option>南昌</option>
<option>北京</option>
</select><br />
文本域:<textarea name="tarea" id="tarea"></textarea><br />
<!-- 文件 -->
单文件:<input type="file" name="file1" id="file1"><br />
<input type="submit" value="提交"> <input type="reset" value="重置">
</form>
<!-- php处理程序 -->
<?php
// 使用系统数组:$_POST[] 和 $_GET[]获取前端表单提交的数据
header("Content-Type: text/html; charset=utf8");
// 用户名
$uname = $_POST['uname'];
// 单选按钮
// 使用 isset(elem) 函数判断是否设值(单选框或复选框)
$sex = '';
if (isset($_POST['sex'])) {
$sex = $_POST['sex'];
}
// 复选框
$likes = [];
if (isset($_POST['like'])) {
// 使用 implode(tag,elem) 函数,将数组转为字符串
$likes = implode($_POST[" ",'like'])
}
// 下拉框
$city = $_POST['slt'];
// 文本域
$tarea = $_POST['tarea'];
// 文件
echo $_FILES['file1']['name'].$_FILES['files']['type'].$_POST['file1']['rount($_POST['files']['size']/1024, 2)'].$_FILES['files']['tmp_name']
?>
</body>
</html>
- 简单文件上传:form 添加:
enctype="multipart/form-data"
<html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>简单文件上传</title>
<body>
<!-- enctype="multipart/form-data":设置MIME编码,实现文件上传-->
<form action="up.php" method="post" enctype="multipart/form-data">
<p>
上传文件:<input type="file" name="file1" id="file1" />
</p>
<p>
<input type="submit" value="上传" />
<input type="reset" value="重置" />
</p>
</form>
</body>
</html>
<?php
// 设置字符集
header("Content-Type: text/html; charset=uft8");
// 获取文件的相关信息
$name = $_FILES['file1']['name'];
$type = $_FILES['file1']['type'];
$size = $_FILES['file1']['size'];
$size = round($size/1024, 2)."kB";
// 获取上传文件临时存储信息
$tmpname = $_FILES['file1']['tmp_name'];
// 使用 iconv("UFT-8", "GB2312",filename) 函数,将 filename 的中汉字编码由 UTF-8 转为 GB2312
$name = iconv("UTF-8", "GB2312", $name);
// 将上传的文件保存到指定的文件夹 upload(file,url) 中
move_uploaded_file($tmpname, "upload/$name");
?>
- 多文件上传:将文件域元素的 name 属性的值由 file1 改为 file[]
<html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>简单文件上传</title>
<body>
<!-- enctype="multipart/form-data":设置MIME编码,实现文件上传-->
<form action="up.php" method="post" enctype="multipart/form-data">
<p>
上传文件:<input type="file" name="file1" id="file1" />
</p>
<p>
<input type="submit" value="上传" />
<input type="reset" value="重置" />
</p>
</form>
</body>
</html>
<?php
header("Content-Type: text/html; charset=utf8");
// 获取所有文件名
$filenameGrp = $_FILES['file']['name'];
// 获取所有文件临时上传的信息
$tmpnameGrp = $_FILES['file']['tmp_name'];
// 计算文件的数量
$fcount = count($filenameGrp);
for ($i = 0; $i <= $fcount; $i++) {
// 将文件名的中汉字编码改为 “GB2312”
$fname = iconv("UTF-8", "GB2312", $filenameGrp[$i]);
move_uploaded_file($tmpnameGrp[$i], "upload/$fname");
}
?>
- 大文件上传
/*
1.修改 php.ini 的配置文件
1.1 设置允许上传文件大小的最大值:upload_max_filesize = 20MB;
1.2 设置允许 POST 方法提交数据的最大数据量:post_max-size = 50MB;
2.编写 html 和 php 文件。
*/
-
php 图片处理相关函数
- 创建一幅真彩色图像:
imagecreatetruecolor(int width, int height);
- 新建一个基于调色板的图像:
imagecreate(int width, int height);
- 为一幅图像分配颜色:
imagecolorallocate(image, int red, int green, int blue);
- 使用指定颜色填充指定区域:
imagefill(resource image, int top_x, int left_y, int color);
- 设置一个单一像素的颜色:
imagesetpixel(resource image, int x1, int y1, int x2, int y2, int color);
- 在指定图像中输出任意字符:
imagettftext(resource image, int fontsize, int angle, int x, int y, int color, string fontType, string text);
- 以 png 格式将图像输出到浏览器或文件:
imagepng(resource image[,string filename]);
- 销毁一幅图像:
imagedestroy(resource iamge);
- 创建一幅真彩色图像:
-
注册功能实现
- 设计注册界面
- 编写注册 html 页面
- 设计图片验证码
- 创建图片验证码
- 图片验证码的插入和刷新
- 使用 SESSION 机制实现数据的传输
- 连接数据库
- 进行相关验证
// 1.注册界面 <html> <meta http-equiv="Content-Type" content="text/html; charset=utf8" /> <head> <title>注册功能</title> </head> <body> <form method="post" action="zc.php"> <table> <thead> <th>注册</th> </thead> <tbody> <tr> <td>邮箱:</td> <td><input type="text" name="email" id="email"></td> </tr> <tr> <td>昵称:</td> <td><input type="text" name="uname" id="uname"></td> </tr> <tr> <td>密码:</td> <td><input type="password" name="psd" id="psd"></td> </tr> <tr> <td>验证码:</td> <td><input type="text" name="yzm" id="yzm"> <img sre="yzm.php" name="yzm" id="yzm"></td> </tr> <tr> <td><input type="submit" value="注册"></td> <td><input type="reset" value="重置"></td> </tr> </tbody> </table> </form> </body> </html> // 2.生产图片验证码 php <?php session_start(); // 设置内容类型 header("Content-Type: image/png"); // 图片大小 $image_weight = 100; $image_height = 25; /* 获取以字母和数字组成的字符串: 使用 range(low, high, step) 函数创建一个包含指定范围的元素的数组。 low(必选):最低值(必选),high:最高值,step(可选):步数 合并数组:array_merge(array $array1[, $array2...]) */ $numberArray = range(1, 9); $characterArray = range("A", "Z"); $resultArray = array_merge($numberArray, $characterArray); $len = count($resultArray); $string = ""; for ($i = 0; $i < 4; $i++) { // 使用 rand() 函数生成指定范围内的随机整数:rand(min, max) $index = rand(0, $len - 1); $string = $string.$resultArray[$index]; } /* php 画图步骤: 1.创建画布 2.定义颜色 3.填充颜色/文字信息 4.生成图片 5.销毁图片 */ // 1.创建画布 $image = imagecreatetruecolor($image_weight, $image_height); // 2.定义颜色 $white = imagecolorallocate($image, 255, 255, 255); $black = imagecolorallocate($image, 0, 0, 0); // 3.填充颜色 imagefill($image, 0, 0, $white); // 字体 $fontType = "times.ttf"; for ($i = 0; $i < 100; $i++) { // 设置单一像素 imagesetpixel($image, mt_rand(0, $image_weight), mt_rand(0, $image_height),mt_rand(0, $image_weight), mt_rand(0, $image_height), $black) } // 画线段 for ($i = 0; $i < 2; $i++) { imageline($image, mt_rand(0, $image_weight), mt_rand(0, $image_height),$black) } // 4.生成图片 imagepng($image); // 存储数据 $_SESSION['elemName', $string] // 5.销毁图片 imagedestroy($image); ?> // 3.使用 session 机制 <?php // 开启 session 机制 session_start(); $elemName = $_SESSION['elemName']; ?> // 4.连接数据库操作 <?php $conn = mysqli_connect('localhost', 'root', 'password', 'databaseName', '3307'); if ($conn) { echo "连接数据库成功!"; $sql = "select * from student where id = '1'"; $result = mysqli_query($conn, $sql); $num = mysqli_num_rows($result); if ($num) { echo "$result"; } else { echo "未查到任何内容!"; } } else { echo "连接数据库失败!"; } ?>
- 设计注册界面
-
php 常用方法
- 小写字母转为大写:
strtoupper(string);
- 大写字母转为小写:
strtolower(string);
- 小写字母转为大写:
-
php 操作数据库
- 常用方法
- 连接 MySQL 数据库服务器:
mysqli_connect('localhost','root','password'[,'databaseName','port','socket'])
; - 选择打开指定的数据库或更改已选择的数据库:
mysqli_select_db(connection, databaseName);
- 执行 SQL 语句:
mysqli_query(connection, SQL);
- 获取返回结果集中的记录的记录数:
mysqli_num_rows(resultSet);
- 关闭指定数据库的连接:
mysqli_close(connection)
;
- 连接 MySQL 数据库服务器:
- 常用方法
复习题
选择题
-
统计数组元素个数的函数:count()
-
修改服务器允许上传文件的最大值,需要修改 php.ini 文件中的:upload_max_filesize 属性,允许表单的POST 提交方式能够提交的最大值,需要修改 php.ini 文件中的:post_max_size 属性,并且 post_max_size 必须大于 upload_max_filesize 。
-
下面代码输出的结果是:
学习编程贵在坚持!
。注意感叹号
<?php echo "学习编程贵在坚持!"; ?>
-
日期时间函数 date() 的格式:
Y: 4 位数字的年份 y: 2 位数字的年份 m: 2 位数字的月份(有前导 0) n: 无前导 0 的月份 d: 有前导 0 的日期值 j: 无前导 0 的日期值 D: 返回 前三字母的星期格式 w: 返回数字型的星期,0 表示星期天 M: 返回前三字母的月份值 H: 返回 24 小时制的时值 h: 返回 12 小时制的时值 i: 返回含前导 0 的分钟值 s: 返回含前导 0 的秒钟值
-
连接 mysql 数据库的方法:
mysqli_connect('localhost','root','password','mysqlname')
,选择并打开指定 MySQL 数据库的方法:mysqli_select_db($conn,'mysqlname')
,执行 sql 语句的方法:mysqli_query($conn, $sql)
。 -
下面代码输出的结果:2。
<?php $arr = array(0=>1, 1=>2, 'hi'=>'hello'); echo $arr[1]; ?>
-
语句
for($i = 0; $i == 1; $i++)
和for($i = 0; $i = 1; $i++)
执行的次数分别是:0 和 无限。 -
php 中将大写字母转为小写字母的函数:
strtolower()
,将小写转为大写的函数是:strtoupper()
。 -
php 中如何声明变量:以
$
开头。 -
下面代码运行之后,
$b
的值为:10。<?php $a = 8; $a++; $b = ++$a; echo $b; ?>
-
php 中实现文件上传功能,需要使用哪个全局变量:
$_FILES[]
-
获取当前运行脚本所在的文档根目录:
$_SERVER['DOCUMENT_ROOT']
。 -
访问 MySQL 数据库库时,从查询记录结果中,获取记录数的方法:
mysqli_num_rows()
。 -
删除数组中的某个元素的方法:
unset()
。
判断题
- php 和 html 可以混合编程。(对)
- php 的配置文件是 php.ini。(对)
- php 的普通变量,由 ‘ $’ 符号与变量名组成,其中变量名的命名规则和标识符的命名规则一致。(对)
- 在 php 中获取表单提交数据的全局变量:
$_GET[] 和 $_POST[]
。(对) - session 必须先启用才能使用,使用 php 的内置函数 session_start() 来开启 session。(对)
- php 中的键名可以重复,但值不能重复。(错)
- 在 php 中通常用单引号、双引号和界定符表示字符串。(对)
- php 中的数组元素类型必须相同,且只能是基本数据类型。(错)
- php 属性强类型语言,变量需要先声明再使用,且必须指定数据类型。(错)
- php 标识符由字母、数字或下划线组成,以字母或下划线开头。(对)
- 函数
is_array()
用于测试变量是否为数组。(对) - implode() 函数将字符串转为数组,exploade() 将数组转为字符串。(错)
- php中,当include语句包含的文件不存在时,会产生一个致命错误,脚本仍然会被执行。(错)
- while、do⋯while、for、foreach都是PHP循环语句。(对)
填空题
- 假设生成图片验证码的PHP文件是yzm. php,在表单界面文件中加载验证码的代码是:
<img src="yzm.php">
。 - MySQL数据库的根用户是:
root
。 - php 中获取系统当前日期时间的函数是:
getdate() 或 date()
。 - 假设页面中某个元素的ID是psd,获取该页面元素的脚本代码是:
document.getElementById('psd')
。 - 使用脚本设置验证码文本框中的文本为红色,需要的代码是:
document.getElementById('useryzm').style.color = '#f00'
。 - 能够在同一网站不同页面之间传递数据的机制是:
session
,在程序代码开始处启用该机制时需要使用的代码是:session_start()
。 - 如果今天是星期四,要获取到日期中的信息“Thu”,需要使用的代码是:
date('D')
。 - 函数 rand(0,20)的作用是:产生 0 到 20 之间的随机数。
- round(20/3,2)的结果是:6.67,round(20/3,2)的结果是:6.00。
- 浏览器向某个服务器发出页面请求时,无论请求的是静态页面还是动态页面,该请求一定要通过:http 协议发送出去。
- 合并一个数组各个元素值,使用的函数是:
implode()
。 - 表单提交数据时,若method取值为get,则数据保存到系统数组:
$_GET
里面。
简答题
-
代码如下:
为手机号文本框设置属性
pattern="1[3|5|7|8][0-9]{9}"
,的作用是什么?设置手机号码的合法格式:第一位是 1,第二位是 3、5、7、8中的一个,第三位到第十一位是 9 个随意组合的数子。
何时对手机号的合法性进行验证?
用户输入手机号后,在点击“提交” 按钮时进行合法验证。
-
代码及说明如下:
//$uname是服务器端的变量,存放着用户名称 //uname是文本框的id include’zhuce. html; echo"<script>"; echo"document.getElementById("uname’). value=’$uname’;"; echo"</script>";
代码的作用是:
在服务器导入zhuce.html 文件,并输出脚本语句,将变量
$uname
的内容传递给文本框元素uname
。 -
代码如下:
$arr=array("I","am","a","student"); $ whole= implode('_',$ arr); echo$whole;
代码输出的结果是:
I_am_a_student
-
代码如下
$color=imagecolorallocate($img, 0,0,255);
代码实现的功能:
为 $img 指定的图像分配颜色,并且为蓝色。
-
创建表单和表单元素的代码如下,可以通过哪种方式访问表单元素user 的值?
<form name="forml″ method="post" action="#″> 用户名:<input name="user"type="text" size="12"> <input type="submit"name="submit" value="提交"> </form>
$_POST['user']
-
代码如下:
if(document.getElementById('rdiv'). style. display="none") {document.getElementById('rdiv'). style. display=="block";} else {document.getElementById('rdiv'). style. display="none"; }
代码中存在什么错误?
在进行条件判断时,应该使用双等号 ‘== ’,在条件成立时,改变 'rdiv' 元素的显示状态,应该用赋值号 ‘=’ 赋值。
-
为何不能将yzm. php文件中存放验证码字符的变量$string直接应用到zhuce, php文件中?
因为变量具有生命周期,$string 变量只能在文件 yzm.php 起作用,一旦离开该文件,原来存放的所有内容都将消失,变量变成未定义状态。
-
写出以下代码返回的结果:
<? pha function p() return 1; ) if(p()) echo"false"; }else{ echo"true"; ?>
false
编程题
-
创建包含所有大写字母以及数字字符的数组,从该数组中随机产生4个字符,保存在变量$str中并输出;
<?php $number = range(0,9); $character = range("Z","A"); $result = array_merge($number, $character); $string = ""; $len = count($result); for ($i = 0; $i < 4; $i++) { $index = rand(0,$len - 1); $string = $string.$result[$index]; } ?>
-
连接打开MySQL数据库,判断:若连接成功,则打开其中数据库student,查询数据表stullse中性别(列名sex)为男(列值为m)的记录,获取查询结果中的记录数,判断记录数若为0,则输出“该班没有男生”,否则输出“男生人数是…人”;若连接为成功,输出“本次连接数据库失败”。
<?php $conn = mysqli_connect('localhost', 'root','password','3307'); if ($conn) { if (mysqli_select_db($conn, 'student')) { $sql = "select * from stullse where sex ='男'"; $result = mysqli_query($conn, $sql); $ rows = mysqli_num_row($result); if (rows == 0) { echo "该班没有男生"; } else { echo "男生人数是". $rows ."人"; } } } else { echo "本次连接数据库失败"; } ?>
-
编写代码,设计下图界面
<html> <head> <meta http-equiv="Conten-Type" content="text/html; charset=utf-8"> <title>文件上传</title> </head> <body> <form action="up.php" method="post" enctype="multipart/form-data"> <p> 文件上传地址<input type="file" name="file1" id="file1" />浏览 </p><br /> <p> <input type="submit" value="上传" /> <input type="reset" value="重置" /> </p> </form> </body> </html>
-
编写代码,接收上传文件信息,将文件保存在up文件夹中,并输出如下内容
<?php header("Conten-Type: text/html; charset=uft8"); $name = $_FILES['file1']['name']; $type = $_FILES['file1']['type']; $size = round($_FILES['file1']['size']/1024, 2). "kB"; $tmpname = $_FILES['file1']['tmp_name']; echo "上传文件的名称是:" .$name. "<br />"; echo "上传文件的类型是: " .$type. "<br />"; echo "上传文件的大小是: " .$size. "<br />"; echo "临时位置临时名称信息是:" .$name. "<br />"; ?>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!