Git 常用命令大全

Git 常用命令大全

Git 是开发必备工具,常用命令一定要熟练。

1. 初始化仓库

新建仓库:

git init

克隆远程仓库:

git clone https://github.com/user/repo.git

克隆指定分支:

git clone -b dev https://github.com/user/repo.git

2. 查看状态

查看状态:

git status

查看提交历史:

git log

简洁历史:

git log --oneline --graph

查看文件修改:

git diff

3. 提交代码

添加所有修改:

git add .

添加指定文件:

git add index.php

提交:

git commit -m "修复bug"

添加并提交:

git commit -am "修复bug"

4. 远程操作

查看远程仓库:

git remote -v

拉取远程更新:

git pull

推送代码:

git push

推送并设置上游分支:

git push -u origin dev

5. 分支操作

查看本地分支:

git branch

查看所有分支:

git branch -a

创建分支:

git branch dev

切换分支:

git checkout dev

创建并切换:

git checkout -b dev

合并分支:

# 先切换到master
git checkout master
# 合并dev分支
git merge dev

删除分支:

git branch -d dev

强制删除:

git branch -D dev

6. 撤销操作

撤销工作区修改:

git checkout -- index.php

撤销暂存区:

git reset HEAD index.php

回退到上个版本:

git reset --hard HEAD^

回退到指定版本:

git reset --hard commit_id

7. 标签操作

打标签:

git tag v1.0.0

查看标签:

git tag

推送标签:

git push origin v1.0.0

推送所有标签:

git push origin --tags

8. 暂存操作

暂存当前修改:

git stash

查看暂存列表:

git stash list

恢复暂存:

git stash pop

删除暂存:

git stash drop

9. 其他常用

配置用户名:

git config --global user.name "张三"

配置邮箱:

git config --global user.email "zhangsan@example.com"

查看配置:

git config --list

查看当前分支:

git branch --show-current

10. 常用工作流

开发新功能:

# 拉最新代码
git pull

# 创建功能分支
git checkout -b feature/user

# 开发完提交
git add .
git commit -m "添加用户功能"

# 推送
git push -u origin feature/user

总结

Git 常用命令要点:

  • git init 初始化仓库
  • git clone 克隆仓库
  • git status 看状态
  • git add 添加修改
  • git commit 提交
  • git push 推送
  • git pull 拉取
  • git branch 分支操作
  • git checkout 切换分支
  • git merge 合并分支
  • git reset 回退
  • git stash 暂存

Git 熟练了,团队协作效率提升很多。


emer 发布于  2026-10-9 07:34 

PHP 时间日期处理

PHP 时间日期处理

时间日期是开发常用功能,这些函数要记住。

1. 获取当前时间

// 当前时间戳
echo time();

// 当前日期时间
echo date('Y-m-d H:i:s');

// 今天日期
echo date('Y-m-d');

2. 时间戳和日期互转

时间戳转日期

$time = time();
echo date('Y-m-d H:i:s', $time);

日期转时间戳

$date = '2024-01-01 12:00:00';
$time = strtotime($date);
echo $time;

3. 常用日期格式

// 2024-01-01
echo date('Y-m-d');

// 2024-01-01 12:00:00
echo date('Y-m-d H:i:s');

// 2024年01月01日
echo date('Y年m月d日');

// 2024/01/01
echo date('Y/m/d');

// 星期几
echo date('l');  // Sunday

4. 常用格式字符

  • Y: 4位年
  • m: 2位月
  • d: 2位日
  • H: 24小时制
  • i: 分钟
  • s: 秒

5. 日期加减

// 明天
echo date('Y-m-d', strtotime('+1 day'));

// 昨天
echo date('Y-m-d', strtotime('-1 day'));

// 一周后
echo date('Y-m-d', strtotime('+1 week'));

// 一个月后
echo date('Y-m-d', strtotime('+1 month'));

// 一年后
echo date('Y-m-d', strtotime('+1 year'));

6. 计算时间差

$start = strtotime('2024-01-01');
$end = strtotime('2024-01-10');

// 相差天数
$diff = ($end - $start) / 86400;
echo $diff . '天';

7. DateTime 类(推荐)

// 创建日期对象
$date = new DateTime('2024-01-01');

// 格式化输出
echo $date->format('Y-m-d H:i:s');

// 加一天
$date->add(new DateInterval('P1D'));
echo $date->format('Y-m-d');

// 计算两个日期差
$start = new DateTime('2024-01-01');
$end = new DateTime('2024-01-10');
$diff = $start->diff($end);
echo $diff->days . '天';

8. 常用场景

1)几天前

function timeAgo($time) {
    $diff = time() - $time;
    if ($diff < 60) return '刚刚';
    if ($diff < 3600) return floor($diff/60) . '分钟前';
    if ($diff < 86400) return floor($diff/3600) . '小时前';
    return floor($diff/86400) . '天前';
}

2)生日计算

$birthday = '1990-01-01';
$age = floor((time() - strtotime($birthday)) / 31536000);
echo $age . '岁';

总结

PHP 时间日期处理要点:

  • time() 获取时间戳
  • date() 格式化日期
  • strtotime() 日期转时间戳
  • 用 +1 day 等做日期加减
  • 推荐用 DateTime 类
  • 时间差除以86400得天数
  • 注意时区设置

做开发时间日期天天用,这些函数必须熟。


emer 发布于  2026-10-9 07:23 

MySQL 常用数据类型

MySQL 常用数据类型

建表选对数据类型很重要,这些常用类型要记住。

1. 数值类型

整数类型

  • TINYINT: 1字节,范围 -128~127
  • SMALLINT: 2字节,范围 -32768~32767
  • INT: 4字节,常用,范围约 ±21亿
  • BIGINT: 8字节,大数值

小数类型

  • FLOAT: 单精度浮点数
  • DOUBLE: 双精度浮点数
  • DECIMAL: 精确小数,存金额用这个
-- 金额用 DECIMAL(总位数, 小数位数)
price DECIMAL(10,2)  -- 最多10位,2位小数

