【Web安全基础】PHP基础

这篇博客介绍了PHP的基本语法,包括标记、注释、变量和输出。还讲解了如何处理表单数据,特别是使用$_GET和$_POST超全局变量。此外,文章详细阐述了文件上传的流程,利用$_FILES数组获取上传信息,并提供了服务器端处理代码。最后,提到了数据库操作(以MySQL为例)和编码解码函数,以及序列化与反序列化的方法。
摘要由CSDN通过智能技术生成

基本语法

PHP(Personal home page Hypertext Preprocessor)是一种在服务器端执行的脚本语言,广泛应用于Web开发。

标记

脚本标记: <?php ?><script language='php'> </script>
语句结束标记:分号( ; )(ps.脚本最后一行不必使用)

注释

单行注释:#// 开头
多行注释:/* */

变量

必须以$开头,大小写敏感 (用户定义的函数/类+关键词 大小写不敏感)
可变变量(一个变量的变量名可由另一个变量来表示):

$hello = 'world';
$$hello = 'test';
echo $world; //输出'test'

输出

//echo:速度快,可输出多个字符串
echo "<h1>xxx<h1>"; //可输出HTML标记
echo "test","test1"."ok"; //用逗号分隔多个字符串,用点号连接多个字符串
echo $viarable, "a $viarable", "array {$arr[0]}" //输出变量的形式

//print:只能输出单个字符串,返回值为1
print 'xxx'

//print_r:输出变量值
$a = array ('a' => 'apple', 'b' => 'banana', 'c' => array ('x','y','z'));
print_r ($a); //按格式输出数组
$r = print_r($a); //返回结果给新变量

条件/循环语句&函数

条件语句和循环语句的语法格式同C语言,函数定义与调用的格式同Javascript。
特殊点:foreach循环(遍历数组)

$arr = array('test', 'exam', 'suspect');
foreach($arr as $value){ //仅输出元素值
    echo "$value <br>";
}
foreach($arr as $key => $value){ //同时输出元素下标及值
    echo "$key, $value <br>";
}

表单处理

超全局变量 $_GET 和 $_POST 用于收集表单数据。
前端表单显示页面代码编写如下:

<form action='php.php' method='post'> <!-- method可选用get -->
名字:<input type='text' name='name'><br>
学校:<input type='text' name='school'><br>   
<input type='submit' value='提交'>
</form>

服务器端表单数据采集脚本代码编写如下:

<?php
echo "welcome {$_POST['name']}!", '<br>';
echo 'You university is ', $_POST['school']
?>

文件上传

超级全局变量数组 $_FILES用于从客户计算机向远程服务器上传的文件及其相关信息,具体包括(file为文件输入控件的name属性值):

  • $_FILES[“file”][“name”] - 被上传文件的名称
  • $_FILES[“file”][“type”] - 被上传文件的类型
  • $_FILES[“file”][“size”] - 被上传文件的大小(字节)
  • $_FILES[“file”][“tmp_name”] - 存储在服务器的文件的临时副本文件名
  • $_FILES[“file”][“error”] - 由文件上传导致的错误代码

前端表单显示页面代码编写如下:

<form action='php.php' method='post' enctype="multipart/form-data"> 
<!-- 设置表单使用二进制数据 --> 
<input type='file' name='file' size=50 value='选择文件'><br> 
<!-- 输入为文件类型 -->
<input type='submit' value='上传'>
</form>

服务器端接收上传文件脚本代码编写如下:

<?php
$upload_path = "uploads/" . $_FILES["file"]["name"]; //文件存储路径
if (file_exists($upload_path)) //该路径下文件是否已存在
{
    echo $_FILES["file"]["name"] . " already exists. ";
}
else
{
    move_uploaded_file($_FILES["file"]["tmp_name"], $upload_path); //将临时文件永久保存在指定路径下
    echo "Stored in: " . $upload_path;
}
?>

数据库操作(以MySQL为例)

使用PHP操作MySQL,主要通过安装mysql或mysqli扩展来实现(在php.ini中添加对应的extension即可)。mysql和mysqli提供的基本方法大致相同,但mysqli的执行速度更快,并且通过参数化查询方式可以防止SQL注入攻击。下面是通过mysqli提供的方法对MySQL进行操作的代码:

<?php
$con = mysqli_connect('localhost:3306', 'root', '', 'mysql'); { //连接数据库服务器,参数分别表示服务器、用户名、密码和默认数据库(代码中即为默认值)
if (mysqli_connect_errno($con)) { 
    die(mysqli_connect_error()); 
} 
mysqli_set_charset($con, 'utf-8'); //设置客户端默认字符集
$user = $_GET['user']; //待传入的查询参数属性

// 常规查询
$sql = "select user,pwd from user where user = '$user'";
$rows = mysqli_query($con, $sql); //执行数据库查询操作
//$row = mysqli_fetch_row($rows); //处理仅返回单行数据的结果集
while($row = mysqli_fetch_assoc($rows)){ //遍历处理结果集中的多行数据
	echo $rows['user'].' '$rows['pwd'].'<br>';
}

//参数化查询
$stmt=mysqli_stmt_init($con); //创建预处理语句
$sql = "select user,pwd from user where user = ?"
if (mysqli_stmt_prepare($stmt, $sql)){ //准备执行SQL语句
    mysqli_stmt_bind_param($rows, 's', $user); //绑定参数
    mysqli_stmt_execute($stmt); //执行SQL查询
    mysqli_stmt_bind_result($stmt, $user, $pwd); //绑定结果变量
    while(mysqli_stmt_fetch($stmt)){ //获取结果值
		echo $user.' '$pwd.'<br>';
	}
    mysqli_stmt_close($stmt); //关闭预处理语句
}

mysqli_close(); //关闭数据库连接
?>

编码&解码函数

ord('abc') <=> chr(97) //字符串首字母与其ASCII值的转换
urlencode() <=> urldecode() //url中文、空格等与url可调用字串的转换
base64_encode() <=> base64_decode() //base64编码变换
htmlspecialchars() <=> htmlspecialchars_decode() 
/* 特定字符与HTML源代码显示实体的转换:
& (和号)成为 &amp;
" (双引号)成为 &quot;
' (单引号)成为 '
< (小于)成为 &lt;
> (大于)成为 &gt; */
str_replace(find,replace,string,[count]) 
/*替换字符串或字符串数组各元素中的特定字符
find:用于替换的字符串
replace:待被替换的部分字符串
string:待操作字符串
count可对替换数计数
str_ireplace()可忽略大小写替换
*/
md5(string) //md5散列变换,md5_file(file)可对文件散列

序列化&反序列化

PHP序列化&反序列化方法示例

参考资料

1.菜鸟教程_PHP教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值