基本语法
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源代码显示实体的转换:
& (和号)成为 &
" (双引号)成为 "
' (单引号)成为 '
< (小于)成为 <
> (大于)成为 > */
str_replace(find,replace,string,[count])
/*替换字符串或字符串数组各元素中的特定字符
find:用于替换的字符串
replace:待被替换的部分字符串
string:待操作字符串
count可对替换数计数
str_ireplace()可忽略大小写替换
*/
md5(string) //md5散列变换,md5_file(file)可对文件散列