2. 字符串类型

CHAR: 定长字符串,比如 CHAR(10) 存不满补空格

  • 适合固定长度,比如手机号、性别

VARCHAR: 变长字符串,最常用

  • VARCHAR(255),存多少占多少
  • 适合变长内容,比如用户名、标题

TEXT: 长文本

  • TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT
  • 存文章内容、备注等

常用选择:

  • 短文本:VARCHAR(50)
  • 长文本:TEXT
  • 固定长度:CHAR

3. 日期时间类型

DATE: 日期,格式 YYYY-MM-DD
TIME: 时间,格式 HH:MM:SS
DATETIME: 日期+时间,范围 1000-9999年
TIMESTAMP: 时间戳,范围 1970-2038年,自动更新

create_time DATETIME DEFAULT CURRENT_TIMESTAMP
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

4. 常用字段设计示例

CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL COMMENT '用户名',
    age TINYINT UNSIGNED COMMENT '年龄',
    phone CHAR(11) COMMENT '手机号',
    money DECIMAL(10,2) DEFAULT 0 COMMENT '余额',
    status TINYINT DEFAULT 1 COMMENT '状态:1正常 0禁用',
    content TEXT COMMENT '简介',
    create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
    update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

5. 选择建议

1)主键ID

  • 用 INT 或 BIGINT
  • 不要用 UUID 做主键

2)金额

  • 用 DECIMAL,不要用 FLOAT/DOUBLE
  • 避免精度丢失

3)状态字段

  • 用 TINYINT,不要用 VARCHAR 存 "正常/禁用"

4)时间

  • 创建时间用 DATETIME
  • 更新时间用 TIMESTAMP 自动更新

5)字符串

  • 短文本用 VARCHAR
  • 长文本用 TEXT
  • 固定长度用 CHAR

6. 注意事项

  • 不要过度设计: 够用就行,不要字段太大
  • 能用数字不用字符串: 排序、计算都快
  • 避免 NULL: 尽量设默认值,NULL 不好查询
  • 加注释: 每个字段都加 COMMENT

总结

MySQL 常用数据类型要点:

  • INT/BIGINT:整数
  • DECIMAL:金额
  • VARCHAR:字符串
  • TEXT:长文本
  • DATETIME/TIMESTAMP:时间
  • 主键用 INT 自增
  • 金额用 DECIMAL
  • 状态用 TINYINT
  • 字段加注释

建表选对类型,性能和存储都好。


emer 发布于  2026-10-9 07:19 

PHP PDO 连接数据库

PHP PDO 连接数据库

PDO 是 PHP 推荐的数据库连接方式,支持多种数据库,防注入。

1. 什么是 PDO

PDO(PHP Data Objects)是 PHP 数据库抽象层,统一接口操作多种数据库。

2. 为什么用 PDO

  • 防SQL注入: 预处理语句
  • 支持多数据库: MySQL、PostgreSQL、SQLite 等
  • 面向对象: 写法更规范
  • 错误处理: 统一的错误模式

3. 连接数据库

// 数据库配置
$host = '127.0.0.1';
$dbname = 'test';
$user = 'root';
$pass = 'root';

try {
    // 连接数据库
    $pdo = new PDO(
        "mysql:host=$host;dbname=$dbname;charset=utf8mb4",
        $user,
        $pass,
        [
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
        ]
    );
    echo '连接成功';
} catch(PDOException $e) {
    die('连接失败:' . $e->getMessage());
}

4. 查询数据

查询多条

$stmt = $pdo->query("SELECT * FROM users");
$users = $stmt->fetchAll();

查询单条

$stmt = $pdo->query("SELECT * FROM users WHERE id = 1");
$user = $stmt->fetch();

5. 预处理语句(防注入)

查询

// 问号占位符
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([1]);
$user = $stmt->fetch();

// 命名占位符
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = :id");
$stmt->execute([':id' => 1]);
$user = $stmt->fetch();

插入

$stmt = $pdo->prepare("INSERT INTO users (name, age) VALUES (:name, :age)");
$stmt->execute([
    ':name' => '张三',
    ':age' => 20
]);

更新

$stmt = $pdo->prepare("UPDATE users SET name = :name WHERE id = :id");
$stmt->execute([
    ':name' => '李四',
    ':id' => 1
]);

删除

$stmt = $pdo->prepare("DELETE FROM users WHERE id = :id");
$stmt->execute([':id' => 1]);

6. 获取自增ID

$pdo->exec("INSERT INTO users (name) VALUES ('王五')");
$id = $pdo->lastInsertId();

7. 事务处理

try {
    $pdo->beginTransaction();

    $pdo->exec("INSERT INTO orders ...");
    $pdo->exec("UPDATE stock ...");

    $pdo->commit();
    echo '事务成功';
} catch(Exception $e) {
    $pdo->rollBack();
    echo '事务失败:' . $e->getMessage();
}

8. 常用配置

// 设置返回关联数组
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC

// 错误模式
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION

// 关闭预处理模拟(真正服务端预处理)
PDO::ATTR_EMULATE_PREPARES => false

总结

PHP PDO 连接数据库要点:

  • PDO 是统一数据库接口
  • 预处理语句防 SQL 注入
  • 支持事务操作
  • 配置错误模式方便调试
  • 推荐用命名占位符
  • 生产环境关闭预处理模拟
  • 记得设置 utf8mb4 字符集

做数据库开发,PDO 比 mysqli 更好用。


emer 发布于  2026-10-9 07:17 

MySQL 视图的使用

MySQL 视图的使用

视图是虚拟表,用好了能简化查询、保护数据。

1. 什么是视图

视图(View)是基于 SQL 查询结果的虚拟表,本身不存数据,数据来自真实表。

2. 为什么用视图

1)简化查询

  • 复杂查询封装成视图
  • 直接查视图就行

2)权限控制

  • 只暴露部分字段给用户
  • 敏感字段不暴露

3)数据独立

  • 表结构变了,视图不变
  • 上层应用不用改

3. 创建视图

