若项目之前已通过其他源安装,则需要更新 composer.lock 文件,执行命令:
composer update --lock
若项目之前已通过其他源安装,则需要更新 composer.lock 文件,执行命令:
composer update --lock
今天, 有一个刷礼物的接口被恶意刷了, 原因是, 在送礼的时候, 后台更新背包数量用 num- {$num}, 然后,就变成了正数了, 导致加了这么多的数量,
看来下次有这种更新数量的功能, 都得加一层判断正数.
有一个bug,CI一个控制器中调用两个 model, 如果使用第一个model中使用了 $this -> db -> where()
在之后的 model 中 使用 CI 链式 select查询, 会把上面的 where条件带过来, 导致报错
解决办法,就是使用 $this->db->reset_query() 重置查询构造器
就是python redis 的 zincrby 的最后两个参数问题,
因为之前做一个功能的时候, 在测试服一开始的好的, 然后到线上了之后,是不好的,
测试包含python2,3 : 正式只有python 3
所以, 改了一波代码,就是换了一个顺序,到正式,正式就好了
但是,测试服又不行了, 奇了个怪
然后各种搜搜,发现是python3改动了, 后面两个参数的顺序
def zincrby(self, name, value, amount=1):
def zincrby(self, name, amount, value):
简直是天坑啊
具体改动commit:
https://github.com/andymccurdy/redis-py/commit/a750c7946d41862a38955c35b6928f098911c406
这次自己新开发的项目, 打算用 Java Web ssm 框架来开发。软件还是Idea,毕竟好用。
前期的项目配置还是根据,Idea SpringMVC+Spring+MyBatis+Maven整合框架搭建秒杀系统 这篇文章来配置,然后Idea 配置Tomcat 部署
直接进入正题,打开右上角的 Project Structre 或者使用 Ctrl+Alt+Shift+S 快捷键打开,先设置 Modules,先点绿色的加号,然后往下拉选择 web,然后配置,Web Resource Directories 设置到src/main/webapp 然后点ok,目录下如下图。
在然后,去设置 Artifacts,点绿色的加号,选择 Web Application Exploded 选择 From Modules,回弹出一个框,就是你刚刚在 Modules 配置的那个,选择即可 点ok即可。
然后,配置Tomcat服务器,在右上角有一个 绿色的开始按钮,旁边,点击 Edit Configuration,回弹出一个框 。
在点绿色加号 -> Tomcat Server -> Local ,然后就是配置 Tomcat 服务器了
第一个 Name:就是你这里显示的服务器名,随便写无所谓。
Server 标签配置:
Application serven:这里就要配置了,点击右边的Configure,弹出Application Servers,点击Tomcat Home,也就是你的Tomcat文件,所放置的位置,选择即可,剩下的都会自动加载,然后点ok,Server 剩余标签的内容,都选择默认即可,然后点Apply,下一步切换到 Deployment 配置。
Deployment 标签配置:
主要是配置 Deploy at the server startup , 点击右边的加号,会有一个 Artifact 和 External Source 两个标签,这里我们选择 Artifact 也是我们刚刚在 Project Stuctre 配置的 Artifact 包,直接选择即可,点ok。
至此,配置就结束了,可以点,右上角的 绿色按钮 或者 小虫子按钮就可以开始服务器了~
如有疑问,欢迎在本博客下面留言,或者放邮件 至(i@ishwy.me), 邮件内说明来源。
2017-11-16 10:20:49更新
今早,看到代码的时候,突然想起这种的 array_merge 的函数不是没用,而是我自己使用错误了,array_merge 不是引用赋值,而我之前是给他一个空数组,在给$data,所以,肯定是不成功的。。
其实代码很简单,所以,改成了每次循环想结果数组里合并之。代码如下。效果图也就不贴了,是第二张图的效果,也是理想效果。
这两天做项目的时候遇到一个问题,数据是从数据库取的,所以,返回的数组的key名,就是数据库的字段名。
而数据呢,又是在数组的key名下面的数据,所以结构就类似下面这样:
最后想要的结果是:
起初,是想要 array_merge 来实现完成的,因为这个函数就是来做数组合并的发现。最后发现,如果想使用这个函数,就必须把数组里面的每个元素分开,所以,也就没打算使用这个方法了。
后面,使用 foreach + array_merge 来实现的时候发现 key 如果相关的话,前面的会被覆盖掉。
然后,想到了一个取巧的办法,就是先确定好一个数组【0】,然后在后面再接一个数组。然后,把数组放进这个数组里, 这样的话key,也不会存在重复了,而是会自动递增。
最后的效果就是,有一个key【0】的数组,有点不美观(优化的话只要用array_values 把数据取出来,我这里因为不需要这么优化,就不做了。)
$data = []; foreach($goodsMessage as $item) { $data = array_merge($data,$item['goodsMessage']); }
附上结果图:
上完成代码:
$goodsMessage = [ 0 => [ 'goodsMessage' => [ 0 => [ 'id' => 0, 'age' => 0 ], 1 => [ 'id' => 4, 'age' => 4 ], ] ], 1 => [ 'goodsMessage' => [ 0 => [ 'id' => 1, 'age' => 1 ], 1 => [ 'id' => 2, 'age' => 2 ], 2 => [ 'id' => 3, 'age' => 3 ], ] ], ]; foreach($goodsMessage as $item) { foreach ($item['goodsMessage'] as $v){ $data[0][] = $v; } }
因为工作繁忙的问题, 好久没写博客了 🙂
最近项目做完了, 也是闲的没事了, 因为公司另一个部门是使用Java开发的, 一直吹逼说Java比php安全, 效率高, 稳定之类的. 在下, 作为phper 怎么能忍,但是也不能无凭无据的怼。所以,自我学习一下Java看看到底哪里牛逼了。
学习路线 (楼主也只是上学出钱) ->
1. Java的一些语法基础,(因为,有php基础所以基本就简单过了一遍)。
2. Servlet的一些简单教程。(http请求、表单、cookie)之类的简单教程。
3. Spring框架的一些理论知识点,主要是IoC和DI的相关知识点、事物管理。
4. SpringMVC框架,主要是看执行流程以及一些注解是使用。
5. Mybatis框架, 主要是看了一些全局配置的配置和整合spring,在我的理解Mybatis就相当一个数据库链接驱动。
相关知识点看完之后,就打算找一个项目试试手,在网上正好看到一个秒杀系统,正是用ssm的框架进行开发的,所以,在这里正好也记录一下,开发旅程。
环境和开发工具:windows10 64位 idea 2017.3 。
框架版本:是基于Maven 最新环境的,如下, jdk1.8 Tomcat8.0 Spring 3.0 Spring MVC 4.3.7 Mybatis 3.4.2。
先用idea 配置搭建Maven:
File -> new > Project -> 选择Maven,第二步要勾上之后,才能选择下列的maven-archatype-webapp选择,然后在next
GroupId : 就是改项目的名。
ArtifactId:就是后面要打包的文件名。
Version: 默认不变。然后后面两部可以一直next,下去,最后在finish
然后, 根目录下就会有一个pom.xml文件, 这个文件就是配置Maven 包依赖的文件。为了不让文章显得杂余,我这里使用外链。
>改项目pom.xml 配置文件,感觉也是基本的ssm的框架配置文件
https://gitee.com/slgz/seckill/blob/master/pom.xml
Idea 默认好像是不会自动import的,所以这里手动一下pom.xml 文件选择Maven -> Reimport ,时间长短,看自己的网速。等完成之后就会显示如下信息
当然, ide给我们创建的项目,是缺少文件的。这里,我们在自己手动创建几个文件
src/main/Java : 这里就是java源代码的文件夹,注意:这里要定义为Resources类型文件。
src/main/resources:这里就是相关的配置文件,注意:这里要定义为Resources类型文件。
在一样的新建test的文件夹,
src/main/Java
src/main/resources
接下来就是一些相关的配置顺序流程了,这里就不一一描述了,就说一下流程吧。
先是配置Mybatis相关文件:
在src/main/java/org/seckill类下,以下简称(seckill类)。
以下,统一规定:命名规范就是,首字母大写 , 包中的geter seter toString方法,都可以通过idea的快捷键 Alt+INS 快捷键完成。
新建entity 实体包, 此包就是定义数据库里对应的字段以及类型,并实现seter geter 方法 toSting方法。
然后,新建Dao包, 此包就是实现entiry的实现类,定义 sql 方法名,注意,这里只是定义方法名,方法参数,类型。并不具体实现,具体实现后面再说。
在src/main/resources下新建spring文件夹,在spring文件夹里新建 spring-dao.xml文件,这里就是为了整合Mybatis过程。
主要是配置过程:
1. 配置数据库相关的参数properties属性,这里就在 resources 目录下直接新增 jdbc.properties 文件,此文件是数据库的链接地址, 以及账号 密码等配置
2. 配置数据库连接池,主要还是通过c3p0完成链接。
3. 配置SqlSessionFactory对象,这里是关键主要完成的是。链接第二步的连接池,配置mybatis-config.xml 文件, 自动扫描entity包 , 自动扫描sql配置文件包,
这里就要在resources下新建mapper文件夹, mapper问价主要完成是具体sql语句的编写,因为mybatis就是通过原生sql来访问的。
4. 最后异步就是配置,动态mapper接口包,动态实现mapper接口。
到这里基本的mybatis整合配置文件,为止。
接下来配置Service包,在 resouces/spring 下新建spring-service.xml 文件夹, 主要就是配置spring的事务管理器。
最后一部就是配置SpringMVC和spring的整合, 其实SpringMVC和spring是天然一体的, 天生就是在一起的。
易于项目好维护, resources/spring 下新建 spring-web.xml 文件。
主要配置:
1. 开启SpringMVC注解模式。
2. 静态资源默认Servlet配置,如js / css/ image
3. 配置jsp显示ViewResolver。
4. 一样的,自动扫描web相关的bean。
至此,ssm框架整合的基本算是完成了。
以此的顺序是: Mybatis -> Spring -> SpriongMVC
最后附上已经做完的项目链接:
https://gitee.com/slgz/seckill.git
起初的原因是一个朋友,问我如下代码能不能把id相同的能不能合并成一个数组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | $a= [ 0=>[ 'id' =>1, 'name'=>'技术部', 'job'=>'后台开发' ], 1=>[ 'id' =>1, 'name'=>'技术部', 'job'=>'前端开发' ], 2=>[ 'id' =>2, 'name'=>'设计部', 'job'=>'UI设计师' ], ]; |
一开始我打算先取出 所有id 放在一个数组中,因为不想用循环所以打算用 array_column() 函数,取出id再去重在当做key使用,结果发现我家里安装的是php5.4的不支持。这个函数5.5才支持。。
于是,我去查了一下数组的手册就又想到个办法,发现实际上,我最终的想法还是哪 id 来做文章,所以我想何不直接循环用取id当key ?
所以代码如下,其实非常的简单。。比我一开始想的判断还简单很多,
1 2 3 4 | $res = []; foreach ($a as $k => $v) { $res[$v['id']][] = $v; } |
最终的效果
“>
———————————————————————–分割线——————————————————————————————————————–
新需求。说分类,意思就是下面这个样子,其实也很简单。。只要在上面原有的更改一下就行了,
// 部门一
// –职位一
// –职位二
// –职位三
// 部门二
// –职位一
// –职位二
1 2 3 4 | foreach ($a as $key => $val) { $result[$val['id']]['name'] = $val['name']; $result[$val['id']]['job'][] = $val['job']; } |
最终的效果
“>
swoole是一个PHP的异步、并行、高性能网络通信引擎,使用纯C语言编写,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,异步Redis,数据库连接池,AsyncTask,消息队列,毫秒定时器,异步文件读写,异步DNS查询。 Swoole内置了Http/WebSocket服务器端/客户端、Http2.0服务器端。
官网一共提供了两个方案,自主编译和pecl安装。但是感觉对我们这些小菜鸟并不是很友好,安装的时候出现的问题很多。所以我在这写个教程记录一下,也方便造福大众。:>
第一种PECL:
如果使用pecl的话就要使用phpize来生成php编译配置。所以如果没有安装过的同学,就需要先 yum install php-devel ,因为 php-devel 里面包括phpize,要查看phpize是否安装成功的方法也很简单。which phpize
接下来还要继续安装pcre-devel zlib-devel和 yum install pcre-devel zlib-devel
提示complete 则代表安装成功。
接下来将可以愉快的 pecl install swoole了。如果出来如下图显示,则就代表安装完成。接下来就去php.ini 添加即可
header(“Content-type:text/html;charset=utf8”);
/* 图片上传 */
/* 引入公共函数库 */
include “../../function_class.php”;
$id = $_GET[‘id’];
?>
以上的提交的html代码
——————————————————————————————————————————————————————————————————–
0){
die(_alert(‘更新内容成功,不包括图片’));
}else{
die(_alert(‘内容更新失败’));
}
}
///* 执行文件移动程序 如果有图片就执行更新图片*/
if($_FILES[‘lujing’][‘error’] == 0) {
/* 执行更新语句 */
$gx = mysql_query(“UPDATE `picduct` SET `lujing`=’$new_lujing’ WHERE `id`=’$id'”);
move_uploaded_file($lujing, $new_lujing);
echo _alert(‘移动文件成功!’);
}else{
echo _alert(‘移动文件失败,请检查文件是否正确!’);
}