首页
统计
留言
Search
1
PHP中使用反射
995 阅读
2
phpstorm配置SFTP
940 阅读
3
Go语言——结构体
792 阅读
4
PhpStorm 使用 AI 代码生成工具 Codeium
779 阅读
5
关于PHP的垃圾回收机制
763 阅读
后端
PHP
Go
数据库
其他
前端
其他技术
生活杂谈
登录
Search
标签搜索
Laravel
Mysql
RPC
Redis
Liunx
PHP
CSS
ES
算法
开发工具
断点续传
反射
phpstorm
工具
防盗链
CURL
设计模式
面试
Nginx
搜索引擎
quhe.net
首页
栏目
后端
PHP
Go
数据库
其他
前端
其他技术
生活杂谈
页面
统计
留言
搜索到
24
篇与
PHP
的结果
2021-06-18
PHP实现无限级分类生成树结构
方法封装/** * @param $current_key string 当前编号 * @param $parent_key string 父级编号 * @param $array array 数据 * @return array */ public function getTreeList($current_key,$parent_key,$array){ //第一步 构造数据 $items = array(); foreach($array as $value){ $items[$value[$current_key]] = $value; } //第二部 遍历数据 生成树状结构 $tree = array(); foreach($items as $key => $value){ if(isset($items[$value[$parent_key]])){ $items[$value[$parent_key]]['children'][] = &$items[$key]; }else{ $tree[] = &$items[$key]; } } return $tree; }使用例子$arrayData=array( array('name'=>'小明','wbs_no'=>1,'p_wbs_no'=>0), array('name'=>'小王','wbs_no'=>2,'p_wbs_no'=>1), array('name'=>'小李','wbs_no'=>3,'p_wbs_no'=>2), ); $result=$this->getTreeList('wbs_no','p_wbs_no',$arrayData); 输出
2021年06月18日
50 阅读
0 评论
2 点赞
2021-04-09
PHP下载文件的三种方式
1、直接添加文件链接<button> <a href = "http://localhost/demo.zip">下载文件</a> </button>点击该按钮下载:2、传递参数查找并跳转到下载链接传递参数:<button> <a href = "http://localhost?f='down'">下载文件</a> </button>查找文件并挑战到下载链接:<?php $down = $_GET['f']; //获取文件参数 $filename = $down.'.zip'; //获取文件名称 $dir ="demo/"; //相对于网站根目录的下载目录路径 $down_host = $_SERVER['HTTP_HOST'].'/'; //当前域名 //判断如果文件存在,则跳转到下载路径 if(file_exists(__DIR__.'/'.$dir.$filename)){ header('location:http://'.$down_host.$dir.$filename); }else{ header('HTTP/1.1 404 Not Found'); }文件存在文件不存在3、head() 和 fread()函数把文件直接输出到浏览器<?php $file_name = "down"; $file_name = "down.zip"; //下载文件名 $file_dir = "./down/"; //下载文件存放目录 //检查文件是否存在 if (! file_exists ( $file_dir . $file_name )) { header('HTTP/1.1 404 NOT FOUND'); } else { //以只读和二进制模式打开文件 $file = fopen ( $file_dir . $file_name, "rb" ); //告诉浏览器这是一个文件流格式的文件 Header ( "Content-type: application/octet-stream" ); //请求范围的度量单位 Header ( "Accept-Ranges: bytes" ); //Content-Length是指定包含于请求或响应中数据的字节长度 Header ( "Accept-Length: " . filesize ( $file_dir . $file_name ) ); //用来告诉浏览器,文件是可以当做附件被下载,下载后的文件名称为$file_name该变量的值。 Header ( "Content-Disposition: attachment; filename=" . $file_name ); //读取文件内容并直接输出到浏览器 echo fread ( $file, filesize ( $file_dir . $file_name ) ); //可以把缓冲区内最后剩余的数据输出到磁盘文件中,并释放文件指针和有关的缓冲区。 fclose ( $file ); exit(); }总结:第一个和第二个操作比较简单,但是容易暴露文件的真实地址,安全性不高,第三种能够较好的把文件的真实地址隐藏起来
2021年04月09日
25 阅读
0 评论
0 点赞
2021-02-02
PHP实现拖拽排序功能接口
思路先分析一个场景,假如有一个页面有十条数据,所谓的拖拽就是在这十条数据来来回回的拖,但是每次拖动都会影响到其他数据例如把最后一条拖到最前面,那么后面九条就自动往后移,反之也是,嗯~~~ 先想象一下,排序号是固定的,就好像有十把椅子,每个椅子都是固定在那里的,移动的是上面的人,这样就不会影响到其他页面的数据了而且每个人换的也是之前其他人的桌椅号码,这样也不用去想到底要加多少才能排在哪里。代码实现//$ids 这十条数据的id集合,逗号隔开的字符串 //$oldIndex 原始位置,从0开始算 //$newIndex 要拖动到的位置 function dragSort($ids,$oldIndex,$newIndex) { //保证查找出来的数据跟前台提交的顺序一致,这里要用到mysql的 order by field() //id 主键 sort 排序值 $sql = "select id,sort from 表名字 where id in ($ids) order by field(id, " . $ids . ") "; $list = "这里省略,就是数据库返回的二维数组数据记录"; //id集合 $idArr = []; //排序集合 $sortArr = []; foreach ($list as $item) { $idArr[] = $item['id']; $sortArr[] = $item['sort']; } /* 或者 $idArr=array_column($list, 'id'); $sortArr=array_column($list, 'sort'); */ //记录要拖动记录的id $oldValue = $idArr[$oldIndex]; //删除这个要拖动的id unset($idArr[$oldIndex]); //插入新的位置,并自动移位 array_splice($idArr, $newIndex, 0, $oldValue); //重新设置排序 $set = []; for ($i = 0; $i < count($idArr); $i++) { $set[$i]['id'] = $idArr[$i]; $set[$i]['sort'] = $sortArr[$i]; } //保存到数据库省略① } {callout color="#f0ad4e"}@数据库批量更新四种方式{/callout}
2021年02月02日
116 阅读
0 评论
3 点赞
2020-07-09
laravel5.5以下的版本安装包的时候为什么需要添加包的服务提供者,而5.5以上就不需要
在 Laravel 5.5 之前的版本,安装新的包需要手动添加包的服务提供者(Service Provider)到应用程序的配置文件中,以便让 Laravel 能够识别并加载这些包的功能。这是因为 Laravel 5.5 之前的版本中,服务提供者必须手动注册才能生效。 而从 Laravel 5.5 开始,引入了自动包发现(Package Auto-Discovery)功能,这个功能可以自动扫描安装的包,并注册这些包的服务提供者,从而不再需要手动添加服务提供者到配置文件中。 这个自动包发现功能的实现方式是通过扫描所有安装的 Composer 包中的特定文件 composer.json 中的 extra 字段中的 laravel 节点来实现的。在这个 laravel 节点中可以指定包的服务提供者和别名,Laravel 会自动将其注册到应用程序中。如图 因此,如果你使用的是 Laravel 5.5 及以上的版本,可以直接安装包而不需要手动添加服务提供者到配置文件中。但如果你使用的是 Laravel 5.5 之前的版本,则需要手动添加服务提供者。
2020年07月09日
168 阅读
0 评论
4 点赞
2020-06-05
PHP如何使用 ElasticSearch 做搜索
ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。在做搜索的时候想到了 ElasticSearch ,而且其也支持 PHP,所以就做了一个简单的例子做测试,感觉还不错,做下记录。环境php 8.0elasticsearch 8.2elasticsearch-php 8.2安装 elasticsearch下载源文件,解压,重新建一个用户,将目录的所属组修改为此用户,因为 elasticsearch 无法用 root 用户启动。wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.2.3.tar.gz tar zxvf elasticsearch-8.2.3.tar.gz useradd elasticsearch password elasticsearch chown elasticsearch:elasticsearch elasticsearch-8.2.3 cd elasticsearch-8.2.3 ./bin/elasticsearch // 启动安装 PHP 扩展我这里使用的是 composer 安装 elasticsearch-php。在 composer.json 文件中加入 "elasticsearch/elasticsearch": "~8.2.3",执行 composer update。{ "require": { // ... "elasticsearch/elasticsearch": "~8.2.3" // ... } }测试例子创建表和测试数据我这里准备了一张文章表来进行测试,首先是建表,其次写入测试数据,准备工作完毕之后,就开始编辑测试用例。{ #创建articles表 create table articles( id int not null primary key auto_increment, title varchar(200) not null comment '标题', content text comment '内容' ); #插入文章内容 insert into articles(title, content) values ('Laravel 测试1', 'Laravel 测试文章内容1'),('Laravel 测试2', 'Laravel 测试文章内容2'),('Laravel 测试3', 'Laravel 测试文章内容3'); 从 Mysql 读取数据try { $db = new PDO('mysql:host=127.0.0.1;dbname=test', 'root',''); $sql = 'select * from articles'; $query = $db->prepare($sql); $query->execute(); $lists = $query->fetchAll(); print_r($lists); } catch (Exception $e) { echo $e->getMessage(); }实例化require './vendor/autoload.php'; use Elasticsearch\ClientBuilder; $client = ClientBuilder::create()->build();名词解释:索引相当于 MySQL 中的表,文档相当于 MySQL 中的行记录elasticsearch 的动态性质,在添加第一个文档的时候自动创建了索引和一些默认设置。将文档加入索引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); }从索引中获取文档$params = [ 'index' => 'articles_index', 'type' => 'articles_type', 'id' => 'articles_1' ]; $res = $client->get($params); print_r($res);从索引中删除文档$params = [ 'index' => 'articles_index', 'type' => 'articles_type', 'id' => 'articles_1' ]; $res = $client->delete($params); print_r($res);删除索引$params = [ 'index' => 'articles_index' ]; $res = $client->indices()->delete($params); print_r($res);创建索引$params['index'] = 'articles_index'; $params['body']['settings']['number_of_shards'] = 2; $params['body']['settings']['number_of_replicas'] = 0; $client->indices()->create($params);搜索$params = [ 'index' => 'articles_index', 'type' => 'articles_type', ]; $params['body']['query']['match']['content'] = 'Laravel'; $res = $client->search($params); print_r($res);
2020年06月05日
182 阅读
0 评论
6 点赞
1
2
3
4
5