本期应该要丢失掉很多聊天记录,因为方方我这阵子很忙,家里的电脑压根没开过qq,要是遗漏很多我只能表示没办法.
[网站分享]
(Tomoe)
https://github.com/davejamesmiller/laravel-breadcrumbs 面包屑
https://googlecreativelab.github.io/anypixel/
http://works.ioa.tw/browser_console_qrcode/ 在瀏覽器 Console 上畫 QR Code!
https://hahow.in/ 界面好看的线上课程
(安正超)
http://overtrue.me/bootstrap-theme-slim/
(欢欢)
https://github.com/pandao/planeui
(Jellybool)
https://cn.udacity.com/ 优达学城
(Abraham)
https://github.com/FriendsOfPHP/PHP-CS-Fixer 强制PHP格式
http://www.zcfy.cc/article/396
http://libs.useso.com/
(茄子)
http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=2652563725&idx=1&sn=2d8714f18f54b6891ea71dd07d6f0397&scene=23&srcid=06047QY6jzDIKrhNuDBA1u20#rd 玩转Stack Overflow
(Starriv)
http://videojj.com/
(jjplay)
http://mint-ui.github.io
(Lonquan)
http://www.ectouch.cn/ 一个所谓的开源电商
(Vikin)
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript 文档
http://www.maatwebsite.nl/laravel-excel/docs/export
[业务疑问]
1) (茄子)
问个编码规范的问题。 我的一个model有个属性叫做status,存放的是英文代码,我希望为他做一个getter,取出转换后的中文含义。 你们怎么取名? 我现在是用laravel的getter 写成 getStatusDescriptionAttribute,getXXXAtrribute 在laravel里可以这样用 $m->XXXX.
我主要是想取名是偷懒点,定个规则,比如 status 是代码, 后面加description的 status_description 统一都是中文释义
答: (littlehz) 先想中文,加个 自然语言、人类语言、显示名称、描述信息这样的都好理解,然后再想这个中文对应的英文,从里面选优雅点、没有歧义的
2) (Littlehz)
laravel的cron,怎么配置成在某台服务器定时执行某些操作,某些服务器执行另外的几个,而剩下的服务器没有定时任务?同一个项目,有好多机器,不同机器有不同的计划任务。之前是写crontab,每台机器配不一样的,既然用laravel了,就打算用laravel自己的计划任务调度嘛.我就是想问怎么识别机器的方式好?php代码肯定是一样的,只有hostname、ip不一样咯,生产环境的所有机器env也是一样的。
答: (安正超) 在代码里完成这个任务注册,识别机器.机器名,或者在机器的ENV文件里定义名称.你不是有一个注册计划任务的地方嘛.根据机器不同来决定注册哪些任务
3) (晓)
我用dingo+oauth2.0做验证,在header里传Authorization参数时,服务器获取不到参数( Request::header('Authorization') ),但本地是可以的,后来我试了一下自定义哪的参数是可以获取到的( Request::header('sAuthorization') 是可以的),有谁知道这是哪里被拦截了?
答: (Jellybool) https://github.com/tymondesigns/jwt-auth/wiki/Authentication
4) (徐先森)
我想的就是你和我说话我能看到,就是 前台把数据提交到一个公共的频道 然后 index.js 后台把他发给带用户id的频道 然后前台在接受带 用户id频道id 的数据 然后再发送ajax 然后laravel写入数据到数据库 这样就保存了消息记录 前台也实时显示了 数据.
答: (Littlehz)
你的逻辑没错。但是我问你一个问题,不知道你考虑了没有。你前台用js监听了一个 websocket连接,你后台的socket.js,有没有判断用户的 cookie/session?
如果一个伪造的用户过来,不在服务器上的 socket.js 里判断 session ,这个用户能不能使用这个 频道ID?
鉴别用户的身份,判断用户能不能用这个功能,这就叫鉴权。
这是简单点的,私聊。频道id就是用户id,频道id与session中的用户id相同,那就有权限。
往复杂点的鉴权,如果是群聊,频道id是群组id,只有群组的成员用户,才有权限使用这个websocket频道。那你的代码里是不是会很多,要不然在 socket.js 里实现一套ACL或者RBAC逻辑?
看你的sever.js,你的websocket应该是直连 node 服务器的,与php没有关系。
5) (茄子) 承接上面的问题
标准的鉴权方式是怎样? server.js 或者 lua 再调用一次php的鉴权api么?怎么在server.js 里判断?
答:
(Lonquan)
session_id + user id ,php 的 session, 直接扔到 redis 去
(Littlehz)
和下载文件类似,php 鉴权完再丢给 server.js 或者 nginx lua,看你用哪种实现的websocket。
websocket的location设置为 internal;这样鉴权逻辑就不用写两套,就是websocket不直接和 server.js 或者 nginx lua 通信,从php这边过一手. 利用 nginx 特有的 X-Accel-Redirect 这个 header
假定nginx 的配置
server {
location /1 {
internal;
}
location /2 {
fastcgi_pass xxxx
}
}
正常情况下只能访问 /2 这个 uri
php鉴权完了,输出
header('X-Accel-Redirect: /1');
exit();
那就能让这个http连接,内部跳转,挂起到 /1 这个 location.
网上搜索到的方法,大多数是说 X-Accel-Redirect 用于下载文件。其实并不是这个意思,是让 nginx 跳到另外一个 location。至于 location /1 里面是下载文件也好,还是 proxy 反向代理也好,还是连接 redis 也好,还是用 lua 脚本干别的都可以。
[小技巧]
1) (Littlehz) php-fpm进程用户,不要和web目录的php文件属组是同一个组的用户
2) (安正超) 一个开源软件使用的时候排错路线: 我的用法是否正确了? -> 我是否漏掉了哪个部分? -> 看看网友的反馈(issue找找)有没有同样的问题
3) 获取文件后缀名 getClientOriginalExtension
[见解]
1) 如何学习?
(茄子)
按自己的想法写一段代码,调试一下,再写一段,再调试,是在浪费自己时间。先把文档精读一遍,每个sample code都动手实现一遍看下效果。这是最基本的要求。
(安正超)
很多人都打着“项目着急没时间看文档,先写吧,一边写一边看,遇到问题再查.这种做法只会让你的项目进度更慢,绝对不会更快,这玩意儿与打仗很像啊.你得先了解对方军情才能去搞.边打边招人?边生产枪支?知已知彼才能走得顺,所以你的做法是不科学的.还会经常自己打击自己. “为什么?为什么?大家都用得好好的,我一用就这么多问题?是我笨么?还是我不适合做这行。。”
用一个东西之前,花时间去把文档过一遍(知识点放到脑袋里),起码一点,出一个问题的时候我知道这是哪个部分的内容,回头再看的时候速度就快很多.而不是扔一条消息到群里,吃完饭回来还没有人回答,那就 SB 了,老板在身后站着看你解决的时候怎么办.
就是各种补充周末没有吸收到的讯息
(Littlehz)
先思考再动手写.
我大概去年12月开始调研确定新业务用 laravel 框架,然后开始学,大概看了一个星期手册。开始看教主的视屏。当然有别的事情,每周留个laravel的时间应该不到2个小时。然后在这个群里,经常看你们问问题,看别人回答问题,反正看到的我都记得怎么处理。到了5月中旬,才开始写第一行laravel的应用代码。但我现在写 laravel 的应用,基本上不用查什么手册,也基本上不用问问题。
任何人都不会说问题简单而不答,任何人也不会说因为基础差而认为不适合做,只是发现你的学习方法、思考方式不对,在帮助你提高自己。谁都是从不会到会的。
2) (Tomoe) Javascript
應該說分原始類型和對象(引用)類型,Number String Bool Null Undefined 都是原始類型,其他都是對象 Function Array 等等,在底層處理時,原始類型是直接存入數據,而Object Function Array是存入指針
3) (Littlehz) 如何开发下载功能
如果不需要支持多服务器,直接在下载地址nginx rewrite到uploads目录,不要这么复杂
如果不需要鉴权用户身份,谁都可以下载,那直接nginx配个域名直接到uploads目录。如果需要鉴权,那就php鉴权完了,输出一个header头"内部跳转"到nginx的其他location就好。完全不需要php读文件内容再输出。
4) (Littlehz)
我一直是这么觉得,凡是大一点的系统,一定是要有独立的ID生成器。生成器可以传ID空间这样的参数,在同一个ID空间里自增。生成的ID应当是逐渐增大的,尽量连续,保证绝对不重复,不回退。
[名词解释]
Jwt的作用: jwt做的事儿与你的账户系统没有关系,它只是负责把你的敏感信息加密扔到客户端,客户端再拿着那个回来的时候它负责给你解开
geoip
snagit 截屏
licecap 专门录gif