-- 创建视图
CREATE VIEW v_user_order AS
SELECT u.id, u.name, o.order_no, o.amount
FROM users u
JOIN orders o ON u.id = o.user_id;

-- 使用视图
SELECT * FROM v_user_order WHERE id = 1;

4. 修改和删除视图

-- 修改视图
CREATE OR REPLACE VIEW v_user_order AS
SELECT u.id, u.name, o.order_no, o.amount, o.create_time
FROM users u
JOIN orders o ON u.id = o.user_id;

-- 删除视图
DROP VIEW IF EXISTS v_user_order;

5. 查看视图

-- 查看所有视图
SHOW FULL TABLES WHERE Table_type = 'VIEW';

-- 查看视图结构
DESC v_user_order;

-- 查看创建语句
SHOW CREATE VIEW v_user_order;

6. 视图的限制

1)不能用 ORDER BY 在视图里

  • 外层查询可以排序
  • 视图里排序意义不大

2)某些视图不能更新

  • 包含 GROUP BY、DISTINCT、JOIN 等的视图
  • 不能通过视图 INSERT/UPDATE/DELETE

3)视图不存数据

  • 每次查询都执行 SQL
  • 复杂视图查询可能慢

7. 实际使用建议

1)视图不是越多越好

  • 复杂业务逻辑用视图
  • 简单查询直接写 SQL

2)视图不要嵌套太多层

  • 视图套视图性能差
  • 最多一层就够了

3)敏感数据保护

  • 密码、手机号等敏感字段
  • 用视图隐藏或脱敏

8. 视图和表的区别

对比项 表 视图
存数据 是 否(虚拟表)
占空间 是 否
查询速度 快 取决于SQL
安全性 低 高

总结

MySQL 视图使用要点:

  • 视图是虚拟表,不存数据
  • 简化复杂查询
  • 保护敏感数据
  • 用 CREATE VIEW 创建
  • 简单视图可以更新
  • 复杂视图查询可能慢
  • 不要过度使用视图

视图是好东西,但别滥用。


emer 发布于  2026-10-9 07:15 

PHP 超全局变量详解

PHP 超全局变量详解

PHP 超全局变量在所有作用域都能用,写接口和表单开发天天用到。

1. 什么是超全局变量

超全局变量是 PHP 预定义的数组变量,不需要 global 声明,在函数、类、文件里都能直接访问。

2. 常用超全局变量

1)$_GET
获取 URL 查询参数。

// 访问 index.php?id=1&name=张三
$id = $_GET['id'];       // 1
$name = $_GET['name'];   // 张三

2)$_POST
获取表单 POST 提交的数据。

// 表单 method="post"
$username = $_POST['username'];
$password = $_POST['password'];

3)$_REQUEST
同时获取 GET、POST、COOKIE 数据。

$id = $_REQUEST['id'];
// 不推荐,安全隐患大

4)$_SESSION
会话数据,跨页面共享。

session_start();
$_SESSION['user_id'] = 1;
$_SESSION['username'] = '张三';

5)$_COOKIE
获取客户端 Cookie。

$token = $_COOKIE['token'];

6)$_SERVER
服务器和执行环境信息。

// 获取请求方法
$method = $_SERVER['REQUEST_METHOD'];

// 获取当前URL
$uri = $_SERVER['REQUEST_URI'];

// 获取客户端IP
$ip = $_SERVER['REMOTE_ADDR'];

// 获取HTTP头
$host = $_SERVER['HTTP_HOST'];

3. 文件上传变量

$_FILES
处理文件上传。

// 表单 enctype="multipart/form-data"
$file = $_FILES['upload'];
$name = $file['name'];        // 文件名
$tmp = $file['tmp_name'];     // 临时路径
$size = $file['size'];        // 文件大小
$error = $file['error'];      // 错误码

4. 注意事项

  • 安全问题: 所有超全局变量都不可信,必须做过滤和验证
  • isset 判断: 取值前用 isset 判断是否存在,避免报错
  • 类型转换: 数字参数记得转 int
  • 不要用 $_REQUEST: 安全隐患大,明确用 GET 还是 POST

5. 安全取值示例

// 安全获取GET参数
$id = isset($_GET['id']) ? intval($_GET['id']) : 0;

// 安全获取POST参数
$username = isset($_POST['username']) ? trim($_POST['username']) : '';

// 判断请求方法
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // 处理POST请求
}

总结

PHP 超全局变量要点:

  • $_GET:获取 URL 参数
  • $_POST:获取表单数据
  • $_SESSION:会话数据
  • $_COOKIE:客户端 Cookie
  • $_SERVER:服务器信息
  • $_FILES:文件上传
  • 所有外部输入都要过滤验证,不能直接用
  • 取值前先 isset 判断

做 PHP 开发,超全局变量是基础中的基础。


emer 发布于  2026-10-9 07:09 

MySQL 事务隔离级别

MySQL 事务隔离级别

事务隔离是数据库的重要概念,搞懂4种级别很有必要。

1. 事务的ACID

  • 原子性(Atomicity): 要么全成功,要么全失败
  • 一致性(Consistency): 事务前后数据一致
  • 隔离性(Isolation): 多个事务互不影响
  • 持久性(Durability): 提交后永久保存

2. 4种隔离级别

1)读未提交(Read Uncommitted)

  • 能读到未提交的数据
  • 有脏读、不可重复读、幻读问题
  • 性能最好

2)读提交(Read Committed)

  • 只能读到已提交的数据
  • 解决脏读
  • 有不可重复读、幻读问题
  • Oracle默认级别

3)可重复读(Repeatable Read)

  • 同一个事务里读多次结果一样
  • 解决脏读、不可重复读
  • 有幻读问题
  • MySQL默认级别

4)串行化(Serializable)

  • 事务排队执行
  • 解决所有问题
  • 性能最差

3. 三种问题

脏读:

  • 读到另一个事务未提交的数据
  • 对方回滚了,你读的就是脏数据

不可重复读:

  • 同一个事务里,两次读同一行结果不一样
  • 中间被其他事务修改了

