本人简单实现的示例,使用任意二维码工具打开二维码对应链接http://www.54php.cn/demo1/scan原理介绍:第一步:访问登录页面,生成唯一key,例如MkhjDFL=,并且将此key 存入cache,对应值为-1 ,-1表示未登录,key有效期我设置的为5分钟,过期就会重新生成二维码图片第二步:生成二维码,本人使用库(https://github.com/2amigos/yii2-qrcode-helper),二维码对应的链接                http://www.54php.cn/demo1/qrcode?key=MkhjDFL=第三步:登录页面,JS循环请求某个接口,本人接口 http://www.54php.cn/demo1/dologin第四步:使用任意app,打开二维码对饮的链接。此处应该使用自己开发的App,并且App已经登录,然后使用自己的App扫描二维
本文主要讲解 手机浏览器 如何拍照 为什么会有这个需求 最近做一个项目要用到拍照然后上传照片,但是网页拍照一般都是用Flash做的,而我们主要是H5页面,如果在微信里面有权限就可以通过JSSDK调起摄像头拍照的。这里我们主要说下手机端浏览器如何调起摄像头 H5如何打开摄像头 不需要特别的支持,只需要一行代码就可以了 <input id="upload" type="file" accept="image/*;" capture="camera" > 如何预览图 原理是用js获取input file的图像流,然后赋给img标签的src属性,然后再设置这个img的css,就能得到你要的效果了,代码如下 ; var demo_h5_upload_ops = { init:function(){ t
  每次都很容易忘记Nginx的变量,下面列出来了一些常用$remote_addr //获取客户端ip $binary_remote_addr //客户端ip(二进制) $remote_port //客户端port,如:50472 $remote_user //已经经过Auth Basic Module验证的用户名 $host //请求主机头字段,否则为服务器名称,如:blog.sakmon.com $request //用户请求信息,如:GET ?a=1&b=2 HTTP/1.1 $request_filename //当前请求的文件的路径名,由root或alias和URI request组合而成,如:/2013/81.html $status //请求的响应状态码,如:200 $body_bytes_sent        //&nbs
  Nginx的return关键字属于HttpRewriteModule模块:语法:return http状态码 默认值:无 上下文:server,location,if 该指令将结束执行直接返回http状态码到客户端. 支持的http状态码:200, 204, 400, 402-406, 408, 410, 411, 413, 416 , 500-504,还有非标准的444状态码.使用方法:#不符合规则的返回403禁止访问location /download/ {     rewrite  ^(/download/.*)/media/(.*)\..*$  $1/mp3/$2.mp3  break;     return&
  Squid简介Squid可以做什么性能要素Squid安装Squid快速体验Squid配置Squid简介Squid is a caching proxy for the Web supporting HTTP, HTTPS, FTP, and more. It reduces bandwidth and improves response times by caching and reusing frequently-requested web pages. Squid has extensive access controls and makes a great server accelerator. It runs on most available operating systems, including Windows and is licensed under the GNU GPL翻译过来大致意思: Squid是一个支持HTTP,HTTPS,FTP等众多协议的缓存代理
  ###举例仓库仓库地址A:git@gitlab.54php.cn:guowei/demos.git仓库地址B:git@gitlab.54php.cn:infra/demos.git开发人员仓库C:git@gitlab.54php.cn:lurenjia/demos.git###多分支开发背景以demos为例子,主分支是仓库B,开发分支是仓库A,然后每个开发人员从仓库A clone,每周会在仓库A切一个新分支(例如43周叫做demos_201443)git clone A将远程的仓库A 克隆到本地仓库git remote add B_alias Bgit checkout -b demos_201443_local B_alias/demos_201443从仓库B的分支demos_201443创建一个本地分支,分支名称叫做demos_201443_localgit add .git commit -am "代码提交NB备注信息"git fetch --allgit re
   git 基本命令git add .git commit -am "请填写你NB的备注"git fetch --allgit fetch -p  //如果远程分支删除了,本地发现还是有备份,可以使用此命令git push origin master:mastergit remote add origin 仓库地址git remote rm origingit remote -vgit rebase origin/mastergit rebase --continuegit rebase --skipgit rebase --abort###举例仓库仓库地址A:git@gitlab.54php.cn:guowei/demos.git仓库地址B:git@gitlab.54php.cn:infra/demos.git开发人员仓库C:git@gitlab.54php.cn:lurenjia/demos.git###单分支开发git clone A将远程的仓
条形码 和 二维码 对比一维条形码只是在一个方向(一般是水平方向)表达信息,而在垂直方向则不表达任何信息,其一定的高度通常是为了便于阅读器的对准。 在水平和垂直方向的二维空间存储信息的条形码, 称为二维条形码(dimensional bar code)。相比一维条码,二维码记载更复杂的数据,比如图片、网络链接等。一维条形码的应用可以提高信息录入的速度,减少差错率,但是一维条形码也存在一些不足之处:● 数据容量较小: 30个字符左右● 只能包含字母和数字● 条形码尺寸相对较大(空间利用率较低)● 条形码遭到损坏后便不能阅读(部分破坏还是有可能可以读取的)与一维条形码相比二维条形码有着明显的优势,归纳起来主要有以下几个方面:● 数据容量更大● 超越了字母数字的限制● 条形码相对尺寸小● 具有抗损毁能力条形码 和 二维码 应用场景条形码的应用场景条形码可以标出物品的生产国、制造厂家、商品名称、生产日期、图书分类号、
前提介绍        玩过微信公众平台的同学都知道,公众平台群发消息给关注者是有限制的,订阅号每天一条,服务号每个月4条。        其实人家平台这么限制也是可以理解了,就怕天天乱发以后就和垃圾短信一样了,所以做这个监管我是点赞了(很多平台如果做这个功能估计就会随便让发了)        但是嘛 浪子我有时候偶尔做了一个什么事情想让大家知道,用服务号群发消息肯定不合算,因为每周基本会发一篇群发消息了,那么我就想如何突破这个限制咧?        办法总是比困难多的,通过仔细查阅官网文档发现有这样的一个接口是可以的:模板消息,只要我知道了关注者的openid,就可以给这
最近一直比较忙,很多东西都咩有认证整理,今晚将所有项目整理了做了一个演示系统,可以方便自己找也方便大家查看整体布局如下图:演示系统的地址:http://www.54php.cn/demo 下面是我目前认证的服务号二维码。会不定期发一些心灵鸡汤哦
  技术界没有银弹,只有你自己不断的提高自己,练好内功,方能在未来指点江山对技术要有追求,要学会偷懒,经常完善自己的编程思想 迷惑一最近有好几个人问我,说:工作已经1年左右,每天都在忙,感觉技能方面没有什么提升,感觉到对技术方向的迷茫。迷惑二有很多人本身有点眼高手低,只要一听到干货就打了鸡血,干什么都要看看是不是干货迷惑三我只想写个能运行的代码就行了,请不要和我讲那么多编程思想的问题迷惑四普通工程师和高级工程师的差别在哪里?我以我这几年的工作经历和大家来唠唠这迷惑之一二三四说首先这两个阶段我都经历过,我刚开始来到上海这个陌生的大城市当年的确就是凭着一股不服输勇气支撑着我(Too Young Too Simple)。今天当然也感谢当年那次的决定,不然也不会有今天的我第一份工作是为一个公司(BAT之一)做外包项目,当时真的蛮辛苦的,经常半夜还在加班,由于是第一份工作当然非常开心并且干劲十足。那时候我记得我只用了三个月就已经熟悉了公司的框架以及外包公司框架。那时只要有时间(经常三更半夜)
  预祝大家端午节安康~~今天想和大家聊聊的心灵鸡汤主题是:为撒要爱惜自己的羽毛。羽毛是什么?其实在2年前,我也不理解羽毛是什么。只是我的老大们经常在说。这里的羽毛是自己的名声。例如你在公司就是 公司同事对你的评价和认可度。在朋友圈就是朋友对你的亲密和信任度。在某个具体行业 就是 你在业界的知名度。总结就是:认可度、信任度、知名度如何建立?想要建立认可度、信任度、知名度 绝非一蹴而就的,需要时间积累。我个人有感是通过三年积累起来的。而在这三年里,我是通过了无数件事情和努力,让他们觉得我是靠谱的、交给我的事情不用担心。其实这也是个人成长的阶段,只有当你的思维真密度 和 老大们的意识在慢慢靠近的时候,说明你快要被认可了。如何做到?多做事,少废话。我记得我当时做了好多系统,例如ipublish发布系统、Job管理平台、CMDB运维系统、Ansible打造业务标准机、数据库性能分析系统等等。别人认识你都是通过具体的事情和你接触,然后慢慢对你有了理性的打分要走出去,要有分享精神。你懂得东西再多,如果你
提前先申明今天的话题不是为了责备或者责怪,如果你非要这么理解我也没有办法今天的话题就由下面这张图引出来,以下是一个找人帮忙解决问题的描述最近这段时间经常遇到类似这样的寻求帮助的。我说一下我看到这样的寻求帮助的对话之后内心的变化过程认真读每一句话从描述找遇到的问题内心狂躁心中一万个草泥马在奔腾一般任何人只要找我问问题,我都会尽量尽我所能去解决,如果真真解决不了,当然也只能抱歉,因为我个人能力不够,仍然需要学习那么为什么我内心会狂躁因为我看了半天没读懂你到底要问什么,你的困难在哪里,请问我如何帮你解决?并且我 个人工作时间也是非常忙的(分分钟也是5毛钱上下咧),能让我内心不狂躁嘛,我不回答你嘛,我怕你说我什么玩意不给我解决问题,我回答你嘛,接下来将是无休止的一问一答。我当然可以理解你的确是出问题,不然你也会闲着蛋疼没事跑到问问题,还顶着随时被我这样脾气差的人骂的风险为什么内心在奔腾其实这个问题跟我半毛钱都没做关系,我是为你的描述能力着急,我也是从零开始的,一步一步一个脚印学习编程的,我也遇到
  当使用php5自带的file_get_contents方法来获取远程文件的时候,有时候会出现file_get_contents(): failed to open stream: HTTP request failed!这个警告信息。google或者baidu一下,好多这样的问题,解决的方法都是修改PHP.ini,把allow_url_fopen给启用,改成 allow_url_fopen = On这样做可以解决某些人的问题,有人说在php.ini中,有这样两个选项:allow_url_fopen =on(表示可以通过url打开远程文件),user_agent="PHP"(表示通过哪种脚本访问网络,默认前面有个 " ; " 去掉即可。)重启服务器。但是有些还是会有这个警告信息,想用完美的解决还差一步,还得设置php.ini里面的user_agent,php默认的user_agent是PHP,我们把它改成Mozilla/4.0 (compatible
  原始时代我记得在当时用php的时候还没有composer,只有个pear,但是不好用呀,还不如直接在互联网上到处复制代码了,更快更不容易出错,当时也没有github这么好的社区工具了总结如下代码混乱规范不统一没有后续统一更新等管理Composer侠应运而生composer直到如今 已有5个年头了,也是直到今年才有了第一个稳定版本1.0,以前都是alpha版本了,其实composer的发展 也和 PHP-FIG (后续会专门解释的)的发展有很大关系composer是php新时代的依赖管理利器,就像python的pip,nodejs的npm,javascript的bower等。你可以在自己的项目申明所依赖的外部库,composer可以帮你安装这些composer解决如下问题你有一个项目需要依赖若干个库其中一个库依赖其他库找出你需要的版本进行安装安装Composer要求composer 要求 php 不低于 5.3.2+命令curl -sS https://getcompo
  问题最近遇到一个这样的问题,新建数据库表的时候 提示 错误如下Invalid default value for 'created_time' timestamp field语句如下`created_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '插入时间' 错误大致的意思 就是不能为 timestamp字段设置指定的默认值,也就是语句中的 0000-00-00 00:00:00,但是很奇怪在本地就可以,为什么线上服务器就不行了?本地数据库版本:5.5.46 上线数据库版本:5.7.17后来经过查询文档(文档地址)发现,其实从5.6.17这个版本就默认设置了不允许插入 0 日期了,术语是 NO_ZERO_IN_DA
  缘由经常会有人问xx框架怎么配置运行环境,这里我就给贴出吉祥三宝(Yii2,Laravel5,Thinkphp5 )的Nginx和Apache的配置,供大家参考NginxYii2server {         charset utf-8;         client_max_body_size 128M;         listen 80;         server_name yii.local.test;         root&n
  为什么需要备份本人博客使用的数据库服务 和 WebServer服务放在一起,2016年发生了一件事情:博客服务器被封了,不让登陆,然后供应商让我重装系统,然后悲剧了:所有数据没有了 。个人做博客写文章都是心血积累,一夜之间回到解放前。这件事情让我认识到数据备份非常重要。当然数据丢失还有其他可能,例如服务器由于某种设置不正确导致不能启动而重置电脑我是这么备份数据的数据库备份应用程序代码备份应用程序配置文件备份图片备份数据库备份关于数据库备份 我列为第一重要的,因为数据是最重要的,其他的都还可以花时间慢慢找回了。我个人数据库备份是通过脚本,然后部署crontab,最后上传 压缩文件到 七牛云存储起来应用程序代码备份关于应用代码我使用github来保存应用程序配置文件备份应用程序有一部分配置文件是根据不同环境 配置不一样的,并且这部分配置文件也不应该在github中有提交记录(以防被人恶意利用)。关于这部分配置文件我是单独 备份压缩然后上传到七牛云存储起来的图片备份我个人博客有不少图片,这些图
本文主要讲解 集成 第三方社交账号登录为什么会有这个需求?主要是因为目前互联网的网站数量太多,如果在各个站点都注册一个账号 用户非常不容易记住每个账号的用户名和密码,并且非常难保证每个账号的密码足够安全而目前流行的社交网站 基本上每个用户都有账号,如果通过这类社交网站登录 就能得到如下几点好处用户不用再注册其他账号用户只能维护社交账户足够安全就行了,使用此社交账号登录的就是安全的了常见的第三方社交账号有哪些?QQ微信新浪微博人人网百度Github如何加入第三方登录功能?国内这些比较大的社交公司 都有专门的开放平台,有经验的开发者可以看开放平台是可以实现了,本人主要实现三个社交登录新浪微博登录QQ登录Github登录申请新浪微博网页应用进入 http://open.weibo.com/  申请网页应用,微博应用可以先申请等上线之后再提交审核申请QQ登录应用进入 https://connect.qq.com/  ,登录之后 进入 应用管理,QQ应用需要
代理是互联网发展初期就有的一项技术,主要是通过在服务器上安装代理软件提供代理功能的。常见的代理主要有三类正向代理反向代理透明代理有点迷糊吧,什么正向、反向了。其实我刚开始听到这个概率也是挺迷糊的,下面我们一起来详细了解下正向代理在没有特别说明的情况下,代理说的就是正向代理。定义正向代理(forward proxy)是位于客户端【用户A】和原生服务器【服务器B】之间的代理服务器C图解从上图我们可以看出,所谓的正向代理 就是 代理服务器C 代替 用户A 访问 服务器B 。这就是正向代理存在的意义,那我为什么要代替 访问这种需求?作用用户A 本身 无法访问 服务器B:所谓的FQ(不敢写了,上次写了被**部分封站并警告了)Cache作用:Cache(缓存)技术和代理技术是密不可分(剧透下,反向代理也有缓存的作用),如果用户A 访问 服务器B 资源D之前,已经有用户通过代理服务器C访问了,那么代理服务器C可以将 资源D 保存一段时间。之后在保存有效期内 有人在访问 资源D ,代理服务器C
最近发现一个非常奇怪的问题,症状如下:crontab 定时任务 配置时间 是 10 5 * * * (每日凌晨5点10分执行)运行脚本时间却是 18:10左右Dec 24 05:10:01 htuidc CROND[7550]: (ubuntu) CMD (php yii backup/mysql >>jobs/backup.log) 2016-12-24 18:10:01 =======start====== 2016-12-24 18:10:05 backup mysql 2016-12-24 18:11:15 =======end======通过上面的描述和日志,可以看出 相差时间是13小时左右,我能肯定的就是脚本时间是对的,那么就可以推断出来crontab执行时间是不对的,最后查阅资料才知道原因:本
  删除git某个文件的所有历史记录git的目的就是版本控制,记录每一个版本的变动。然而有的时候我们往往希望从版本库中彻底删除某个文件,不再显示在历史记录中。例如不小心上传了一堆错误的文件,或者不小心上传了帐号、密码,那么这个时候怎么办呢?下面的命令可以完美解决你的问题$ git filter-branch -f --tree-filter 'rm -rf common/service/SyncBlogServince.php' HEAD $ git push origin --force批量删除git分支git branch -r |grep 'origin/pmt_201608' | awk -F '/' '{print&nb
  目的本文的目的主要是说明 命名空间的 use 关键词 和 new ClassName 这两个步骤,哪个步骤才会执行自动加载,这是逻辑有点混乱的表现,这种想法也是很正常的,让我们来解密吧命名空间(namespace)php从5.3加入了命名空间,我略懂一些java,所以命名空间还是比较好理解的,为什么需要命名空间啦?主要解决自己写的内部类/函数/常量  和 第三方的类/函数/常量冲突。引用命名空间下资源都要 使用关键字 use 标明 例如require_once("apanly/BrowserDetector/Browser.php"); use apanly\BrowserDetector\Browser; new Browser();自动加载php可以自定义自动加载函数,主要减少include 和 require 的使用。例如function myLoader($classname){    $c
引言代码发布系统是互联网公司必备的运维系统,作用主要用户发布业务代码 到 业务服务器为什么需要代码发布系统有的同学可能说,我们公司服务器就那么一台,做个发布系统太麻烦了? 不认同这说法发布系统有如下好处流程管理,加上权限管理,可以在系统记录 谁 做了 什么 操作减少人工误操作影响,登录服务器本身操作就是有误操作的可能的运维自动化  为运维工作减负加快发布速度  不用人工登录N台服务器发布方便快速回滚版本技术选型git:代码管理工具  git使用笔记rsync:同步代码到指定服务器Yii2:php mvc 框架Bootstrap3:前端框架jquery:js库代码发布系统流程框架图Web界面化操作,流程化管理 ,提交发布任务定时脚本 获取发布任务制定同步策略 发布代码界面化操作,流程化管理流程化管理在人员比较多的时候优势特别明显,人多手杂很容易出问题。所以在代码发布系统中加入流程化管理也是与时俱进上图是我画的一个比较完善的流程图(以前公司实现过这么复杂的流程)
  偶然发现最近在公司日志平台 总是可以看到很多关于php curl的错误信息Operation timed out after 0 milliseconds with 0 out of 0 bytes received Resolving timed out after 5514 milliseconds非常奇怪,以前都是好的,使用wget获取也非常慢,从下面的结果可以看出来 dns解析比较慢wget www.domain.com --2016-11-19 22:17:30--  http://www.domain.com/ Resolving www.domain.com... # 此处停滞约 5 秒 xxx.xxx.xxx.xx
  个人总结URL统一管理,调用统一方法,并且URL必须返回全路径,可以封装成service,并且url是全路径(包含域名),以后更改都非常方便了静态资源加版本好,调用统一方法用户密码必须加salt,最好记录在数据库中,每个用户都有不同的salt静态资源版本号,每次上线需要版本号不一样了对于数据量很大的查询,时刻记得要释放内存 详见phpexcel 内存溢出 优化手机API必须指定版本号,例如 /v1/user/info  ,/v2/user/info后端应用应该记录所有的GET,POST请求,以及GET,POST请求参数(商业产品非常重要)全站HTTPS或者CSP 防止运营商内容劫持
前言在开发中,高效能的程序 也包括 高效能的查询,所以优化SQL也是程序员必要技能之一。要优化就必须要有慢日志记录才可以知道哪些查询慢,然后反向去修改慢日志设置方式写入文件写入数据库实践操作方式一:写入文件编辑my.conf 中修改 log_slow_queries 的日志地址$ cd /etc/mysql $ cat my.cnf |grep slow  log_slow_queries = /data/logs/mysql/mysql-slow.log $ sudo /etc/init.d/mysql restart简单验证$ mysql -uroot -p mysql> show variables like '%slow_query_log%'; +----------------
最近我们公司做了一个摄像头项目,需要测试各种浏览器的情况,我就安装了一个Win xp的虚拟机,但是发现无法找到摄像头,经过查阅资料找到了解决办法前提环境Mac电脑Virtualbox 虚拟机虚拟机系统XP解决办法其实只要安装一个Virtualbox 扩展就好了,可以直接去官网下,安装好了就如下图可以直接选择摄像头了安装前安装后参考资料Mac OS X系统下利用VirtualBox安装和配置Windows XP虚拟机Oracle VM VirtualBox Extension Pack
NO.0前提你的下载我的App :超级逗表情 Andorid:http://fir.im/chaojidbq Ios:https://github.com/apanly/chaojidbq (源码,由于Ios需要证书)NO.1选择自己喜欢的表情,点击微信图标,发送给好友NO.2在微信中点击发送NO.3长按聊天窗口中的表情,点击添加到表情管理中NO.4现在在自己的收藏的表情中就可以刚才自己添加的表情
大纲创建自己的composer库提交到指定平台测试安装自己的库设置composer平台自动更新如何方便测试自己开发的库开始动手创建自己的composer库个人博客后台有一部分是关于统计的,通过UA获取浏览器,设备,操作系统。本人封装了一个库,放在github上,源码地址:https://github.com/apanly/browser-detector,任何一个文件夹只有有个composer.json文件,就可以作为一个库或者项目的,大家可以自行在github新建自己的项目browser-detector 的 composer.json内容如下{     "name": "apanly/browser-detector",     "description": "根据UA判断浏览器类型和版本,操作系统,设备型号&nbs
  • 微信公众号 微信小程序
  • 微信机器人
  • 群1:1046090432
  • 群2:585567981