Peak Xin

小峰的博客


  • 首页

  • 标签

  • 分类

  • 归档

  • 优秀资源

  • 搜索

PHP GD库转换输出为base64

发表于 2022-01-11 | 分类于 后端开发 , PHP |
字数统计: 141 | 阅读时长 ≈ 1

使用GD库的 imagejpeg() / imagepng() 处理图片,它们直接写入所述图像数据,以输出流(或文件)。

如果你想获取图片文件内容则通过如下方法:

1
2
3
4
5
6
// $img = 要处理的图像资源;
ob_start();// 打开输出控制缓冲
imagepng($img);// 显示PNG图像
$image_data = ob_get_contents();// 返回输出缓冲区的内容
imagedestroy($img);// 释放与 image 关联的内存
ob_end_clean();// 清空(擦除)缓冲区并关闭输出缓冲

$image_data得到的数据就是图片文件的数据内容 或者 直接返回 ob_end_clean()是一样的

windows下本地搭建https服务器

发表于 2021-11-30 | 分类于 运维 |
字数统计: 555 | 阅读时长 ≈ 2

使用工具

  • 使用git的命令行工具或者cmder
  • 注意使用cmd命令行是不行的, cmd命令行并不能识别openssl命令

openssl genrsa 命令介绍

openssl genrsa 命令是会用来生成 RSA 私有秘钥,不会生成公钥,因为公钥提取自私钥。生成时是可以指定私钥长度和密码保护。
如果需要查看公钥或生成公钥,可以使用 openssl rsa 命令。

创建私钥

生成秘钥是生成证书的前提

阅读全文 »

Yii2 自定义省市区三级联动挂件

发表于 2021-11-26 | 分类于 PHP框架 , Yii |
字数统计: 976 | 阅读时长 ≈ 5

废话不多说直接上车

  1. 创建地区表结构