幻读:

  • 同一个事务里,两次查询行数不一样
  • 中间被其他事务插入了

4. 查看和设置

-- 查看当前隔离级别
SELECT @@transaction_isolation;

-- 设置隔离级别
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

5. 实际使用

  • 一般用默认的可重复读就够了
  • 对一致性要求高的用串行化
  • 不要随便改隔离级别

总结

MySQL事务隔离级别要点:

  • 读未提交:性能最好,问题最多
  • 读提交:解决脏读
  • 可重复读:MySQL默认,解决不可重复读
  • 串行化:最安全,性能最差
  • 理解脏读、不可重复读、幻读

做数据库开发,事务隔离一定要懂。


emer 发布于  2026-10-8 07:30 

PHP 字符串处理函数

PHP 字符串处理函数

字符串处理是 PHP 最常用的操作,这些函数一定要会。

1. 截取字符串

// 截取前n个字符
substr("hello world", 0, 5); // hello

// 中文截取(用mb_substr)
mb_substr("你好世界", 0, 2, "utf-8"); // 你好

2. 替换字符串

//  str_replace 替换
str_replace("world", "PHP", "hello world"); // hello PHP

// 只替换第一次出现
str_replace("a", "b", "aaa", $count);

3. 查找字符串

// 查找位置(找不到返回false)
strpos("hello world", "world"); // 6

// 注意:用 === 0 判断开头
if (strpos($str, "hello") === 0) {
    echo "以hello开头";
}

4. 大小写转换

// 转小写
strtolower("Hello"); // hello

// 转大写
strtoupper("hello"); // HELLO

// 首字母大写
ucfirst("hello"); // Hello

// 每个单词首字母大写
ucwords("hello world"); // Hello World

5. 去除空白

// 去除两边空格
trim("  hello  "); // hello

// 去左边
ltrim("  hello  "); // hello  

// 去右边
rtrim("  hello  "); //   hello

6. 字符串拼接

// 用点拼接
$str = "hello" . " " . "world";

// 多变量拼接
$a = "hello";
$b = "world";
$c = "$a $b"; // hello world

7. 分割和合并

// 分割成数组
$arr = explode(",", "a,b,c"); // ["a", "b", "c"]

// 数组合并成字符串
$str = implode(",", $arr); // a,b,c

8. 常用技巧

1)判断是否包含字符串:

if (strpos($str, "hello") !== false) {
    echo "包含hello";
}

2)反转字符串:

strrev("hello"); // olleh

3)字符串长度:

strlen("hello"); // 5
mb_strlen("你好", "utf-8"); // 2

总结

PHP 字符串处理要点:

  • substr 截取,注意中文用 mb_substr
  • str_replace 替换
  • strpos 查找,用 !== false 判断
  • trim 去空格
  • explode/implode 分割合并
  • 注意中文编码问题,用 mb 开头的函数

写 PHP,字符串函数天天用。


emer 发布于  2026-10-8 07:28 

PHP 常用设计模式

PHP 常用设计模式

设计模式是写好代码的经验总结,常用的几种要掌握。

1. 单例模式

整个项目只有一个实例,比如数据库连接。

class Db
{
    private static $instance = null;

    private function __construct() {}

    public static function getInstance()
    {
        if (self::$instance === null) {
            self::$instance = new self();
        }
        return self::$instance;
    }
}

$db = Db::getInstance();

2. 工厂模式

根据参数创建不同的对象。

class Factory
{
    public static function make($type)
    {
        $class = ucfirst($type);
        return new $class();
    }
}

$user = Factory::make('user');
$order = Factory::make('order');

3. 观察者模式

一个对象状态变化,通知所有观察者。

interface Observer
{
    public function update($event);
}

class Event
{
    private $observers = [];

    public function add(Observer $observer)
    {
        $this->observers[] = $observer;
    }

    public function trigger($event)
    {
        foreach ($this->observers as $ob) {
            $ob->update($event);
        }
    }
}

4. 常用场景

  • 单例: 数据库、日志、配置
  • 工厂: 创建不同类的对象
  • 观察者: 事件触发、消息通知
  • 策略: 不同支付方式
  • 适配器: 兼容不同接口

5. 设计原则

  • 单一职责:一个类只做一件事
  • 开闭原则:对扩展开放,对修改关闭
  • 依赖倒置:依赖抽象不依赖具体

总结

PHP 常用设计模式要点:

  • 单例模式:只创建一个实例
  • 工厂模式:统一创建对象
  • 观察者:事件通知
  • 理解设计原则
  • 不要为了模式而模式

设计模式是工具,解决问题才是目的。


emer 发布于  2026-10-8 07:24 

PHP Composer 使用指南

PHP Composer 使用指南

Composer 是 PHP 的依赖管理工具,做开发必备。

1. 安装 Composer

# 下载安装
curl -sS https://getcomposer.org/installer | php

# 移动到全局
mv composer.phar /usr/local/bin/composer

# 验证
composer -V

2. 国内镜像加速

# 阿里镜像
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

3. 常用命令

1)初始化项目:

composer init

2)安装依赖:

# 安装所有依赖
composer install

# 安装指定包
composer require monolog/monolog

# 安装开发依赖
composer require --dev phpunit/phpunit

3)更新依赖:

# 更新所有依赖
composer update

# 更新指定包
composer update monolog/monolog

4)删除依赖:

composer remove monolog/monolog

4. composer.json 说明

{
    "name": "test/project",
    "description": "测试项目",
    "require": {
        "php": ">=7.0",
        "monolog/monolog": "^2.0"
    },
    "autoload": {
        "psr-4": {
            "App\\": "src/"
        }
    }
}

5. 自动加载

// 引入自动加载
require __DIR__ . '/vendor/autoload.php';

// 使用类
$log = new Monolog\Logger('name');

6. 常用操作

  • composer install:根据 lock 文件安装
  • composer update:更新依赖
  • composer dump-autoload:重新生成自动加载

总结

