您正在查看: 标签 php 下的文章

php-fpm max_children 优化调整

很久没有更新过博客了,最近将逐渐开更

今天记录下我如何调整服务器 php-fpm 的 max_children

 ps -ylef --sort:rss

此命令可以查看当前服务器所有的进程以及占用内存,留意 RSS 那列就是占用的内存数。

微信截图_20190519230845.png

当做平均一个进程 50MB

我的机器是8G,预留个1G,那大概数量就是 (8-1) * 1024 / 50 = 143

很久没有更新过博客了,最近将逐渐开更

今天记录下我如何调整服务器 php-fpm 的 max_children

 ps -ylef --sort:rss

此命令可以查看当前服务器所有的进程以及占用内存,留意 RSS 那列就是占用的内存数。

微信截图_20190519230845.png

当做平均一个进程 50MB

我的机器是8G,预留个1G,那大概数量就是 (8-1) * 1024 / 50 = 143

Laravel 图床与颜值检测结晶

前要

本人曾经发过这样两个帖子

检测颜值包,基于微软小冰 以及 用 Laravel 写了一个图床网站

项目

HanSon/faceHanSon/img

如今终于两个项目结合在一起了 体验传送门

效果图

穿衣风格效果图(会在新窗口弹出,记得在浏览器允许):

file

file

file

file

file

小结

因为微软小冰曾经做过一次升级,导致 SDK 暂时不可用,今天也花了点时间修复并且结合在图床中,图床代码大家看看就好,没有过多的优化。

图床有很多不足,只是一个 demo 级别的项目,例如图片大小都没有控制,仅仅娱乐,大家不要玩坏了。

前要

本人曾经发过这样两个帖子

检测颜值包,基于微软小冰 以及 用 Laravel 写了一个图床网站

项目

HanSon/faceHanSon/img

如今终于两个项目结合在一起了 体验传送门

效果图

穿衣风格效果图(会在新窗口弹出,记得在浏览器允许):

file

file

file

file

file

小结

因为微软小冰曾经做过一次升级,导致 SDK 暂时不可用,今天也花了点时间修复并且结合在图床中,图床代码大家看看就好,没有过多的优化。

图床有很多不足,只是一个 demo 级别的项目,例如图片大小都没有控制,仅仅娱乐,大家不要玩坏了。

微信机器人 Vbot 2.0

Github: https://github.com/HanSon/vbot
文档: http://create.hanc.cc/vbot (为了保护大家的眼睛,还故意去做了个看似高大上的官网)

Vbot 是什么?

Vbot 是一个基于 web 的 php 7 微信机器人。你还可以通过开启 Swoole 去搭建自己的微信网页端。

Vbot 能做什么?

具体的例子可参考以前的帖子: https://laravel-china.org/articles/4146/personal-micro-signal-group-control-robot

2.0 的亮点

  • 稳定执行(对 API 异常进行捕捉忽略)
  • 通过 Swoole 支持 Web API
  • 丰富的监听器,能够在程序各个阶段做好各自的自定义处理
  • 代码重构,结构更加优雅

Vbot Vs Other

大家选择 Vbot 最主要的原因是 Vbot 基于 PHP 开发,这让以前写微信机器人的 PHPer 不用再去接触 Python 的版本。对比其他版本的微信机器人来说,Vbot 无疑是最全面的微信机器人,从杂乱无章的 XML 中帮大家分好了多种消息类型。也加了多种监听器方便去实现自定义的功能。
file

感谢大家

在版本 1 发布截至至今已经 5 个月了,期间 Vbot 得到大家的大力支持, 1k 多 star 以及 1k 多的打赏金额,以及 优帆远扬 和 鸟哥的特殊支持。

file

说在最后

很高兴 Vbot 能够成为我的成名作,始于 Vbot,不终于 Vbot,世界那么大,我要继续撸。我还会继续去撸更加多的开源项目,希望大家多多支持。

历史贴:
PHP7 版本的微信机器人来了!
个人微信号群管理机器人

Github: https://github.com/HanSon/vbot
文档: http://create.hanc.cc/vbot (为了保护大家的眼睛,还故意去做了个看似高大上的官网)

Vbot 是什么?

Vbot 是一个基于 web 的 php 7 微信机器人。你还可以通过开启 Swoole 去搭建自己的微信网页端。

Vbot 能做什么?

具体的例子可参考以前的帖子: https://laravel-china.org/articles/4146/personal-micro-signal-group-control-robot

2.0 的亮点

  • 稳定执行(对 API 异常进行捕捉忽略)
  • 通过 Swoole 支持 Web API
  • 丰富的监听器,能够在程序各个阶段做好各自的自定义处理
  • 代码重构,结构更加优雅

