Nginx 报错 Permission denied 和 Connection refused 排查解决

记录一下各种环境中 nginx 的错误和解决办法。

13: Permission denied

Nginx错误:2017/04/19 14:46:46 [crit] 4172#0: *671 open() “/data/vhosts/xunlei.com/test/” failed (13: Permission denied), client: 192.168.35.54, server: www.test.com, request: “GET / HTTP/1.1”, host: “www.test.com”

经查权限问题导致,网站目录是 root 用户组,而 nginx 是运行的 nobody 用户进程,修改网站目录为 nobody 用户组。

继续阅读“Nginx 报错 Permission denied 和 Connection refused 排查解决”

Laravel 关联查询返回错误的 id

在 Laravel Eloquent 中使用 join 关联查询,如果两张表有名称相同的字段,如 id,那么它的值会默认被后来的同名字段重写,返回不是期望的结果。例如以下关联查询:

继续阅读“Laravel 关联查询返回错误的 id”

Laravel 5.3 后台管理系统搭建

网上的很多基于 Laravel 的后台管理系统,要么缺少基本的功能,要么太臃肿,总是找不到自己喜欢的,于是自己做了一个。它的特点是尽可能简单又不缺少基本的后台功能,如用户认证,基于角色的权限系统(Entrust),菜单管理,媒体管理等,并且使用 AdminLte 后台界面,外观简洁功能强大。

继续阅读“Laravel 5.3 后台管理系统搭建”

Laravel 使用 env 读取环境变量为 null 的问题

不知道大家有没有遇到过,在 Laravel 中(除 app/config 目录下的配置文件中)使用 env 函数读取环境变量,有时有用,有时返回 null,究竟怎么回事?让我们一探究竟。

在 Laravel 项目中,如果执行了 php artisan config:cache 命令把配置文件缓存起来后,在 Tinker 中(Tinker 是 Laravel 自带的一个交互式命令行界面),使用 env 函数读取环境变量的值为 null,只有执行 php artisan config:clear 清除配置缓存后就可以读取了,这是为什么呢?

继续阅读“Laravel 使用 env 读取环境变量为 null 的问题”

PHP数组同值稳定排序

在 PHP 中对数组排序有很多函数,如 sort, asort, arsort, ksort, krsort, uasort 等等,但是有一个问题,如一个数组:

用 asort 函数对其进行排序,asort($test) 结果如下(转换为 json 格式):

可以看到排序虽然正确,值为 1 的元素排到后面去了,但是值为 0 的元素顺序跟以前不一样了,如何保证 PHP 数组同值元素排序后顺序保持不变呢?

继续阅读“PHP数组同值稳定排序”

PHP写文件加锁

用 PHP 的 file_put_contents 函数以追加的方式,循环 10 w 次写文件,耗时很多。因为 file_put_contents 函数每次都要打开文件,写入文件,然后关闭文件。

以下是测试:

继续阅读“PHP写文件加锁”

Laravel Session 保存机制和 terminate 中间件

在 Laravel 中可以使用 Session 的 get, put, pull, set, has, flash 等方法进行操作,如:Session::put([‘domain’=>’tanteng.me’, ‘host’=>’aliyun’]),就可以设置两个 session 值,看看 put 方法:

继续阅读“Laravel Session 保存机制和 terminate 中间件”

SSO单点登录系统接入

简单讲一下 SSO 单点登录系统的接入的原理,前提是系统本身有完善的用户认证功能,即基本的用户登录功能,那做起来就很方便了。

SSO 登录请求接口往往是接口加上一个回调地址,访问这个地址会跳转到回调地址并带上一个 ticket 参数,拿着这个 ticket 参数再请求接口可以获取到用户信息,如果存在用户则自动登录,不存在就新增用户并登录。

继续阅读“SSO单点登录系统接入”