Composer 使用要点:

  • 安装 Composer
  • 配置国内镜像
  • require 安装依赖
  • autoload 自动加载
  • install/update 管理依赖

做 PHP 开发,Composer 一定要会用。


emer 发布于  2026-10-8 07:20 

Git 常用命令大全

Git 常用命令大全

Git 是开发必备工具,这些常用命令一定要会。

1. 初始化和克隆

# 初始化仓库
git init

# 克隆远程仓库
git clone https://github.com/user/repo.git

2. 提交代码

# 查看状态
git status

# 添加所有文件到暂存区
git add .

# 添加指定文件
git add index.html

# 提交到本地仓库
git commit -m "提交说明"

# 提交并添加所有修改
git commit -am "提交说明"

3. 远程操作

# 推送到远程分支
git push origin master

# 拉取远程更新
git pull origin master

# 查看远程仓库
git remote -v

4. 分支操作

# 查看所有分支
git branch

# 创建新分支
git branch dev

# 切换分支
git checkout dev

# 创建并切换分支
git checkout -b dev

# 合并分支
git merge dev

# 删除分支
git branch -d dev

5. 版本回退

# 查看提交历史
git log

# 查看简化日志
git log --oneline

# 回退到上一个版本
git reset --hard HEAD^

# 回退到指定版本
git reset --hard 版本号

# 查看操作记录
git reflog

6. 撤销操作

# 撤销工作区修改
git checkout -- 文件

# 撤销暂存区
git reset HEAD 文件

# 删除文件
git rm 文件

7. 常用技巧

1)查看差异:

git diff

2)暂存修改:

# 临时保存
git stash

# 恢复暂存
git stash pop

3)打标签:

git tag v1.0
git push origin v1.0

8. 配置用户信息

# 全局配置
git config --global user.name "用户名"
git config --global user.email "邮箱"

总结

Git 常用命令要点:

  • add 添加文件
  • commit 提交代码
  • push 推送到远程
  • pull 拉取更新
  • branch 分支管理
  • log 查看历史
  • reset 版本回退

做开发,Git 一定要熟练用。


emer 发布于  2026-10-8 07:17 

PHP 会话管理详解

PHP 会话管理详解

Session 是 PHP 做用户登录状态管理的核心功能,搞懂它很重要。

1. 什么是 Session

  • Cookie: 存在客户端(浏览器)
  • Session: 存在服务器端
  • 通过 SessionID 关联用户

2. 基础用法

// 开启会话(必须放在最前面)
session_start();

// 存数据
$_SESSION['user_id'] = 1;
$_SESSION['username'] = "test";

// 取数据
echo $_SESSION['username'];

// 判断是否登录
if (isset($_SESSION['user_id'])) {
    echo "已登录";
} else {
    echo "未登录";
}

// 销毁会话
session_destroy();

3. 登录验证示例

// 登录页
session_start();

if ($_POST['password'] == "123456") {
    $_SESSION['user'] = $_POST['username'];
    header("Location: dashboard.php");
}

// 验证页
session_start();
if (!isset($_SESSION['user'])) {
    header("Location: login.php");
    exit;
}

4. 常用配置

php.ini 里的配置:

; 会话有效期(分钟)
session.gc_maxlifetime = 1440

; Cookie 有效期(秒)
session.cookie_lifetime = 0

; 是否只允许 HTTP 访问 Cookie
session.cookie_httponly = On

5. 常见问题

1)session 丢失:

  • 检查是否有输出(session_start 前不能有空格)
  • 检查 Cookie 是否被禁用

2)多服务器共享 Session:

  • 存在数据库里
  • 存在 Redis 里
  • 不要用文件 Session

3)安全问题:

  • 登录后重新生成 SessionID
    session_regenerate_id();
  • 防止 Session 固定攻击

6. Cookie vs Session

对比 Cookie Session
存储位置 客户端 服务器端
大小限制 4KB 无限制
安全性 低 高
生命周期 可长期保存 浏览器关闭就没了

7. 登出销毁

session_start();

// 清除所有 session 变量
$_SESSION = array();

// 清除 session cookie
if (isset($_COOKIE[session_name()])) {
    setcookie(session_name(), '', time()-42000, '/');
}

// 销毁 session
session_destroy();

总结

PHP 会话管理要点:

  • session_start() 必须在最前面
  • 登录验证用 $_SESSION 判断
  • 生产环境用 Redis 存 Session
  • 登录后重新生成 SessionID 防攻击

做用户系统,Session 是必须掌握的。


emer 发布于  2026-10-8 07:13 

PHP 错误处理机制

PHP 错误处理机制

做开发离不开错误处理,搞懂 PHP 的错误机制才能写出健壮的代码。

1. 错误级别

PHP 错误分几个级别:

1)致命错误(E_ERROR)

  • 脚本停止执行
  • 比如调用不存在的类、方法

2)警告(E_WARNING)

  • 脚本继续执行
  • 比如包含不存在的文件

3)注意(E_NOTICE)

  • 不影响执行
  • 比如使用未定义的变量

2. 错误报告配置

php.ini 里的配置:

; 开发环境:显示所有错误
display_errors = On
error_reporting = E_ALL

; 生产环境:不显示错误,记录日志
display_errors = Off
log_errors = On
error_reporting = E_ALL & ~E_NOTICE

3. 自定义错误处理

// 设置错误报告级别
error_reporting(E_ALL);

// 自定义错误处理函数
set_error_handler(function($errno, $errstr, $errfile, $errline) {
    echo "错误:[$errno] $errstr 在 $errfile 第 $errline 行";
    return true; // 阻止默认错误处理
});

// 测试
echo $undefined_var;

4. 异常处理

try {
    if (!file_exists("test.txt")) {
        throw new Exception("文件不存在");
    }
    $file = fopen("test.txt", "r");
} catch (Exception $e) {
    echo "错误:" . $e->getMessage();
} finally {
    echo "\n执行完成";
}

5. 错误日志

// 记录错误日志
error_log("这是一条错误日志", 3, "/tmp/php_errors.log");