Vbot Vs Other

大家选择 Vbot 最主要的原因是 Vbot 基于 PHP 开发,这让以前写微信机器人的 PHPer 不用再去接触 Python 的版本。对比其他版本的微信机器人来说,Vbot 无疑是最全面的微信机器人,从杂乱无章的 XML 中帮大家分好了多种消息类型。也加了多种监听器方便去实现自定义的功能。
file

感谢大家

在版本 1 发布截至至今已经 5 个月了,期间 Vbot 得到大家的大力支持, 1k 多 star 以及 1k 多的打赏金额,以及 优帆远扬 和 鸟哥的特殊支持。

file

说在最后

很高兴 Vbot 能够成为我的成名作,始于 Vbot,不终于 Vbot,世界那么大,我要继续撸。我还会继续去撸更加多的开源项目,希望大家多多支持。

历史贴:
PHP7 版本的微信机器人来了!
个人微信号群管理机器人

检测颜值包,基于微软小冰

最近的对比发现微软小冰的颜值检测比较科学,而且还真能识别到一些名人,感觉不错,便做成了一个包

项目地址:https://github.com/HanSon/face

抓包地址:http://kan.msxiaobing.com

例如其中一个效果

file

这个包提供了5个检测的方式

  • 颜值
  • 最受欢迎
  • 买单
  • 穿衣风格
  • 关系

由于原链接有一些是通过 JS 生成的一些标签,所以要显示到图片上还是有点难度,不排除以后实现或不实现。

BTW, 之后会把这个颜值检测加到我的图床上面去 http://img.hanc.cc

最近的对比发现微软小冰的颜值检测比较科学,而且还真能识别到一些名人,感觉不错,便做成了一个包

项目地址:https://github.com/HanSon/face

抓包地址:http://kan.msxiaobing.com

例如其中一个效果

file

这个包提供了5个检测的方式

  • 颜值
  • 最受欢迎
  • 买单
  • 穿衣风格
  • 关系

由于原链接有一些是通过 JS 生成的一些标签,所以要显示到图片上还是有点难度,不排除以后实现或不实现。

BTW, 之后会把这个颜值检测加到我的图床上面去 http://img.hanc.cc

用 Laravel 写了一个图床网站

file

项目地址: https://github.com/HanSon/img

体验地址: http://img.hanc.cc/

抽了一天时间写了这个基于 https://sm.ms/ 的图床小站,尽管说是用 laravel ,但是后端几乎没有什么工作量,大概也就20行的后端代码,几乎都是前端的工作为主。

前端主要了解了 drag & drop 以及 clipboard 这个库。

纯粹闲的蛋疼

file

file

项目地址: https://github.com/HanSon/img

体验地址: http://img.hanc.cc/

抽了一天时间写了这个基于 https://sm.ms/ 的图床小站,尽管说是用 laravel ,但是后端几乎没有什么工作量,大概也就20行的后端代码,几乎都是前端的工作为主。

前端主要了解了 drag & drop 以及 clipboard 这个库。

纯粹闲的蛋疼

file

给你的网站加上公众号消息模板异常提醒吧

Laravel 拥有非常好的异常处理机制,所有的异常都会经过 App\Exceptions\Handlerreport 方法进行处理( 查看详情 )。

然而我所见过大部分公司或者组织,都没有很好的查看日志习惯,以至于有可能有一堆错误日志或者影响用户体验的地方却没有发现。

你可以选择邮件通知你的网站异常

public function report(Exception $exception)
{
    // 你也可以选择短信通知,土豪随意
    Sms::send($phone, [$exception]);
    // 比较传统的通知方式
    Mail::to($request->user())->send(new ExceptionNotify($exception));
    return parent::report($exception);
}

Laravel 拥有非常好的异常处理机制,所有的异常都会经过 App\Exceptions\Handlerreport 方法进行处理( 查看详情 )。

然而我所见过大部分公司或者组织,都没有很好的查看日志习惯,以至于有可能有一堆错误日志或者影响用户体验的地方却没有发现。

你可以选择邮件通知你的网站异常

public function report(Exception $exception)
{
    // 你也可以选择短信通知,土豪随意
    Sms::send($phone, [$exception]);
    // 比较传统的通知方式
    Mail::to($request->user())->send(new ExceptionNotify($exception));
    return parent::report($exception);
}

- 阅读剩余部分 -

Speedy - 简洁灵活的 Laravel 管理后台

Speedy是基于 vue2 + bootstrap 的 laravel 管理后台,能够快速开发好一个权限后台,而且能够非常方便的生成一级或者二级菜单。

项目地址: https://github.com/HanSon/speedy

欢迎前来 star 以及提 issue !