1
2
3
4
5
6
7
8
9
10
11
12
DROP TABLE IF EXISTS `region`;
CREATE TABLE `region` (
`region_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '地区ID号',
`parent_id` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '地区父级ID',
`region_name` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '地区名称',
`region_type` tinyint(1) NOT NULL DEFAULT 2 COMMENT '地区级别',
PRIMARY KEY (`region_id`) USING BTREE,
INDEX `parent_id`(`parent_id`) USING BTREE,
INDEX `region_name`(`region_name`) USING BTREE,
INDEX `region_type`(`region_type`) USING BTREE,
INDEX `agency_id`(`agency_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 659009509 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '地区' ROW_FORMAT = Dynamic;
  1. 创建 Region Model 文件

/common/models/Region.php

阅读全文 »

Yii2 ActiveRecord多表关联和多表关联搜索的实现

发表于 2021-11-23 | 分类于 PHP框架 , Yii |
字数统计: 337 | 阅读时长 ≈ 1

需求:假设我们有一张商品表goods和一张商品分类表categories,通过商品分类简称搜索商品列表

goods表AR

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
namespace common\models;

use Yii;
use yii\db\ActiveRecord;

class Goods extends ActiveRecord
{
/**
* {@inheritdoc}
*/
public static function tableName()
{
return '{{%goods}}';
}

/**
* {@inheritdoc}
*/
public function attributeLabels()
{
return [
'id' => '商品ID',
'title' => '商品标题',
'cid' => '商品分类ID',
'created_at' => '添加时间',
'updated_at' => '修改时间'
];
}

/**
* 与商品分类表关联
*/
public function getCategory()
{
return $this->hasOne(Category::className(), ['id'=>'cid']);
}
}
阅读全文 »

Yii2 GridView 表格用法

发表于 2021-11-16 | 分类于 PHP框架 , Yii |
字数统计: 1.4k | 阅读时长 ≈ 7

Yii2框架下展示列表数据通常用Gridview来实现,这里整理常用的小技巧,方便以后查询使用

1
2
3
4
5
6
7
8
<?= GridView::widget([
'dataProvider' => $dataProvider,
'layout' => "{items}\n{summary}\n{pager}",
'tableOptions' => ['class' => 'table table-striped table-bordered table-hover'],
'columns' => [

],
]); ?>

表格整体配置

自定义行样式

单数行为绿色背景,偶数行为红色背景

1
2
3
4
5
6
7
8
<?= GridView::widget([
// ......
"dataProvider" => $dataProvider,
"rowOptions" => function($model, $key, $index, $grid) {
return ["class" => $index % 2 == 0 ? "red" : "green"];
},
// ......
]); ?>

red和green需要有对应的样式实现

阅读全文 »

Yii2如何在View中加入JS代码

发表于 2021-11-12 | 分类于 PHP框架 , Yii |
字数统计: 259 | 阅读时长 ≈ 1

如果在view中直接添加js代码,如下:

1
2
3
4
5
<script>
$(function(){
alert('js code');
});
</script>

会提示没有$ is not defined错误,这是因为view中添加js代码的前面没有引用juqery.js,默认全局的jquery则是在文件尾添加。

解决方法:

阅读全文 »

JS实现复制到剪贴板功能

发表于 2021-11-12 | 分类于 前端开发 , JavaScript |
字数统计: 155 | 阅读时长 ≈ 1

原生JS实现

原生JS,先使用 select() 选中输入框文本,然后使用 document.execCommand("Copy")复制到剪贴板

前提条件

  • select() 方法只对 <input> 和 <textarea> 有效
  • 输入框不能有disabled属性
  • 输入框不能有hidden属性
  • 输入框的 width 和 height 不能为0

实现代码

阅读全文 »

Yii2模型通过中间表关联

发表于 2021-10-18 | 分类于 PHP框架 , Yii |
字数统计: 97 | 阅读时长 ≈ 1

Order 模型

1
2
3
4
5
6
7
8
class Order extends \yii\db\ActiveRecord
{
public function getItems()
{
return $this->hasMany(Item::className(), ['id' => 'item_id'])
->viaTable(OrderItem::tableName(), ['order_id' => 'id']);
}
}

OrderItem 模型是 Order 与 Item 的中间表

order 表的主键 id 与 order-item 表 order_id 关联

item 表的主键 id 与 order-item 表 order_id 关联

通过Order模型获取关联的Item表数据

1
2
$order = Order::find()->all();
$order->items->item表的字段

Yii2模型自动生成新增和修改时间

发表于 2021-10-18 | 分类于 PHP框架 , Yii |
字数统计: 216 | 阅读时长 ≈ 1

使用 timeStampBehavior

这个行为支持在 Active Record 存储时自动更新它的时间戳属性

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
namespace app\models\User;

use yii\db\ActiveRecord;
use yii\behaviors\TimestampBehavior;

class User extends ActiveRecord
{
// ...

public function behaviors()
{
return [
[
'class' => TimestampBehavior::className(),
'attributes' => [
ActiveRecord::EVENT_BEFORE_INSERT => ['created_at', 'updated_at'],
ActiveRecord::EVENT_BEFORE_UPDATE => ['updated_at'],
],
// if you're using datetime instead of UNIX timestamp:
// 'value' => new Expression('NOW()'),
],
];
}
}

以上指定的行为数组:

当记录插入($model->insert()或$model->save())时,行为将当前时间戳赋值给 created_at 和 updated_at 属性;
当记录更新($model->update())时,行为将当前时间戳赋值给 updated_at 属性。

使用$model->save()更新数据updated_at不更新
如果更新字段数据没有改变$model->update()返回0

TimestampBehavior 行为还提供了一个有用的方法 touch(), 这个方法能将当前时间戳赋值给指定属性并保存到数据库:

1
$user->touch('login_time');

Yii2.0框架数据库查询总结

发表于 2021-10-09 | 分类于 PHP框架 , Yii |
字数统计: 1.2k | 阅读时长 ≈ 5

基础查询

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
User::find()->all();    // 返回所有数据;

User::findOne($id); // 返回 主键 id 为定值 的一条数据;

User::find()->select(['id', 'name'])->one(); // 返回 字段为id和name 的一条数据;
User::find()->select('id,name')->one(); // 返回 字段为id和name 的一条数据;

User::find()->select(['id', 'name'])->all(); // 返回 字段为id和name 的所有数据;

User::find()->where(['age' => '18'])->one(); // 返回 ['age' => '18'] 的一条数据;
User::find()->where(['=', 'age', '18'])->one(); // 返回 ['age' => '18'] 的一条数据;

User::find()->where(['age' => '18'])->all(); // 返回 ['age' => '18'] 的所有数据;

User::find()->where(['in', 'age', ['18', '19']])->all(); // 返回 age 在18和19 的所有数据;
User::find()->where(['age'=>['18', '19']])->all(); // 返回 age 在18和19 的所有数据;

User::find()->orderBy('id DESC')->all(); // 排序查询, DESC:降序,ASC:升序;

User::find()->groupBy('type')->all(); // 根据 type 分组查询 的所有数据;

User::findBySql('SELECT * FROM user')->all(); // 用 sql 语句查询 user 表里面的所有数据;

User::findBySql('SELECT * FROM user')->one(); // 用 sql 语句查询 user 表里面的一条数据;

User::find()->andWhere(['sex' => '男', 'age' => '24'])->count('id'); // 统计符合条件的总条数;

User::find()->andFilterWhere(['like', 'name', '腾哥'])->all(); // 用 like 查询数据,生成 name LIKE '%腾哥%'

User::find()->andFilterWhere(['like', 'name', '%腾哥', false])->all(); // 用 like 查询数据,生成 name LIKE '%腾哥'

User::find()->andFilterWhere(['like', 'name', '腾哥%', false])->all(); // 用 like 查询数据,生成 name LIKE '腾哥%'

User::find()->one(); // 返回一条数据;

User::find()->count(); // 返回记录的数量;

User::find()->average(); // 返回指定列的平均值;

User::find()->min(); // 返回指定列的最小值 ;

User::find()->max(); // 返回指定列的最大值 ;

User::find()->scalar(); // 返回值的第一行第一列的查询结果;

User::find()->column(); // 返回查询结果中的第一列的值;

User::find()->exists(); // 返回一个值指示是否包含查询结果的数据行;

User::find()->batch(10); // 每次取 10 条数据

User::find()->each(10); // 每次取 10 条数据, 迭代查询

User::find()->indexBy('id')->asArray()->all(); // 返回所有数据数组并以ID字段为数组索引,其中ID必须是所查询的字段;
阅读全文 »
1…345…20
Peak Xin

Peak Xin

Always keep a learning heart.

197 日志
41 分类
111 标签
RSS
GitHub E-Mail Twitter StackOverflow GitLab Travis Gitee SegmentFault CSDN
推荐网址
  • 阮一峰的个人网站
  • 廖雪峰的官方网站
  • 韩天峰(Rango)的博客
© 2025 Peak Xin 鲁ICP备15013472号-3
由 Hexo 强力驱动
|
主题 — NexT.Mist v5.1.4
本博客 由 Peak Xin 采用 知识共享 署名 4.0 国际 许可协议进行许可。
站点总访客数: 站点总访问量:
0%