// 手动触发错误
trigger_error("自定义错误", E_USER_WARNING);

6. 开发 vs 生产

开发环境:

  • 显示错误
  • 所有错误都报告
  • 方便调试

生产环境:

  • 不显示错误(防止泄露敏感信息)
  • 记录错误日志
  • 只报告致命错误和警告

7. 常用技巧

1)错误抑制符 @

// 不推荐,会影响性能
@include("config.php");

2)die/exit

// 简单粗暴
if (! $db) {
    die("数据库连接失败");
}

3)抛异常

  • 推荐用异常处理
  • 代码更清晰,容易维护

总结

PHP 错误处理要点:

  • 开发环境显示错误,生产环境记录日志
  • 用 try-catch 处理异常
  • 错误日志要记录,方便排查
  • 不要用 @ 错误抑制符

写代码多做错误处理,线上少踩坑。


emer 发布于  2026-10-8 07:09 

PHP 数组常用函数

PHP 数组常用函数

数组是 PHP 最常用的数据结构,数组函数用熟了开发效率翻倍。整理一份常用清单。

1. 数组创建和遍历

// 索引数组
$arr1 = [1, 2, 3];

// 关联数组
$arr2 = ['name' => '张三', 'age' => 25];

// 遍历
foreach ($arr2 as $key => $value) {
    echo "$key: $value\n";
}

2. 数组增删改查

// 追加元素
$arr[] = 4;
array_push($arr, 5, 6);

// 头部插入
array_unshift($arr, 0);

// 删除末尾元素
array_pop($arr);

// 删除头部元素
array_shift($arr);

// 删除指定元素
unset($arr[0]);

3. 数组合并和拆分

// 合并数组
$arr1 = [1, 2];
$arr2 = [3, 4];
$merged = array_merge($arr1, $arr2); // [1,2,3,4]

// 拆分
$slice = array_slice($arr, 0, 2);

4. 查找和过滤

// 判断键是否存在
array_key_exists('name', $arr);

// 判断值是否存在
in_array('张三', $arr);

// 查找值对应的键
array_search('张三', $arr);

// 数组过滤
$filtered = array_filter([1, 2, 3, 4], function($n) {
    return $n > 2;
}); // [3,4]

5. 排序

sort($arr);      // 升序
rsort($arr);     // 降序
asort($arr);     // 按值升序,保留键
ksort($arr);     // 按键升序

6. 常用操作

// 数组长度
count($arr);

// 去重
array_unique($arr);

// 反转
array_reverse($arr);

// 随机取一个
array_rand($arr);

7. 实际应用

统计数组中出现次数:

$counts = array_count_values(['a', 'b', 'a', 'c', 'a']);
// ['a' => 3, 'b' => 1, 'c' => 1]

二维数组按某列排序:

$users = [
    ['name' => '张三', 'age' => 25],
    ['name' => '李四', 'age' => 20]
];
array_multisort(array_column($users, 'age'), SORT_ASC, $users);

总结

PHP 数组函数非常多,日常开发记住这些常用的就够了:

  • 增删改查:array_push / array_pop / unset
  • 合并拆分:array_merge / array_slice
  • 查找过滤:in_array / array_filter
  • 排序:sort / asort / ksort

数组是 PHP 的灵魂,多用多练就熟了。


emer 发布于  2026-10-8 07:05 

PHP 字符串处理函数

PHP 字符串处理函数

字符串处理是 PHP 开发最常用的操作,整理一份常用函数清单。

1. 字符串长度

// 英文字符串长度
echo strlen("hello world"); // 11

// 中文字符串长度(mbstring扩展)
echo mb_strlen("你好世界", "UTF-8"); // 4

2. 截取字符串

// 英文截取
echo substr("hello world", 0, 5); // hello

// 中文截取
echo mb_substr("你好世界", 0, 2, "UTF-8"); // 你好

3. 查找替换

// 查找位置
echo strpos("hello world", "world"); // 6

// 替换
echo str_replace("world", "PHP", "hello world"); // hello PHP

// 大小写转换
echo strtoupper("hello"); // HELLO
echo strtolower("HELLO"); // hello

4. 去除空格

// 去除两端空格
echo trim("  hello  "); // hello

// 去除左侧空格
echo ltrim("  hello"); // hello

// 去除右侧空格
echo rtrim("hello  "); // hello

5. 字符串分割

// 分割成数组
$arr = explode(",", "a,b,c");
print_r($arr); // Array([0]=>a [1]=>b [2]=>c)

// 数组合并成字符串
echo implode(",", $arr); // a,b,c

6. 格式化输出

// 格式化字符串
echo sprintf("你好,%s!今年%d岁", "张三", 25);
// 你好,张三!今年25岁

7. HTML 转义

// 转义特殊字符
echo htmlspecialchars("<script>alert(1)</script>");
// &lt;script&gt;alert(1)&lt;/script&gt;

8. 常用场景

截取标题:

function subTitle($str, $len = 20) {
    if (mb_strlen($str, "UTF-8") > $len) {
        return mb_substr($str, 0, $len, "UTF-8") . "...";
    }
    return $str;
}

过滤空格和特殊字符:

function filterStr($str) {
    $str = trim($str);
    $str = str_replace(" ", "", $str);
    return $str;
}

总结

字符串处理常用函数:

  • 长度:strlen / mb_strlen
  • 截取:substr / mb_substr
  • 查找替换:strpos / str_replace
  • 分割合并:explode / implode
  • 去除空格:trim

做 PHP 开发这些函数一定要用熟。


emer 发布于  2026-10-7 07:19 

PHP 错误处理最佳实践

PHP 错误处理最佳实践

错误处理是 PHP 开发最容易忽略但最重要的环节,写好了排查问题事半功倍,写不好线上出问题抓瞎。

1. 错误级别

PHP 有不同的错误级别:

  • E_ERROR:致命错误,脚本停止
  • E_WARNING:警告,脚本继续
  • E_NOTICE:注意,一般是不规范写法
  • E_PARSE:语法解析错误