file

安装

composer require hanson/speedy

Speedy是基于 vue2 + bootstrap 的 laravel 管理后台,能够快速开发好一个权限后台,而且能够非常方便的生成一级或者二级菜单。

项目地址: https://github.com/HanSon/speedy

欢迎前来 star 以及提 issue !

file

安装

composer require hanson/speedy

- 阅读剩余部分 -

laravel5.3的bug 无法在一个项目中使用多个同一数据库驱动

最近做项目掉进一个深坑,以至于一个小问题烦恼我两天以至于怀疑人生。

新项目需要连接两个mysql数据库,然而却出现无论如何也查询不了第二个数据库的情况。

经历了多次断点调试,google无止境搜索,询问印度阿三无果的情况下,也只能查看源码解决问题了。

最终发现在laravel的ConnectionFactory类的createConnection方法中有这么一段

protected function createConnection($driver, $connection, $database, $prefix = '', array $config = [])
{
    if ($this->container->bound($key = "db.connection.{$driver}")) {
        return $this->container->make($key, [$connection, $database, $prefix, $config]);
    }

    switch ($driver) {
        case 'mysql':
            return new MySqlConnection($connection, $database, $prefix, $config);
        case 'pgsql':
            return new PostgresConnection($connection, $database, $prefix, $config);
        case 'sqlite':
            return new SQLiteConnection($connection, $database, $prefix, $config);
        case 'sqlsrv':
            return new SqlServerConnection($connection, $database, $prefix, $config);
    }

    throw new InvalidArgumentException("Unsupported driver [$driver]");
}

$this->container->bound($key = "db.connection.{$driver}") 通过driver去跟容器做了绑定,也就是当你有第二个一样driver的数据库时,调用 $this->container->make()方法也会同样返回第一个绑定的 connection,这样无论如何也只能查询第一个了。

修改后

if ($this->container->bound($key = "db.connection.{$driver}.{$config['name']}")) {
    return $this->container->make($key, [$connection, $database, $prefix, $config]);
}

通过传入connection自定义的名称,能够避免重复

只可惜我提PR时对方表示5.3不作bug修复,很诧异。。。

PR在此
issue在此

最近做项目掉进一个深坑,以至于一个小问题烦恼我两天以至于怀疑人生。

新项目需要连接两个mysql数据库,然而却出现无论如何也查询不了第二个数据库的情况。

经历了多次断点调试,google无止境搜索,询问印度阿三无果的情况下,也只能查看源码解决问题了。

最终发现在laravel的ConnectionFactory类的createConnection方法中有这么一段

protected function createConnection($driver, $connection, $database, $prefix = '', array $config = [])
{
    if ($this->container->bound($key = "db.connection.{$driver}")) {
        return $this->container->make($key, [$connection, $database, $prefix, $config]);
    }

    switch ($driver) {
        case 'mysql':
            return new MySqlConnection($connection, $database, $prefix, $config);
        case 'pgsql':
            return new PostgresConnection($connection, $database, $prefix, $config);
        case 'sqlite':
            return new SQLiteConnection($connection, $database, $prefix, $config);
        case 'sqlsrv':
            return new SqlServerConnection($connection, $database, $prefix, $config);
    }

    throw new InvalidArgumentException("Unsupported driver [$driver]");
}

$this->container->bound($key = "db.connection.{$driver}") 通过driver去跟容器做了绑定,也就是当你有第二个一样driver的数据库时,调用 $this->container->make()方法也会同样返回第一个绑定的 connection,这样无论如何也只能查询第一个了。

修改后

if ($this->container->bound($key = "db.connection.{$driver}.{$config['name']}")) {
    return $this->container->make($key, [$connection, $database, $prefix, $config]);
}

通过传入connection自定义的名称,能够避免重复

只可惜我提PR时对方表示5.3不作bug修复,很诧异。。。

PR在此
issue在此

微信一键自动拜年脚本

项目链接 https://github.com/HanSon/vbot

git clone https://github.com/HanSon/vbot.git
cd vbot
composer install
php example/bainian.php

此脚本可以对有设置备注名称的联系人进行发送,适用于备注名为真实姓名的联系人,同时可以设置白名单或者黑名单或者其他情况进行发送。

use Hanson\Vbot\Foundation\Vbot;
use Hanson\Vbot\Message\Entity\Text;

$robot = new Vbot([
    'tmp' => __DIR__ . '/./../tmp/',
    'debug' => true
]);

