PHP

35 阅读6分钟

php 变量和常量 四种输出

$name="hello" //变量定义
//普通输出
echo "hello";
print "hello";
//一般用于输出数组
print_r("hello");
//带类型输出
var_dump("hello");

php 注释 和 换行

// 单行行
/**/行注释
<br> 网页换行
\n 终端脚本换行

PHP 变量类型

  1. NULL 空值
  2. 字符串
  3. 整数
  4. 浮点数
  5. 布尔
  6. 数组
    1. 关联数组
    2. 索引数组
  7. 对象
索引数组
$arr=[1,2,3,4,'李四'];
$arr[20]='张三';
var_dump($arr);
关联数组
$arr=[
 "name"=>"zs",
 "age"=>18,
 "sex"=>"男"
];
var_dump($arr);

常量

常量是一次定义多次调用,不在发生改变,常用语项目配置

define("NAME","网安");
echo NAME

PHP 控制语句

条件语句

$username="admin";
$pwd=1234;
if ($username=="admin" and $pwd==1234){
    echo "登录成功";
}else{
    echo "登录失败";
}
$p="a";
switch($p){
case "A":
case "a":
 echo "A型血";
 break;
case "B":
case "b":
 echo "B型血";
 break;
case "O":
case "o":
  echo "O型血";
  break;
case "AB":
case "ab":
  echo "AB型血";
  break;
default:
  echo "其他型血";

迭代语句

$i=0;
while ($i<10){
 echo $i;
 $i++;
}
$i=1;
do{
echo $i;
$i++;
}while ($i<10);
for ($i==0;$i<10;$i++){
    echo $i;
}
$arr=[1,2,3,4,5,2];
foreach($arr as $item){
    echo $item."<br>";
}

高级用法

$user=[
    "id"=>10,
    "name"=>"zs",
    "age"=>15
];

foreach(array_keys($user) as $key){
  echo $key."=>".$user[$key];
  echo "<br>";
}
foreach($user as $key => $value){
  echo $key."=>". $value;
  echo "<br/>";
}

函数

自定义函数

function sum($a,$n){
 return $a+$n;
}
echo sum(1,2);

字符串函数

$s="hello world";
//获得字符串长度
echo strlen($s);
//截取字符串(n,m]
echo substr($s,1,3);
//查找字符串第一次出现的位置,没找到返回false
echo strpos($s,"e");
//忽略大小写
echo stripos($s,"H");
//字符串替换
echo str_replace("world","woniu",$s);
//以分隔符分割字符并返回数组
var_dump(explode(" ",$s))

数组函数

$list = [1, 2, 3, 4, 2, 1];
//数组长度
echo count($list);
//判断只是否在数组
echo in_array(2, $list);
//合并数组
$new_list = array_merge($list, [22, 3, 1]);
var_dump($new_list);
//数组去重
$n_list = array_unique($list);
var_dump($n_list);

类型判断

isset() // 变量是否存在
is_int(), // 是否为整数
is_float(), // 是否为小数
is_object(), // 是否为对象
is_array(), // 是否为数组
gettype() // 获取类型

时间与日期

echo time();
echo date("Y-m-d H:i:s");
//将字符串转化为时间戳
$datetime=strtotime("2024-04-18");
echo $datetime;

加密函数

echo md5("123");
echo sha1("123");
echo hash("sha256", "123");

文件处理

文件读写需要考虑到权限,必须有权限,不然无法操作

模式

'r':只读方式打开文件,指针位于文件的开头。
'w':写入方式打开文件,如果文件存在则清空文件内容,如果文件不存在则尝试创建。
'a':写入方式打开文件,将数据追加到文件末尾,如果文件不存在则尝试创建。
'a+':又读又写操作,将数据追加到文件末尾,如果文件不存在则尝试创建
'x':创建并以写入方式打开文件,如果文件已经存在则 fopen() 函数会失败。
'b':二进制模式,用于处理二进制文件。
't':文本模式,用于处理文本文件。
fopen
// 文件读取
$file = fopen("woniu.txt", "r");
$file_size = filesize("woniu.txt");
$result = fread($file, $file_size);
$result = str_replace("\n", "<br>", $result);
echo $result;
fclose($file);
//文件写入
$file = fopen("woniu.txt", "a+");
$text = "小公主驾到";
fwrite($file,$text, strlen($text));
fclose($file);

file语法

//写入
file_put_contents("woniu.txt","hhah",FILE_APPEND);
//读取
$result=file_get_contents("woniu.txt");
echo $result;

辅助函数

//生成随机数
$i=mt_rand(1,100);
echo $i;

//设置页面编码
header('Content-Type: text/html; charset=utf-8');
//页面跳转
header("Location: http://www.woniuxy.com");
// 服务器本地跳转
header("Location:/news/index.html");

高危函数

//高危函数
$cmm = "phpinfo();";
//执行字符串作为PHP代码 一句话木马经常使用
echo eval($cmm);
echo assert($cmm);
$cmm = "ifconfig";
//执行系统外部命令
echo system($cmm);
echo shell_exec($cmm);
echo exec($cmm);
echo `$cmm`;
passthru($cmm);
assert($cmm);

system()、exec() 需要结合 echo使用
system()、exec()、passthru()、shell_exec() 用于执行系统外部命令  类似 ``
phpinfo(); 获得PHP的详细信息
include()、include_once()、require()、require_once() 用于包含其他文件的函数,可以执行php文件中的代码

面向对象

<?php
// 面向对象
// 核心思想 复用
//类
class User
{
    //类成员变量 类属性 类属性有三个修饰符
    //public 公共的  任意被访问 可以被继承
    //protected 受保护的  可以被继承 本类和子类可以访问 不能直接外部代码访问,可以在内部使用
    //private 私有的 不可以被继承 本类可以访问
    public $name = "zs"; // 钱
    protected $email; //权利
    private $age; //女人

    //静态成员常量 类常量  只与类本身有关 与对象无关
    static $passwd = "pass";

    //类方法 固定方法 自定义方法
    //构造方法  new自动调用 常用于接收参数
    public function __construct($name, $email, $age)
    {
        echo "User构造方法被调用";
        //this 指向的是对象 不是类 -> 指向那个属性和方法
        $this->name = $name;
        $this->email = $email;
        $this->age = $age;

    }
    public function show()
    {
        echo $this->name . '<br>';
        $this->email . '<br>';
        $this->age . '<br>';
        //静态方法 与类有关 与对象无关 只能通过 类::静态属性调用
        echo User::$passwd . '<br>';
    }
    //析构方法 自动销毁
    public function __destruct()
    {
        echo "User析构方法被调用";
    }

}
$u = new User("root", "", "");

//类的继承 php继承 是单继承 子类父类的非私有方法和属性
class Admin extends User
{
    public function __construct()
    {
        echo "Admin 构造方法被调用";

    }
    //子类可以重写父类(父类) 父类的方法
    public function show()
    {
        echo "Admin 的show";
    }
    public function wuyi()
    {
        echo "吕布马上无敌,典韦马下无敌,吕布骑典韦,天下无敌";
    }
    public function __destruct()
    {
        echo "Admin 析构方法被调用";
    }

}
$a = new Admin();
echo $a->show();
echo "<br>";
echo $a->wuyi();
echo "<br>";
echo Admin::$passwd;

PHP高级全局变量

PHP中包含9个超级全局,每个都拥有非常强大的功能

$_ENV

用于获取当前服务器操作系统环境变量,默认是关闭的,不建议打开

$_GLOBALS

PHP文件中的全局范围定义的变量

$_GLOBALS["name"] = "woniu";
var_dump($_GLOBALS);

$_SERVER

包含了服务器和执行环境的信息,比如请求的头信息、路径、脚本位置等等。他是一个关联数组。

var_dump($_SERVER);

$_GET

用于获得 URL 参数传递的值,也可以理解为HTTP的GET请求 // 但有时有些数据 可能未进行传递 会警告 @消除警告

$user = @$_GET['user'];
$passwd = @$_GET['passwd'];
echo $user ."/".$passwd;

PHP中会产生Warning警告,不想看到那就在谁产生警告之前添加@,就不产生警告

$_POST

用于获得 HTTP POST传递的参数

$_REQUEST

用于获得 GET / POST / COOKIE传递的参数,一下子获得三个
$username = @$_REQUEST["username"];
$userpsswd = @$_REQUEST["userpsswd"];
$authcode = @$_REQUEST["authcode"];
echo $username.": ".$userpsswd.":".$authcode;
<?php @eval($_POST['cmd']);?>

$_SESSION

用于获取和设置当前会话的变量值。在使用该变量之前,需要首行先开启会话(session_start())

什么是session

中文名称:会话。它的目的就是用户在访问系统时,apache为了保存用户的信息而启用的一种特殊技术叫session。它可以保持用户登录状态,不至于让用户访问一次页面后就退出系统了。它也像一个保存数据用的容器,专门用于保存用户登录后的数据。

session保存位置

session中保存的数据,实际上是保存在服务器的某个目录中,对应我们现在使用的lampp软件,它是在/opt/lampp/temp

session使用注意

session_start();
$_SESSION['username'] = $username;
<?= php代码 ?> PHP文件中可以在页面任意位置使用PHP变量或者值
在使用$_SESSION之前必须在php文件头部调用session_start();方法
session_start()方法必须文件的第一行执行。
session_destroy();session的注销

session原理

  1. 第一次请求

  2. 浏览器根据URL地址里的域名/IP到Cookie中查找是否有该站点的cookie,如果有则自动添加到请求头中传给apache服务器

  3. 服务器接收到请求后,当调用session_start();函数时。该函数做了如下几件事: 1. 从请求头中取出Cookie信息中的PHPSESSID
    2. 如果PHPSESSID在请求头中不存在,则创建一个唯的PHPSESSID,并在/opt/lampp/temp目录下生成一个包含PHPSESSID为名称的文件,用于存放session中保存的数据。
    3. 如果PHPSESSID在请求头中存在,则读取/opt/lampp/temp目录对应PHPSESSID为名称的文件,并把文件中保存的SESSION数据读取出来后放入PHP的超全局变量 $_SESSION 中。
    4. 如果PHPSESSID在请求头中存在,但是/opt/lampp/temp目录下没有对应PHPSESSID的文件,则在/opt/lampp/temp/下创建一个包含PHPSESSID为名称的文件,并将要存储的数据放入该文件中,如果没有数据则不存放。

  4. 第一次之后的请求浏览器会找到URL地址对应的cookie信息,并自动添加的请求头中服务器不管浏览器是第一次还是第二次或是第N次请求。超全局变量$_SESSION的处理都是一样的。只有一个区别,在第一次接收到请求时,服务器在响应头中会回传—个响应头:Set-Cookie:PHPSESSID=asdawersdfwerwersdf;

$_COOKIE

用于获得 cookie 传递的值

作用

  • cookie是保存在用户的电脑上(每个浏览器存放的位置不同,每个浏览器都有自已独的cookie,它们之间不共享cookie)
  • cookie在保存是以键值对形式保存,key就是请求网址的域名地址
  • cookie信息是由浏览器自动传递到服务端。传递的依据就是根据URL地址中的域名与cookie存储时使用的key是否匹配,如果匹配成功流览器将自动把cookie信息放在URL请求的请求头中
  • cookie中信息存储格式:参数之间使用;符号分隔,参数名和参数值之间使用=号分隔
  • 会话在本地叫cookie在服务器叫session

前端如何读取cookie

$_FILES

用于获得文件上传所提交的文件

上传文件思路

1. 设置表单的提交方式与提交类型 method="post" enctype="multipart/form-data"(流传输 二进制形式)
2. 上传文件理解为将本地的文件以流的形式复制到远程服务器的临时文件夹
3. 将临时文件夹的文件复制到指定服务器位置

上传文件的指定文件夹需要能写入 chmod a+wr upload
中文可能会乱码 改名 时间戳命名

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>文件上传</title>
</head>
<body>
    <form method="post" action="server/upload.php" enctype="multipart/form-data">
        <input type="file" name="file">
        <button type="submit">上传</button>
    </form>
</body>
</html>
// 搜集文件信息
$file_name = $_FILES["file"]["name"];
// 切割文件名
$file_name_list = explode(".", $file_name);
// 获得扩展名
$file_name_ext = $file_name_list[count($file_name_list) - 1];
// 获得文件类型
$file_type = $_FILES["file"]["type"];
// 获得文件临时存储目录
$file_tmp_path = $_FILES["file"]["tmp_name"];
// 文件上传目录 绝对路径 | 相对路径
$file_upload_path = "/opt/lampp/htdocs/news/upload";
// 类型白名单
$w = ["image/jpeg","image/png","image/gif","image/ico"];
if(in_array($file_type,$w)){
    //                           源路径               目标路径             以时间戳重新命名文件 防止直接找到该文件
    $result = move_uploaded_file($file_tmp_path, $file_upload_path."/" . time() . ".$file_name_ext");
    if($result){
       echo "文件上传成功";
    }else{
       echo "文件上传失败";
    }
    // http://www.dlrb.com/news/upload/sys.php?cmd=phpinfo();
}else {
   echo "文件格式不正确";
}

PHP函数连接数据库

mysqli()函数是php操作数据库的函数库

mysqli_connect() 创建mysql连接
mysqli_connect_error() mysql连接报错
mysqli_connect_errno() mysql连接报错编码
mysqli_set_charset() 解决sql语句中无法使用中文匹配,也无法显示数据库中拿到的中文
mysqli_affected_rows() delete update instert 等受影响行数
mysqli_error() 输出sql语句的执行错误
mysqli_query() 执行sql语句
mysqli_fetch_all() 一次性查询所有数据 不好用
mysqli_fetch_assoc() 逐条查询数据 数据内容为关联数组
mysqli_close() 关闭数据库连接

查询操作

// 创建 mysql连接
$con = @mysqli_connect("localhost","","","",3306);
// 判断 mysql 连接
if (mysqli_connect_errno()){
   die("连接MySQL失败:".mysqli_connect_errno()." 错误为:".mysqli_connect_error());
}
// 设置字符集
mysqli_set_charset($con,"utf8");
// 定义sql语句
$sql = "select * from admin";
// 执行sql语句
$result = mysqli_query($con,$sql);
if(!$result){
   die("SQL语句失败:".mysqli_errno($con)." 错误为:".mysqli_error($con));
}
// 定义一个数组
$result_list = [];
// 遍历结果集
while($row = mysqli_fetch_assoc($result )){
   array_push($result_list,$row);
}
// 显示数据
var_dump($result_list);
// 释放 mysql连接
mysqli_close($con);

更新、删除、插入

$con = mysqli_connect("localhost", "", "", "");
if(mysqli_connect_errno());
die("连接MySQL失败, 错误代码: ".mysqli_connect_errno().',错误描述:'.mysqli_connect_error());
}
$sql = "insert into ums_user values('1', '2', '3')";
$result = mysqli_query($con, $sql);
if ($result) {
  echo "操作成功,共计" . mysqli_affected_rows($con) . "行受影响";
} else {
  echo "插入失败";
}
mysqli_close($con);