// 开发环境显示所有错误
error_reporting(E_ALL);
ini_set('display_errors', 1);

// 生产环境不显示错误,只记日志
error_reporting(E_ALL);
ini_set('display_errors', 0);
ini_set('log_errors', 1);
ini_set('error_log', '/var/log/php/error.log');

2. 错误 vs 异常

PHP 里错误和异常是两回事:

  • 错误:语法错误、内存不足这种,用 try/catch 抓不住
  • 异常:业务层面的错误,比如数据库连接失败

PHP 7+ 大部分错误会抛 Error 异常,也可以抓了。

3. try/catch 用法

try {
    // 可能出错的代码
    $pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');
} catch (PDOException $e) {
    // 捕获异常
    echo "数据库连接失败:" . $e->getMessage();
    // 记日志
    error_log("DB Error: " . $e->getMessage());
}

4. 自定义错误处理

// 设置自定义错误处理器
set_error_handler(function($errno, $errstr, $errfile, $errline) {
    // 把错误转成异常抛出
    throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
});

// 设置异常处理器
set_exception_handler(function($e) {
    // 所有未捕获的异常都到这里
    error_log("Uncaught: " . $e->getMessage());
    echo "系统繁忙,请稍后再试";
});

// 注册关闭函数,抓致命错误
register_shutdown_function(function() {
    $error = error_get_last();
    if ($error && in_array($error['type'], [E_ERROR, E_PARSE])) {
        error_log("Fatal: " . $error['message']);
    }
});

5. 开发 vs 生产环境

开发环境:

  • 打开 display_errors,错误直接显示在页面
  • 打开所有错误级别
  • 详细的报错信息方便调试

生产环境:

  • 关闭 display_errors,不要把错误暴露给用户
  • 错误全部写到日志文件
  • 页面显示友好的"系统错误"提示

6. 常用错误处理技巧

// 1. 用 @ 抑制错误不好,应该判断
// 不好:
$file = @file_get_contents('config.php');

// 好:
$file = file_exists('config.php') ? file_get_contents('config.php') : null;

// 2. 不要把数据库错误信息直接返回给前端
// 不好:
echo $e->getMessage();

// 好:
error_log($e->getMessage());
echo json(['code' => 500, 'msg' => '系统错误']);

// 3. 日志要分级
error_log('信息:用户登录', 3, '/var/log/info.log');
error_log('警告:登录失败次数过多', 3, '/var/log/warn.log');
error_log('错误:数据库连接失败', 3, '/var/log/error.log');

7. 总结

PHP 错误处理核心:

  • 开发环境显示错误,生产环境只记日志
  • try/catch 捕获业务异常
  • set_exception_handler 兜底
  • 不要把错误细节暴露给用户
  • 日志分级,方便排查

搞懂这些,线上出问题排查效率翻倍。


emer 发布于  2026-10-6 07:37 

Git 常用命令汇总

Git 常用命令汇总

Git 是现在开发必备工具,整理一份常用命令清单,收藏备用。

1. 初始化和克隆

# 初始化新仓库
git init

# 克隆远程仓库
git clone https://github.com/user/repo.git

# 克隆指定分支
git clone -b dev https://github.com/user/repo.git

2. 查看状态

# 查看工作区状态
git status

# 查看提交历史
git log

# 查看简洁历史
git log --oneline --graph

# 查看文件改动
git diff

3. 添加和提交

# 添加所有文件到暂存区
git add .

# 添加指定文件
git add file.php

# 提交到本地仓库
git commit -m "修复bug"

# 提交并跳过验证
git commit --no-verify -m "修复bug"

4. 分支操作

# 查看本地分支
git branch

# 查看所有分支(包括远程)
git branch -a

# 创建新分支
git branch dev

# 切换分支
git checkout dev

# 创建并切换分支
git checkout -b dev

# 删除分支
git branch -d dev

# 强制删除分支
git branch -D dev

5. 远程操作

# 拉取远程更新
git pull

# 推送本地提交
git push

# 推送本地新分支到远程
git push -u origin dev

# 删除远程分支
git push origin --delete dev

6. 撤销操作

# 撤销工作区修改
git checkout -- file.php

# 撤销暂存区
git reset HEAD file.php

# 回退到上一个版本
git reset --hard HEAD^

# 回退到指定版本
git reset --hard commit_id

# 撤销上次提交(保留修改)
git reset --soft HEAD^

7. 合并和变基

# 合并分支
git merge dev

# 变基
git rebase master

# 取消合并
git merge --abort

8. 标签操作

# 打标签
git tag v1.0.0

# 查看标签
git tag

# 推送标签
git push origin v1.0.0

# 推送所有标签
git push origin --tags

总结

Git 常用命令核心:

  • 查看:status / log / diff
  • 提交:add / commit
  • 分支:branch / checkout / merge
  • 远程:pull / push
  • 撤销:reset / checkout

记住这些,日常 Git 操作基本够用了。


emer 发布于  2026-10-4 11:11 

Docker 常用命令大全

Docker 常用命令大全

Docker 命令不多,但记不住还是很麻烦。整理一份常用命令清单,收藏备用。

1. 镜像命令

# 拉取镜像
docker pull nginx:latest

# 查看本地镜像
docker images

# 删除镜像
docker rmi nginx:latest

# 搜索镜像
docker search nginx

# 导出镜像
docker save -o nginx.tar nginx:latest

# 导入镜像
docker load -i nginx.tar

2. 容器命令

# 启动容器(后台运行)
docker run -d --name mynginx -p 80:80 nginx

# 查看运行中的容器
docker ps

# 查看所有容器(包括停止的)
docker ps -a

# 停止容器
docker stop mynginx

# 启动已停止的容器
docker start mynginx

# 重启容器
docker restart mynginx

# 删除容器
docker rm mynginx

# 强制删除运行中的容器
docker rm -f mynginx

3. 进入容器

# 进入容器(bash)
docker exec -it mynginx bash

# 进入容器(sh)
docker exec -it mynginx sh

# 查看容器日志
docker logs mynginx

