首页
Search
1
解决 docker run 报错 oci runtime error
49,342 阅读
2
WebStorm2025最新激活码
27,592 阅读
3
互点群、互助群、微信互助群
22,746 阅读
4
常用正则表达式
21,551 阅读
5
罗技鼠标logic g102驱动程序lghub_installer百度云下载windows LIGHTSYNC
19,359 阅读
自习室
CODER
课程
SEO
学习视频
手册资料
呆萌
工具软件
运维
DBA
互通有无
资源
微信群
激活工具
搞钱日记
养生记
包罗万象
Search
标签搜索
DeepSeek
学习指北
Prompt
提示词
Loong
累计撰写
180
篇文章
累计收到
0
条评论
首页
栏目
自习室
CODER
课程
SEO
学习视频
手册资料
呆萌
工具软件
运维
DBA
互通有无
资源
微信群
激活工具
搞钱日记
养生记
包罗万象
页面
搜索到
180
篇与
的结果
2019-08-26
foreach使用引用时需要注意的问题
foreach ($car['cartList'] as &$shop) { } // 这里不释放会影响下面的$shop ,因为引用无法再正常使用 unset($shop); // 这里下面的循环$shop无法正常工作,因为上面$shop成为引用了 foreach ($car['cartList'] as $shop) { }&$item 要特别注意,遍历完必须马上 unset 否则就是一颗炸弹,对业务造成威胁,这种造成的业务错误往往很难排查! 所以不关紧要的变量需要提早释放,这是一个好的习惯,必须严格遵守,不是因为获得最大性能,而是因为可以减少这种难以预见,将来潜在的错误。
2019年08月26日
5,371 阅读
0 评论
16 点赞
2019-08-25
PHP数组与数据结构
数组是PHP中一个灰常、灰常、灰常重要的一个数据类型。因为他涉及到的知识点太多,太杂,我们的讲解是在数组类型部份告诉了大家一个大概,然后专门用一个章节来跟大家讲解。学习数组,大家主要学习两部分的知识:数组的定义,定义中的一些注意的坑数组的函数使用和(默写)又是默写级别的数组在之前我们让大家记住两个观点:数组可以存入多个不同类型的数据,是一个复合数据类型。数组的英文是array,学一下最简单的数组声明。那我们来进行简单的回顾:<?php $shu = array(1 , 1.5 , true ,'天王盖地虎,小鸡炖蘑菇'); echo '<pre>'; var_dump($shu); echo '</pre>'; ?>在上例中,我们发现我们存入了:整型浮点布尔字符串注:上例中echo pre这个标签的主要目的是为原样输出,格式展示的更好看,更清晰。我们用var_dump()打印出来显示看一下效果:我们仔细观察一下上面的这张图,你会发现以下几个特点:array(size = 4) 说明里面有4个元素0 => int 1 我们知道int是整型的意思,1是一个整型的数值。那前面的0,1,2,3和=>代表什么意思呢?最新前的0,1,2,3代表的是值的读取标识号,我们称之为下标或者键(英文:key)=> 是一个符号标准叫法叫作:键值对应符。因此,以后再看到 0=> int 1 可以这样来说。 下标访问符0对应整型的1。我们还称数组里面的键值对为元素,元素就是键值对的组合。哦耶! 数组好像还挺好学的,全是一些规律哟。我们通过上例,其实你一不小心的就完成了数组其中的一种声明方式:索引数组的声明哟。所谓索引数组:就是下标全为整型的数组。索引数组的下标必须要从0开始吗?答:这个问题其实不然,索引数组并不一定要从0开始。那如何能够不从0开始呢?答:需要用到大家在上面学的一小块知识哟。就是键值对应符。我们来动手写写。<?php $kele = array('只有不断努力才能博得未来',10 => 'NoAlike', 'PHP学院' , '去PHP学院去PHP', 19 => '凤姐和芙蓉我都爱' , '杨幂臭脚我最爱'); //打印显示$kele echo '<pre>'; var_dump($kele); echo '</pre>'; ?>上例中,我们一不小心就写了一个索引数组。不过索引数组的下标不是从0 开始的,而是从10开始的。不过上面的例子中,我们觉得写的不优美,我们可以将代码写的更加优美一些,格式更加清晰一些。<?php $kele = array( '只有不断努力才能博得未来', 10 => 'NoAlike', 'PHP学院' , '去PHP学院去PHP', 19 => '凤姐和芙蓉我都爱' , '杨幂臭脚我最爱' ); //打印显示$kele echo '<pre>'; var_dump($kele); echo '</pre>'; ?>这样是不是看得更清楚,一行对应一个数组的值。我们执行一下代码,看一下效果:通过上面的效果,我们来总结规律:索引数组若不强制声明他的下标,他的下标是从0开始的。(我们的第一个数组的值:只有不断努力才能博得未来。这个值的下标为0)。如果我指定过下标他的下标就为我指定的值。如下标为10和下标为19的,都是我指定过的值。若某个值(如NoAlike),强制指定了下标(下标为10)。在它后面加上的值(PHP学院),不指定下标的话。他们的下标增长规律为最大值+1。例如:凤姐和芙蓉我都爱的下标为19.我在后面加上了:杨幂臭脚我最爱。它的下标自动增长为了11。不知不觉,你已经学会了索引数组的创建,神奇吧?真为你感到高兴!###向索引数组中增加元素学习完了索引数组的创建,接下来我们学习索引数组的增加、修改和删除。<?php $minren = array( '杨幂', '王珞丹', '刘亦菲', '黄圣依' ); //如何向这$minren这个数组中增加元素呢 //猜猜范冰冰的下标是多少? $minren[] = '范冰冰'; $minren[100] = '范爷'; //它的下标又为几呢? $minren[] = '李晨'; ?>总结:向索引数组中增加元素用: 数组变量名[]、数组变量名[键值]这两种方式来增加元素键值的增长规则与之前的规则一样。都是最大值加1的原则。###向索引数组中删除元素我们还拿刚刚的数组来举例:<?php $minren = array( '杨幂', '王珞丹', '刘亦菲', '黄圣依', '范冰冰' ); //假设我不喜欢:黄圣依,如何将黄圣依给删掉掉呢? //如果删除掉后范冰冰的下标为多少呢? //如果在后面再追加一个元素,会填掉:“黄圣依”留下来的空吗? unset($minren[3]); $minren[] = '金星'; echo '<pre>'; var_dump($minren); echo '</pre>'; ?>看看效果:使用unset删除变量的方式来删除数组里面的值。删除了中间的值,并不会让后面的下标向前自动移动。而是原来的值为多少就为多少删除掉其中的某个值,新加入的值不会替换掉原来的位置,依然遵循最大值加1的原则。修改值我们学习最简单的创造、增加和删除。我相信大家一定能够推理出如何修改值了。<?php $minren = array( '杨幂', '王珞丹', '刘亦菲', '黄圣依', '范冰冰' ); $minren[5] = '范爷'; $minren[2] = '亦菲,不要架给韩国人好吗?'; echo '<pre>'; var_dump($minren); echo '</pre>'; ?>执行上面的代码,输出看看结果。1.用变量名[键] = 新值。就把数组中的值定的值修改了。索引数组的其他声明方式通过上面的例子,我们学习到了数组的声明。我们来学一下数组的其他声明方式。####一、直接用之前未声明的变量,用变量名后面接中括号的方式声明数组。<?php //直接写一个变量后面加上中括号,声明变量 $qi[] = '可口可乐'; $qi[10] ='百事'; echo '<pre>'; var_dump($qi); echo '</pre>'; ?>####二、每次用array()写的太麻烦了,还可以不用写array哟,更简单。<?php $minren = [ '杨幂', '王珞丹', 100 => '刘亦菲', '黄圣依', '范冰冰' ]; echo '<pre>'; var_dump($minren); echo '</pre>'; ?>上面是另外两种PHP学院的写法。当然,你自己喜欢使用哪一种就使用哪一种来声明。###关联数组索引数组适当的变一下形就出现了关联数组。只要数组里面有一个为字符串的数组,就为关联数组。通过上例中,我们发现数组的下标只能够为字符串,当然不能够满足我的需求。假设我想声明一个下标为帅对应李文凯这个值。肯定不能满足我的需求。那我们来声明一下关联数组。跟索引数组的声明方式完成一样。不过不同的是,必须要指定字符串的下标和必须要使用键值对应符。<?php //声明一下关联数组 $rela = array( '帅' => '李文凯', '很帅' => '黄晓明', '灰常灰常帅' => '宁泽涛', '有男人味的大叔' => '吴秀波', ); //再来玩玩简洁声明 $drink = [ '美' => '凤姐', '很美' => '芙蓉姐姐', 'verymei' => '杨幂', '心中滴女神呀' => '华妃', 100 => '孙俪', '娘娘', ]; // 输出 $rela echo '<pre>'; var_dump($rela); echo '</pre>'; // 输出$drink echo '<pre>'; var_dump($drink); echo '</pre>'; ?>我们来实验一下看看最终的结果是什么样的:我们通过实验知道:声明关联数组是 键名 => 值在关联数组可以有索引数组的元素关联数组中的索引数组的元素后再声明了无下标的元素,依然是最大值+1原则。(观察上图中的值为孙俪、娘娘的两个元素)。###关联数组的增、删、改<?php $drink = [ '美' => '凤姐', '很美' => '芙蓉姐姐', 'verymei' => '杨幂', '心中滴女神呀' => '华妃', 100 => '孙俪', '娘娘', ]; //追加方式与索引数组是一样的 $drink['kx'] = '康熙'; //输出试试 echo '<pre>'; var_dump($drink); echo '</pre>'; //删除一个试试 unset($drink['verymei']); echo '<pre>'; var_dump($drink); echo '</pre>'; //将芙蓉姐姐 改成:心里美才是真的美 $drink['很美'] = '心里美才是真的美'; echo '<pre>'; var_dump($drink); echo '</pre>'; ?>你动手做做刚刚的实验,你会发现操作方式与索引的操作方式一样。只不过下标在读取的时候读取的下标PHP学院了。####其他的关联数组声明方式<?php $drink['nf'] = '农夫山泉'; $cocacola = '可口可乐'; //当然可以是变量哟 $drink['kl'] = $cocacola; $data = array( 'kl' => $cocacola, ); ?>通过上例我们发现,在关联数组当中也是可以不用array,直接在变量后面接括号。括号里面插入字符串下标,一样也声明成功。后面插入变量的例子,只不过把字符串变成了变量,当然没有问题。###数组当中插入数组数组可以插入整型、浮点、字符串,那么数组当中可不可以插入数组呢?当然可以。在学习数组的时候,我们定义了这样一组名词。一维数组 数组里面没有其他数组,只有单纯的一些变量或者值。二维数组 数组里面插入了单层的一个数组,或者多个数组三维数组 在数组(A)里面插入了一个数组(B),在B数组里面又插入了一层级的数组(C),这种我们就称为三维数组超过三维的,统统都叫多维数组。注:索引数组和关联数组当中都可以再插入其他数组,让数组变为多维的。我们来声明一个一维数组,只有一个维度。索引、关联均可,这个操作大家都很熟。<?php //一维的索引数组 $data = [1 , 2 , 3 , 4 , 10 => 250]; //一维的关联数组 $rela = [ 'beijing' => '北京', 'shanghai' => '上海', 'tj' => '天津', ]; ?> echo '<pre>'; var_dump($rela); echo '</pre>'; echo '<pre>'; var_dump($data); echo '</pre>';一维数组大家很熟悉,也不难,就是声明数组嘛。二维也不难,只是在数组里面再插一个或多个数组。二维学好了,多维就学好了。<?php $person = array( 'office' => '办公室', //注意:插入第一个数组哟 'family' => array( '爸爸', '妈妈', 'yeye' => '爷爷', 'nn' => '奶奶', ), //注意:又插入了一个平级的数组 'jiaotong' => array( '自行车', '摩托车', '汽车', '飞机', ), ); echo '<pre>'; var_dump($person); echo '</pre>'; ?>我们执行一下看看效果:我们发现变量person 是一个数组类型。有三个元素(size=3)。第一个元素为 office 对应的是一个字符串“办公室”,第二个元素为family 里面是一个数组,这个数组又有4个元素,值分别为:爸爸、妈妈、爷爷、奶奶。第三个元素为jiaotong,里面也为一个数组有4个元素,值分别为:自行车、摩托车、汽车、飞机。好了,二维数组好声明,只要把格式写对了,确定是在一个数组里面再插入一个数组就好。那如何访问:爷爷和爸爸这两个值呢?<?php $person = [ 'office' => '办公室', //注意:插入第一个数组哟 'family' => [ '爸爸', '妈妈', 'yeye' => '爷爷', 'nn' => '奶奶', ], //注意:又插入了一个平级的数组 'jiaotong' => [ '自行车', '摩托车', '汽车', '飞机', ], ]; //访问“爸爸”这什值 echo $person['family'][0]; echo '<br />-----华丽丽的分割线------<br />'; //访问“爷爷”这什值 echo $person['family']['yeye']; echo '<br />-----华丽丽的分割线------<br />'; //访问“汽车”这什值 echo $person['jiaotong'][2]; ?>我们看看结果如下:上例大家会发现,访问二维数组不过是按照之前的下标读取方式依次向下读取即可。先写上变量,中括号写上family这个下标,再写上要访问元素的下标。三维数组我们说了概念,那我们直接上手实验看看效果:<?php $area = array( 'china' => array( '上海', '湖北', '天津', '北京' => array( 'hd' => '海淀', '朝阳', '房山', 'cp' => '昌平', ), '广东' => array( '深圳', '广州', '佛山', 'dg' => '东莞', ), ), 'usa' => array( '华盛顿', '旧金山', '纽约' => array( '曼哈顿区', '皇后区', '布鲁克林区', ), ), ); echo '<pre>'; var_dump($area); echo '</pre>'; ?>我们执行一下看看效果:说明:在变量$area下有二个数组,一个为china,一个为usa。在china这个数组里面插入了上海、湖北、天津,又插入了北京和广东。而北京和广东又是一个数组。在北京和广东这两个数组里面分别有不同的元素。在这usa 这个数组里面插美国的华盛顿、旧金山和纽约。而纽约下面又是一个数组,说明了纽约下面的几个区。所以说,三维数组就是在数组里面再插入一个数组(A),在A数组里面插入一个数组。我们接下来看看,如何来读取里面的值。<?php $area = array( 'china' => array( '上海', '湖北', '天津', '北京' => array( 'hd' => '海淀', '朝阳', '房山', 'cp' => '昌平', ), '广东' => array( '深圳', '广州', '佛山', 'dg' => '东莞', ), ), 'usa' => array( '华盛顿', '旧金山', '纽约' => array( '曼哈顿区', '皇后区', '布鲁克林区', ), ), ); //读取华盛顿 echo $area['usa']['0']; //读取:布鲁克林 echo $area['usa']['纽约'][2]; //读取:昌平 echo $area['china']['北京']['cp']; //修改cp下标的值改为:西城区 $area['china']['北京']['cp'] = '西城区'; //输出看看原来昌平的值是否发生了变化 echo $area['china']['北京']['cp']; ?>通过上面我们发现数组学习起来不难。学习多维数组的难点:注意格式,将每个维度的换行、缩进弄整齐。就不容易出错了。【切记】数组元素间的分割符为逗号,在数组中插入数组的时候,不要在结尾处写成了分号(;)下图是错误的载图展示:
2019年08月25日
3,840 阅读
0 评论
0 点赞
2019-08-20
ThinkPHP6.0极速入门视频教程
ThinkPHP6.0主要新特性采用PHP7强类型(严格模式)支持更多的PSR规范原生多应用支持更强大和易用的查询全新的事件系统模型事件和数据库事件统一纳入事件系统模板引擎分离出核心内部功能中间件化SESSION机制改进对Swoole以及协程支持改进对IDE更加友好统一和精简大量用法ThinkPHP6.0在5.1的基础上对底层架构做了进一步的精简和统一,引入了一些新特性,并提升版本要求。ThinkPHP6.0运行环境要求PHP7.1+,不支持5.1的无缝升级
2019年08月20日
13,672 阅读
0 评论
40 点赞
2019-08-12
大数据量搜索解决方案-ThinkPHP5+Elasticsearch搜索引擎
Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎 Apache Lucene(TM) 基础上的搜索引擎。当然 Elasticsearch 并不仅仅是 Lucene 那么简单,它不仅包括了全文搜索功能,还可以进行以下工作:分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索。实时分析的分布式搜索引擎。可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据。你往 ES 里写的数据,实际上都写到磁盘文件里去了,查询的时候,操作系统会将磁盘文件里的数据自动缓存到 Filesystem Cache 里面去。整个过程,如下图所示:ES 的搜索引擎严重依赖于底层的 Filesystem Cache,你如果给 Filesystem Cache 更多的内存,尽量让内存可以容纳所有的 IDX Segment File 索引数据文件,那么你搜索的时候就基本都是走内存的,性能会非常高。提升性能的小技巧:仅在 ES 中就存少量的数据,无关检索的数据使用HBase等数据库存储,让Filesystem Cache可以容纳更多的数据量。数据预热,经常会有人访问的数据,每隔一段时间,就提前访问一下,让数据进入 Filesystem Cache 里面去。1、安装Elastaic官网下载地址:https://www.elastic.co/downloads/elasticsearch# 解压到非root目录,运行时使用非root账号且必须安装java环境yum install javawget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.3.tar.gztar zxvf elasticsearch-6.2.3.tar.gzuseradd elasticsearchpassword elasticsearchchown elasticsearch:elasticsearch elasticsearch-6.2.3cd elasticsearch-6.2.3nohup ./bin/elasticsearch & #设置成常驻进程php扩展库引入 composer.json{ "require": { "elasticsearch/elasticsearch": "~6.0" } }Client使用示例:prepare($sql); $query->execute(); $lists = $query->fetchAll(); print_r($lists); } catch (Exception $e) { echo $e->getMessage(); } $client = ClientBuilder::create()->build(); foreach ($lists as $row) { $params = [ 'body' => [ 'id' => $row['id'], 'title' => $row['title'], 'content' => $row['content'] ], 'id' => 'article_' . $row['id'], 'index' => 'articles_index', 'type' => 'articles_type' ]; $client->index($params); } } /* * 功能:获取索引 * return */ public function getIndex(){ $client = ClientBuilder::create()->build(); $params = [ 'index' => 'articles_index', 'type' => 'articles_type', 'id' => 'article_1' ]; $res = $client->get($params); print_r($res); } /* * 功能:从索引中删除文档 * return */ public function delIndex(){ $client = ClientBuilder::create()->build(); $params = [ 'index' => 'articles_index', 'type' => 'articles_type', 'id' => 'article_1' ]; $res = $client->delete($params); print_r($res); } /* * 功能:设置索引 * return */ public function createIndex(){ $client = ClientBuilder::create()->build(); $params['index'] = 'articles_index'; $params['body']['settings']['number_of_shards'] = 2; $params['body']['settings']['number_of_replicas'] = 0; $client->indices()->create($params); } /* * 功能:查询条件 * return */ public function search(){ $client = ClientBuilder::create()->build(); $params = [ 'index' => 'articles_index', 'type' => 'articles_type', ]; //多字段匹配 // $params['body']['query']['multi_match']['query'] = '我的宝马发动机多少'; // $params['body']['query']['multi_match']['fields'] = ["title","content"]; // $params['body']['query']['multi_match']['type'] ="most_fields"; // most_fields 多字段匹配度更高 best_fields 完全匹配占比更高 // // //单个字段匹配 // $params['body']['query']['match']['content'] = '我的宝马多少马力'; //完全匹配 // $params['body']['query']['match_phrase']['content'] = '我的宝马多少马力'; //联合搜索 must,should,must_not $params['body']['query']["bool"]['must']["match"]['content'] = "宝马"; $params['body']['query']["bool"]['must_not']["match"]['title'] = "宝马"; $res = $client->search($params); print_r($res); } }
2019年08月12日
14,225 阅读
0 评论
9,924 点赞
2019-08-07
MYSQL数据表设计及使用规范
实际工作中数据库设计需要注意的具体操作问题。表设计1.库名、表名、字段名必须使用小写字母,“_”分割,且名称长度不超过12个字符并且要做到见名知意。2.建议使用InnoDB存储引擎。3.存储精确浮点数必须使用DECIMAL替代FLOAT和DOUBLE。4.建议使用UNSIGNED存储非负数值。5.建议使用INT UNSIGNED存储IPV4。6.整形定义中不添加长度,比如使用INT,而不是INT(4)。7.使用短数据类型,比如取值范围为0-80时,使用TINYINT UNSIGNED。8.不建议使用ENUM类型,使用TINYINT来代替。9.尽可能不使用TEXT、BLOB类型。VARCHAR(N),N表示的是字符数不是字节数,比如VARCHAR(255),可以最大可存储255个汉字,需要根据实际的宽度来选择N。10.VARCHAR(N),N尽可能小,因为MySQL一个表中所有的VARCHAR字段最大长度是65535个字节,进行排序和创建临时表一类的内存操作时,会使用N的长度申请内存。11.表字符集选择UTF8。12.使用VARBINARY存储变长字符串。13.存储年使用YEAR类型,存储日期使用DATE类型,存储时间(精确到秒)建议使用TIMESTAMP类型,因为TIMESTAMP使用4字节,DATETIME使用8个字节。14.建议字段定义为NOT NULL。15.将过大字段拆分到其他表中。16.禁止在数据库中使用VARBINARY、BLOB存储图片、文件等。索引1.索引名称必须使用小写,非唯一索引必须按照“idx_字段名称_字段名称[_字段名]”进行命名,唯一索引必须按照“uniq_字段名称_字段名称[_字段名]”进行命名。2.索引中的字段数建议不超过5个。3.单张表的索引数量控制在5个以内。4.唯一键由3个以下字段组成,并且字段都是整形时,使用唯一键作为主键。5.没有唯一键或者唯一键不符合4中的条件时,使用自增(或者通过发号器获取)id作为主键。6.唯一键不和主键重复。7.索引字段的顺序需要考虑字段值去重之后的个数,个数多的放在前面。8.ORDER BY,GROUP BY,DISTINCT的字段需要添加在索引的后面。9.使用EXPLAIN判断SQL语句是否合理使用索引,尽量避免extra列出现:Using File Sort,UsingTemporary。10.UPDATE、DELETE语句需要根据WHERE条件添加索引。11.不建议使用%前缀模糊查询,例如LIKE “%weibo”。12.对长度过长的VARCHAR字段建立索引时,添加crc32或者MD5 Hash字段,对Hash字段建立索引。13.合理创建联合索引(避免冗余),(a,b,c)相当于 (a) 、(a,b) 、(a,b,c)。14.合理利用覆盖索引。15.SQL变更需要确认索引是否需要变更并通知DBA。SQL语句1.SQL语句中IN包含的值不应过多。2.UPDATE、DELETE语句不使用LIMIT。3.WHERE条件中必须使用合适的类型,避免MySQL进行隐式类型转化。4.SELECT语句只获取需要的字段。5.SELECT、INSERT语句必须显式的指明字段名称,不使用SELECT *,不使用INSERTINTO table。6.使用SELECT column_name1, column_name2 FROM table WHERE[condition]而不是SELECT column_name1 FROM table WHERE[condition]和SELECT column_name2 FROM table WHERE [condition]。7.WHERE条件中的非等值条件(IN、BETWEEN、<、8.避免在SQL语句进行数学运算或者函数运算,容易将业务逻辑和DB耦合在一起。9.INSERT语句使用batch提交(INSERT INTO tableVALUES,,……),values的个数不应过多。10.避免使用存储过程、触发器、函数等,容易将业务逻辑和DB耦合在一起,并且MySQL的存储过程、触发器、函数中存在一定的bug。11.避免使用JOIN。12.使用合理的SQL语句减少与数据库的交互次数。13.不使用ORDER BY RAND,使用其他方法替换。14.建议使用合理的分页方式以提高分页的效率。15.统计表中记录数时使用COUNT(*),而不是COUNT(primary_key)和COUNT(1)。16.禁止在从库上执行后台管理和统计类型功能的QUERY。散表1.每张表数据量建议控制在5000w以下。2.可以结合使用hash、range、lookup table进行散表。3.散表如果使用md5(或者类似的hash算法)进行散表,表名后缀使用16进制,比如user_ff。4.推荐使用CRC32求余(或者类似的算术算法)进行散表,表名后缀使用数字,数字必须从0开始并等宽,比如散100张表,后缀从00-99。5.使用时间散表,表名后缀必须使用特定格式,比如按日散表user_20110209、按月散表user_201102。
2019年08月07日
5,049 阅读
0 评论
75 点赞
1
...
24
25
26
...
36