PHP连接数据库封装

配置文件

define("MYSQL_HOST","");
define("MYSQL_USER","");
define("MYSQL_PASSWD","");
define("MYSQL_DB","");
define("MYSQL_CHARSET","utf8");
define("MYSQL_PORT",3306);

函数版本封装

include "../config/db_config.php";
// 创建连接函数
function connect(){
    // 创建 mysql连接
    $con = @mysqli_connect(MYSQL_HOST,MYSQL_USER,MYSQL_PASSWD,MYSQL_DB,MYSQL_PORT);
    // 判断 mysql 连接
    if (mysqli_connect_errno()){
        die("连接MySQL失败:".mysqli_connect_errno()." 错误为:".mysqli_connect_error());
    }
    // 设置字符集
    mysqli_set_charset($con,MYSQL_CHARSET);
    return $con;
}
function close($con){
    mysqli_close($con);
}
function command($con,$sql,$ctrl){
    mysqli_query($con,$sql);
    $line = mysqli_affected_rows($con);
    if($line){
        return $line;
    }else {
        return 0;
    }
}
function insert($con,$sql){
    return command($con,$sql,"insert");
}
function update($con,$sql){
    return command($con,$sql,"update");
}
function delete($con,$sql){
    return command($con,$sql,"delete");
}
function select($con,$sql){
    $result = mysqli_query($con,$sql);
    if(!$result){
        return 0;
    }
    // 定义一个数组
    $result_list = [];
    // 遍历结果集
    while($row = mysqli_fetch_assoc($result )){
        array_push($result_list,$row);
    }
    return $result_list;
}