$robot->server->setCustomerHandler(function () {
    $whiteList = ['some remark name...', 'some remark name...'];
    $blackList = ['some remark name...', 'some remark name...'];
    contact()->each(function($item, $username) use ($whiteList, $blackList){
        // 发送白名单
        if($item['RemarkName'] && in_array($item['RemarkName'], $whiteList)){
            Text::send($username, $item['RemarkName'] . ' 新年快乐');
        }
        // 黑名单不发送
//        if($item['RemarkName'] && !in_array($item['RemarkName'], $blackList)){
//            Text::send($username, $item['RemarkName'] . ' 新年快乐');
//        }
        // 全部人发送
//        if($item['RemarkName']){
//            Text::send($username, $item['RemarkName'] . ' 新年快乐');
//        }
    });
    exit;
});

$robot->server->run();

当然,这只是一种娱乐方式,别过于执着,不喜勿喷

项目链接 https://github.com/HanSon/vbot

git clone https://github.com/HanSon/vbot.git
cd vbot
composer install
php example/bainian.php

此脚本可以对有设置备注名称的联系人进行发送,适用于备注名为真实姓名的联系人,同时可以设置白名单或者黑名单或者其他情况进行发送。

use Hanson\Vbot\Foundation\Vbot;
use Hanson\Vbot\Message\Entity\Text;

$robot = new Vbot([
    'tmp' => __DIR__ . '/./../tmp/',
    'debug' => true
]);

$robot->server->setCustomerHandler(function () {
    $whiteList = ['some remark name...', 'some remark name...'];
    $blackList = ['some remark name...', 'some remark name...'];
    contact()->each(function($item, $username) use ($whiteList, $blackList){
        // 发送白名单
        if($item['RemarkName'] && in_array($item['RemarkName'], $whiteList)){
            Text::send($username, $item['RemarkName'] . ' 新年快乐');
        }
        // 黑名单不发送
//        if($item['RemarkName'] && !in_array($item['RemarkName'], $blackList)){
//            Text::send($username, $item['RemarkName'] . ' 新年快乐');
//        }
        // 全部人发送
//        if($item['RemarkName']){
//            Text::send($username, $item['RemarkName'] . ' 新年快乐');
//        }
    });
    exit;
});

$robot->server->run();

当然,这只是一种娱乐方式,别过于执着,不喜勿喷

Vbot微信机器人,全自定义的灵活机器人

Vbot是基于微信web API实现的机器人,通过实现匿名函数能够实现多种自定义的效果

例如:

  • 消息转发
  • 红包提醒(有点鸡肋)
  • 留言统计
  • 自定义回复
  • 防撤回
  • 特殊关键词触发事件

等等,这里就不一一列举,可以参考 详细例子

安装

composer require hanson/vbot

使用

require_once __DIR__ . './../vendor/autoload.php';

use Hanson\Vbot\Foundation\Vbot;

function reply($reply){
    return http()->post('http://www.tuling123.com/openapi/api', [
        'key' => 'your tuling api key',
        'info' => $reply
    ], true)['text'];
}

$robot->server->setMessageHandler(function ($message) {
    // 文字信息
    if ($message instanceof Text) {
        // 联系人自动回复
        if ($message->fromType === 'Contact') {

            return reply($message->content);
            // 群组@我回复
        } elseif ($message->fromType === 'Group' && $message->isAt) {
            
            return reply($message->content);
        }
    }
});

$robot->server->run();

项目地址:https://github.com/hanson/vbot

文档地址:https://github.com/HanSon/vbot/wiki

欢迎大家提交issue和PR让vbot更加完善

也可以加我刚新建的QQ群进行交流:492548647

Vbot是基于微信web API实现的机器人,通过实现匿名函数能够实现多种自定义的效果

例如:

  • 消息转发
  • 红包提醒(有点鸡肋)
  • 留言统计
  • 自定义回复
  • 防撤回
  • 特殊关键词触发事件

等等,这里就不一一列举,可以参考 详细例子

安装

composer require hanson/vbot

使用

require_once __DIR__ . './../vendor/autoload.php';

use Hanson\Vbot\Foundation\Vbot;

function reply($reply){
    return http()->post('http://www.tuling123.com/openapi/api', [
        'key' => 'your tuling api key',
        'info' => $reply
    ], true)['text'];
}

$robot->server->setMessageHandler(function ($message) {
    // 文字信息
    if ($message instanceof Text) {
        // 联系人自动回复
        if ($message->fromType === 'Contact') {

            return reply($message->content);
            // 群组@我回复
        } elseif ($message->fromType === 'Group' && $message->isAt) {
            
            return reply($message->content);
        }
    }
});

$robot->server->run();

项目地址:https://github.com/hanson/vbot

文档地址:https://github.com/HanSon/vbot/wiki

欢迎大家提交issue和PR让vbot更加完善

也可以加我刚新建的QQ群进行交流:492548647