# 实时查看日志
docker logs -f mynginx

# 查看容器详情
docker inspect mynginx

4. 文件操作

# 从容器复制文件到宿主机
docker cp mynginx:/etc/nginx/nginx.conf ./

# 从宿主机复制文件到容器
docker cp ./index.html mynginx:/usr/share/nginx/html/

5. 端口和网络

# 查看容器端口映射
docker port mynginx

# 查看容器 IP
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mynginx

6. 清理命令

# 停止所有容器
docker stop $(docker ps -q)

# 删除所有停止的容器
docker container prune

# 删除所有未使用的镜像
docker image prune

# 删除所有未使用的资源(危险操作)
docker system prune -a

7. Docker Compose 常用命令

# 启动所有服务
docker-compose up -d

# 停止所有服务
docker-compose down

# 查看服务状态
docker-compose ps

# 查看日志
docker-compose logs -f

# 重启某个服务
docker-compose restart nginx

总结

Docker 常用命令核心:

  • 镜像:pull / images / rmi
  • 容器:run / ps / stop / start / rm
  • 进入:exec -it
  • 日志:logs -f
  • 清理:prune

记住这些,日常 Docker 操作基本够用了。


emer 发布于  2026-10-4 11:07 

PHP Composer 入门指南

PHP Composer 入门指南

Composer 是 PHP 的依赖管理工具,现在做 PHP 开发不用 Composer 几乎不可能。

1. 安装 Composer

# Linux/Mac
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer

# Windows 直接下载安装包
# https://getcomposer.org/Composer-Setup.exe

验证安装:

composer -V

2. 换国内镜像(必须)

官方镜像太慢,一定要换国内镜像:

# 阿里云镜像
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

# 腾讯云镜像
composer config -g repo.packagist composer https://mirrors.tencent.com/composer/

3. 初始化项目

# 进入项目目录
cd myproject

# 初始化 composer.json
composer init

或者手动创建 composer.json:

{
    "name": "my/project",
    "require": {
        "monolog/monolog": "^2.0"
    }
}

4. 常用命令

# 安装依赖
composer install

# 更新依赖
composer update

# 安装某个包
composer require monolog/monolog

# 卸载某个包
composer remove monolog/monolog

# 自动加载
composer dump-autoload

5. 自动加载

// 引入自动加载文件
require __DIR__ . '/vendor/autoload.php';

// 然后就可以直接用第三方库了
$log = new Monolog\Logger('name');

6. composer.json 详解

{
    "name": "项目名",
    "description": "项目描述",
    "type": "project",
    "require": {
        "php": ">=7.4",
        "monolog/monolog": "^2.0",
        "guzzlehttp/guzzle": "^7.0"
    },
    "autoload": {
        "psr-4": {
            "App\\": "src/"
        }
    }
}

7. 版本号说明

  • ^2.0:兼容 2.0 到 3.0(不包含 3.0)
  • ~2.0:兼容 2.0 到 2.1(不包含 2.1)
  • *:任意版本
  • 2.0.*:2.0.x 版本

总结

Composer 核心:

  • 安装:一行命令
  • 换镜像:必须换国内源
  • 常用:install / update / require / remove
  • 自动加载:require vendor/autoload.php

搞懂这些,Composer 日常开发就够用了。


emer 发布于  2026-10-4 11:06 

PHP 字符串处理技巧

PHP 字符串处理常用技巧

字符串处理是 PHP 开发最常用的操作,掌握这些函数,写代码效率翻倍。

1. 截取字符串

// 截取前 5 个字符
substr("hello world", 0, 5); // hello

// 截取从第 6 个开始到结尾
substr("hello world", 6); // world

// 中文字符串截取(用 mb_)
mb_substr("你好世界", 0, 2, "UTF-8"); // 你好

注意:中文要用 mb_substr,不能用 substr,否则会乱码。

2. 替换字符串

//  str_replace(替换所有)
str_replace("world", "PHP", "hello world"); // hello PHP

//  str_ireplace(不区分大小写)
str_ireplace("WORLD", "PHP", "hello world");

//  preg_replace(正则替换)
preg_replace("/\d/", "", "abc123def"); // abcdef

3. 查找字符串

// 查找位置(找不到返回 false)
strpos("hello world", "world"); // 6

// 查找最后出现位置
strrpos("hello world hello", "hello"); // 12

// 判断是否包含(PHP 8+)
str_contains("hello world", "world"); // true

// 判断开头
str_starts_with("hello world", "hello"); // true

// 判断结尾
str_ends_with("hello world", "world"); // true

4. 格式化字符串

// 去除首尾空格
trim("  hello  "); // hello

// 只去左边/右边
ltrim("  hello"); // hello
rtrim("hello  "); // hello

// 转小写/大写
strtolower("Hello"); // hello
strtoupper("hello"); // HELLO

// 首字母大写
ucfirst("hello"); // Hello

// 每个单词首字母大写
ucwords("hello world"); // Hello World

5. 字符串和数组转换

// 字符串转数组
explode(",", "a,b,c"); // ["a","b","c"]

// 数组转字符串
implode(",", ["a","b","c"]); // a,b,c

// 重复字符串
str_repeat("ab", 3); // ababab

// 字符串长度
strlen("hello"); // 5
mb_strlen("你好", "UTF-8"); // 2

6. 常用技巧

// 生成随机字符串
substr(md5(time()), 0, 8);

// 脱敏手机号
substr_replace("13812345678", "****", 3, 4); // 138****5678

// 截取摘要(带省略号)
mb_strlen($text) > 10 ? mb_substr($text, 0, 10) . "..." : $text;

// 清除 HTML 标签
strip_tags("<p>hello</p>"); // hello

总结

PHP 字符串处理核心函数:

  • 截取:substr / mb_substr
  • 替换:str_replace / preg_replace
  • 查找:strpos / str_contains
  • 格式化:trim / strtolower / ucwords
  • 转换:explode / implode

记住这些,日常开发基本够用了。


emer 发布于  2026-10-4 11:04