[WP插件] WPComment2Bark

背景 🏞

最近大半年都在搞实习和雅思,其实没做多少实用的工具出来,有点手痒痒了。因此接着博客重建的契机,动手搞了一个评论信息推送的小插件。

思考 🤔

技术指标:

  1. 高触达率 🚀
  2. 开箱即用 📦
  3. 高度安全 🔐

解决方案:

1. 邮件推送

原来的推送方式就是通过Email的形式来推送,有可能会出现消息推送不及时或者被拒信,无法满足高触达率的技术要求,故摒弃这种推送方式。

2. Server酱

Server酱年初也因为各种外部原因,降级成了企业微信推送,其实不是特别方便,用户还得去装一个企业微信,然后配置Bot,再去配置APIKEY。对于我们做开发的用户来说,已经是挺繁琐的步骤了,对于普通用户而言简直就是噩梦。无法满足开箱即用的要求,故放弃。

3. Bark

最后我将目光投到了Bark身上,Bark是V站的一个dalao搞的一套利用Apple消息推送机制做的Web信息推送框架。Bark也同时满足我们三项技术要求:

1. 高触达率

借助Apple推送机制,我们甚至可以在息屏的情况下,都能正常收到推送消息。无视任何垃圾回收机制,绝对在线。

2. 开箱即用

用户只要下载Bark客户端,博客安装插件,配置插件,即可投入实际使用。

3. 高度安全

Bark提供免费服务器的同时,也提供了源代码供用户进行审查。如果是对于隐私比较敏感的用户,还能选择通过Docker部署自己的私有推送服务器。

综合上述优点,我选择了使用Bark作为消息推送的核心功能支持。

作用 🏄🏼‍♀️

每当有人评论你的文章时,可以推送到你的 Bark App。

配置指南 🧭

1. 从AppStore下载Bark客户端

2. 上传 & 安装插件

3. 配置推送链接

首先从客户端上复制出推送API和API密钥

第二步,切换到博客后台,依次点击【设置->讨论】,滚动到底部,找到【Bark推送设置】

至此就完成了全部配置工作,只要有新的评论被发出,就会调用API想您推送消息。

WordPress 插件市场

https://wordpress.org/plugins/wpcomment2bark/

插件仓库 ⛺️

https://github.com/7gugu/WPComment2Bark

点击【Code -> Download ZIP】下载压缩包后,按照配置指南,一步一步的安装即可。

[BAS弹幕动画] Bad Apple

前序

其实这个BAS动画我一直很想写的了,只是一直咕咕咕,还有身边的琐事,一直没抽出空来写一下弹幕动画。这次终于抽出空来写了一个(AV88558525),欢迎来看看。这篇博文主要是会分享一下这个BAS弹幕动画是怎么做出来的,以及一些BAS的个人看法。

处理流程

  1. 使用ffmpeg把BadApple.mp4分割成图片
  2. 使用PHP*将图片转换成字符画
  3. 将字符画拼接成BAS字符串
  4. 计算每一组BAS的起始时间
  5. 在视频上发布
  6. 微调**

*:语言没啥所谓,重点一定是能处理图片,还有就是顺手,python虽然有很多库,语法很优雅,但我是一个phper,所以还是倾向用php整活(PHP天下第一)

**:音乐视频可以找鼓点来定位,如果你放的视频的节奏型不是特别强无对话的话,你就随缘调吧,反正最后还是会有偏差的。

代码仓库

代码解析

视频转换

视频转换,我使用的是这个dalao的代码。地址:https://blog.csdn.net/somehow1002/article/details/77600186

切割视频

切割视频的码率一定要设置成30帧一秒,不然会卡到爆炸。

txt转BAS

其实BAS转换非常简单,你可以看到我的代码也就是跑了两个循环就拼接好了。每个BAS弹幕的开口是def c{属性},然后是set c{content=””},再然后的就都是then set c{xxxxx}。

这个c是可以换的仅仅是一个函数名而已,你换成啥都行。这里主要是要控制多少个bas组成一组。这次的经验是:

  • 0.033s为一帧
  • 三个为一秒
  • 201/402为一组

目前测试单次弹幕为408KB,就是已知的B站容许POST的数据量。再大的话服务器那边会提示服务器错误(就是不允许你发这么大个的弹幕了),但如果本地测试的话,播放器单次怼1206个16×32的字符画也是OK的。

时间计算

这一步主要是要标定弹幕的开始时间,按照402个为一组的话,一段的时间是13266ms,那么第一段的时间就是0ms开始,第二段就是0+13266+1开始,偏移1ms让弹幕不要叠在一起。

还有就是要对鼓点,不然整个视频的节奏就会很有问题。除非你的视频没有啥节奏,不然就很有必要对多几次,这里有一些想吐槽的就放到最后再写。

成果

吐槽

语法缺失

其实最最大的缺点就是这个BAS语法没有加入一些for,if之类的语法定义,这个script甚至连Boolean都没有定义,可以玩的东西实在有限。最多只能写一些动画出来玩玩。

标准缺失

这个标准指的是弹幕数据的一些标准,虽然平常发弹幕实际能触顶的机会十分的少,但是对于BAS制作者来说,这些标准的指定可以大大减少我们的开发时间。之所以这么耗费功夫其中的一个原因就是总是要测试标准的上限在哪,客服一问三不知,也没法实质的解决,希望B站以后可以写出来。(已反馈到B站)

批量弹幕发送困难

对于技术宅来说可以用自动化测试套件/窗口捕获/模拟POST来实现批量提交弹幕,但这些基础脚本的编写也是要花费时间的,导致整个制作周期会拉长实在是非常讨厌,而这也就是我想说的另外一个耗费功夫的原因,实在是太麻烦了。就算是目前有多Tab,来发送还是繁复的不得了。其实解决方案应该是创建一个API中心,开发者/UP主可以针对单一视频通过API来提交弹幕。而且可以限制API单次使用时间,确保站点安全。

总结

上述的几个建议如果都能改进或者加入,相信BAS还有更多的空间发展,当初的代码弹幕的辉煌也会回来的。最近的互动视频的动作其实就不错,如果可以把BAS也加入其中,想必会给互动视频加入更多有意思的元素,B站黄油,B站FPS指日可待。

感谢你看到这里,希望你喜欢OWO

探究php的MD5函数输出的原始二进制数据是啥?

前序

最近我的朋友(Ge15emium)在研究CTF,发给我一个关于使用MD5函数实现sql注入的博文。文章通过构造特殊的字符串通过md5函数输出后,可以构造成注入SQL,拿到Flag。
博文链接:http://mslc.ctf.su/wp/leet-more-2010-oh-those-admins-writeup/?tdsourcetag=s_pcqq_aiomsg
通过文章我们知道作者通过使用md5()对ffifdyop进行加密处理后可以构造出‘or’6<trash>这样一个字符串,来规避掉php的代码检查,进而获得Flag。

本文主要探究的是md5函数怎么把32位16进制的报文摘要输出成为目标字符串,不涉及CTF的解密流程以及MD5的加密流程


1.怎么对字符串进行的加密?

php的md5()具有输出原始二进制数据的特性。

通过文章我们得知,博主通过使用php的md5(“ffifdyop”,true)输出其加密后的原始二进制数据得到目标字符串。从这个流程中我们进而引出下一个问题原始二进制数据是啥?怎么来的?


2.原始二进制数据是啥?怎么来的?

原始二进制数据不是指100111这些二进制数据,而是原始字符串转换成ascii码后组成的字符串。
接下来就使用前序中所说的字符串来演示如何转换。

  1. 使用md5(“ffifdyop”)进行加密
    通过加密后将会得到之后的32位16进制字符串:276f722736c95d99e921722cf9ed621c
  2. 将32位16进制字符串按照2个字符为一组切割成为16组16进制的字符串
    切割成27,6f,72,27,36,c9,5d,99,e9,21,72,2c,f9,ed,62,1c
  3. 将每一组16进制的数值转换成2进制
    100111,1101111,1110010,100111,110110,11001001,1011101,10011001,11101001,100001,1110010,101100,11111001,11101101,1100010,11100
  4. 将每一组2进制数值转换称为10进制数值
    39,111,114,39,54,201,93,153,233,33,114,44,249,237,98,28
  5. 最后对照如下的ASCII码表即可翻译的出最终的原始二进制字符串

    以前四组为例39=>’,111=>o,114=>r,39=>’,最终的组成’or’这一个字符串
    (其实理论上我们可以直接把16进制转换成10进制就好了,但是此处是为了展示我的思考过程才会有2进制这一步,希望写细一点可以帮助大家的理解和认识)

结尾

CTF的注入玩法真的是神仙玩法,平常使用md5函数都还没思考过这个问题,借由此机会也提升了我的php基础知识,使其更加扎实可靠,作为2020第一篇原创文,希望日后也能多写一些这样的文章吧。

[笔记][翻译] 在Windows上编译PHP拓展

  • 来自于 Benoit Blanchon 20 January 2015
  • 译者 7gugu
  • 原文章链接 https://blog.benoitblanchon.fr/build-php-extension-on-windows/

我最近尝试编写了一个PHP拓展,虽然说文档上有很详细的介绍如何在Linux上进行编译操作,但是关于在Windows平台上编译的信息少之又少。

所以这篇文章就是给大家介绍一下,如何使用Visual Studio构建一个PHP拓展。

环境要求

这篇指南是假设在你已经编写了链接所示的一个输出”Hello World”的PHP拓展。 here并且你已经在Linux上成功编译了。

在Windows上构建你的PHP拓展前,你需要完成以下的操作。

  1. Visual Studio
    (这里是一个坑点,请确认你的VS的编译器的版本跟PHP编译时的版本是一样的。比如说官网的7.1.33是用的VC14【VS2015】编译的,那么你的拓展也要是用VC14编译的,否则是不能安装你编译好的拓展的。如果你用的是VS2017+,但你有用的是旧版本的PHP环境写的拓展,那么你就要手动编译PHP才能使用你编写的拓展了)
  2. PHP源代码 (未编译的PHP代码)

在之后的文章中,我将会按一下列表假设:

  1. PHP源码是位于C:\php-src
  2. 你编写的”Hello World”拓展位于C:\MyPhpExtensions\hello

在Windows上编译拓展跟Linux上有点相似

你应该已经很熟悉这个过程,但这里还是列出了一个步骤清单给你:
(以下虽然是在Linux上构建编译时运行的代码,但是在Windows上其实是一样的,只是有一些指令的名字和运行方法有点不同而已)

  1. 安装 php-devel
  2. 运行 phpizeconfig.m4中生成configure 脚本 .
  3. 运行 ./configure --enable-hello 生成 Makefile
  4. 运行 make 开始编译拓展

(以下是在Windows上编译时要改变的东西,按步骤执行就可以顺利生成拓展了)

使用 config.w32 替代 config.m4

在Windows平台上, 使用config.w32代替config.m4,但是格式上还是有点不同。

config.m4 迁移到 config.w32 是非常直接的, 你仅仅需要的是把Automake的代码转换成JavaScript语法的代码。

下面是一个简单的例子:

ARG_ENABLE("hello", "Hello World support", "no");
if (PHP_HELLO != "no") {
    EXTENSION("hello", "php_hello.c", true);
}

不要忘记把EXTENSION的第三参数设置成true , 这么设定就会选择生成动态编译库(DLL)而不是静态编译到PHP代码中。

如果你想知道更多关于*.32的语法信息,你可以看看别的文件夹的*.w32文件。

使用 buildconf.bat 代替 phpize

在Windows平台上,你将会使用 buildconf.bat 代替 phpize

打开VS的”适用于 VS 20XX 的 x86/64 本机工具命令提示”命令行工具并且运行以下代码

cd C:\php-src
buildconf.bat --add-modules-dir=C:\MyPhpExtensions

buildconf.bat 将会自动扫描 C:\MyPhpExtensions 文件夹下所有的 config.w32 文件。

随后将会生成一个 configure.bat的脚本文件.

使用 configure.bat 代替 ./configure

在Linux上,configure就仅仅是用来编译拓展用的,但是在Windows平台上configure.bat是用来编译PHP代码为exe文件的。

你需要在运行 configure.bat 时添加以下命令行选项以生成最少数量的内容,从而确保不必解决对外部库的依赖性

cd C:\php-src
configure.bat --disable-all --enable-cli --enable-hello

--disable-all 就是禁止生成其他内容,省略了输入 --disable-xxx--without-xxx的必要 , --enable-cli 是启用php命令行界面 (ie php.exe) , --enable-hello 是启用编译你的拓展”Hello”

系统默认会按照TS(线程安全)模式进行编译,如果你需要NTS(线程非安全)模式进行编译,你仅仅需要加上这一条 --disable-zts ,就可以按照NTS模式进行编译。

使用 NMake 代替 Make

configure.bat 将会生成一个Windows版本的 Makefile 用作在Windows上 Make.(编译代码)

开始编译代码,仅仅需要运行以下代码即可:

nmake

这不仅仅会编译你自己的拓展,同时也会将 php.exe 编译出来。 这对于开发者来说,是一个很方便的做法,因为你需要一个相同编译环境生成出来的 php.exe,那样子才能正确安装你的PHP拓展。

实际上,为了加载到php中,您的扩展必须与php构建相匹配,条件是:

  1. 系统位数 (32 or 64 位)
  2. 线程是否安全 (TS 模式 或者 NTS 模式)
  3. 编译器的版本 (VS9, VS11 之类的.)

如果你确实不需要编译出 php.exe, 那么你仅仅需要按以下代码运行即可:

nmake php_hello.dll

消除警告(Warnings)

在编译PHP拓展的过程中,编译器常常会报一堆警告:

如果你想禁用这些警告,你可以在 c:\php-src\win32\build\config.w32中,加入以下的代码段:

ADD_FLAG('CFLAGS', ' /wd4005 /wd4267 /wd4244 ');
ADD_FLAG('CFLAGS_BD_ZEND', ' /wd4018 /wd4101 /wd4090 /wd4273 ');
ADD_FLAG('CFLAGS_BD_MAIN', ' /wd4018 /wd4090 ');
ADD_FLAG('CFLAGS_BD_MAIN_STREAMS', ' /wd4013 ');
DEFINE('RC', '$(RC) /nologo /d _USING_V110_SDK71_');

并且,在 C:\php-src\ext\standard\config.w32中加入这行代码:

ADD_FLAG('CFLAGS_BD_EXT_STANDARD', ' /wd4047 /wd4018 ');

最后在 C:\php-src\sapi\cli\config.w32中加入下列这一行代码:

ADD_FLAG('CFLAGS_BD_SAPI_CLI', ' /wd4018 ');

笔记: 一些能够帮助你开发PHP拓展的博文[英文生肉]

[PHP]使用PHP拓展获取CPU占用率

导语

这两天了解了一下怎么用C++写PHP的拓展,今天整活了一下,才终于发现为啥那么少人给PHP写拓展了。PHP拓展真的是太难写了,入门门槛极其的高,贼复杂(指的是在Windows平台开发,贼复杂),做了这个就不搞了,溜了溜了。

如何使用

  1. 把php_getcm.dll复制到ext文件夹中
  2. 编辑php.ini,启用php_getcm.dll
  3. 在php代码中使用getcm_func(),即可获取CPU的占用率(int)

使用要求

之所以说难开发,还有一个方面,就是在windows平台上开发的时候,如果用了vc15编译了旧的版本,你就贼难测试,就不得不切换到新的PHP版本,然后继续踩坑,超级难受。
1. php:7.1.33
2. nts
3. vc15(这个没有官方版本,要你自己下载php来编译,贼麻烦,喜欢的可以折腾一下,没空看的就算了)
最近有空,会把一篇开发指南翻译一下,留给之后的dalao用吧。

下载链接

DLL库下载:php_getcm

[笔记]如何配置Apache+Laravel环境

前言:

由于开发需要,现在的后端统一使用Laravel5.5进行开发,遂整理了一些配置笔记,方便以后配置环境以及减少配置时间.

安装方法:

Laravel配置

1.切换到网站根目录

cd d:\WWW

2.使用composer安装laravel项目

[此处有个注意点,这个代码最后的foldername是指你的项目文件夹名称,如果不改的话,回车之后,composer就会在执行命令时所处的目录下新建”foldername”文件夹作为项目文件夹]

composer create-project  --prefer-dist  laravel/laravel=5.5.*  foldername

Apache配置

1.配置Apache的Httpd.conf文件,对目标端口进行监听

对80和8080端口进行监听

2.配置Httpd.conf文件,启用httpd-vhosts.conf

启用配置文件

3.配置httpd-vhosts.conf文件,对Laravel程序入口(public/)文件夹进行绑定.

对laravel入口文件夹进行绑定[若需要使用80端口做别的开发,务必调回根目录]

结尾:

初次使用Laravel是会有一些迷糊,但只要用熟了,就会使用的很快的了.

Ajax留言板

简介:

一个简易的Ajax-PHP-Vue留言板,这个作品练手用的,很早之前就已经实现出来了,最近两天学习使用Vue框架,所以对前端进行了重写,并且想发出来共同交流学习一下。

特性:

  1. 前后端分离
  2. Vue+axios

安装教程

  1. 导入SQL/comment.sql
  2. 修改ajax.php中的数据库连接信息
  3. 开始使用

仓库链接:

https://gitee.com/7gugu/ajax-comment-vue

软件截图:

联系方式:

Email:gz7gugu@qq.com

[笔记]Steam acceptOffer 403

引言:

这两天帮别人开发了一个自动接收报价的脚本.重新使用SteamBot API的时候,发现API的AcceptOffer函数始终无效,故花了一些时间,琢磨出了解决的办法.(也希望给后来者留下一些帮助)

问题:

原始的代码下,直接向steamcommunity.com/tradeoffer/0000/accept发送请求,Steam就会返回403 forbidden的回应.

解决:

cookie中加入sessionid即可,php中可使用这样子,重新组合一下cookie再发起链接,即可修复该bug.

GU直播-简易直播站

性能指标:

  • 支持统计观众个数
  • 支持在线聊天
  • 支持多个房间推流[RTMP流]
  • 支持流鉴权
  • 支持直播流播放

一些想说的:

之所以会写这个东西,仅仅是为了满足我的小愿望[自己做一个直播站试试],这个直播站从功能以及框架上都非常的羸弱,不足以应对复杂场景,仅仅是做着玩,所以有兴趣的朋友可以下下来玩玩,但不建议应用至生产环境之中。这次的下载站代码会放到Github,并且会在这个文章中附上Nginx(带RTMP模块)的下载链接,以及我的Nginx的配置。

安装:

1.下载Nginx-RTMP windows版

[理论上是可以自己编译的,但win版真的超级难编译]

链接: https://github.com/xaccc/nginx-rtmp-win32

2.修改conf/nginx.conf

worker_processes 1;
daemon off;
master_process off;</code>

error_log logs/error.log info;

events {
worker_connections 1024;
}

rtmp {
server {
listen 1935;//本配置文件是使用1935作为直播服务器的端口

application live {
live on;
notify_method POST;
publish_notify on;
on_publish http://localhost:8080/rtmp/index.php?publish;//网站域名在服务器上使用时也要修改成对外的域名
on_publish_done http://localhost:8080/rtmp/index.php?publish&amp;done;
on_play http://localhost:8080/rtmp/index.php?publish&amp;play;
on_play_done http://localhost:8080/rtmp/index.php?publish&amp;play_done;
}
}
}

http {
include mime.types;
default_type application/octet-stream;
server {
listen 8080;
location / {
root D:/phpstudy/PHPTutorial/WWW;//把这个路径改成你的网站的根目录
index index.html index.htm index.php l.php;
autoindex off;
}
location ~ \.php(.*)$ {
root D:/phpstudy/PHPTutorial/WWW;//把这个路径改成你的网站的根目录
fastcgi_pass 127.0.0.1:9000;//Nginx使用php脚本要单独启用php来监听
fastcgi_index index.php;
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include fastcgi_params;
}
}
}

[不过TX云会屏蔽1935端口,所以使用时要自己修改一下]

3.启用Nginx服务器nginx.exe -c conf/nginx.conf

4.启用php服务器php-cgi -b 127.0.0.1:9000 -c php.ini

5.导入SQL到MYSQL中

6.修改config.php

date_default_timezone_set('Asia/Shanghai');
define("DBIP","localhost");//数据库IP
define("DBPORT","3306");//数据库端口
define("DBUSERNAME","root");//数据库用户名
define("DBPASSWORD","root");//数据库密码
define("DBNAME","rmtp");//数据库名
define('SYSTEM_VER','1.0.0');//系统版本号
define('SYSTEM_NAME',"GU直播");//系统名称
define('SYSTEM_ROOT','D:\phpstudy\PHPTutorial\WWW\rtmp\\');//系统网站根目录
define('SUPPORT_URL', 'https://103.249.111.182');
define('SYSTEM_NO_ERROR', false );//是否开启DEBUG模式
define('AUTH_STATE', true );//是否开启注册
define('RTMP_URL', "rtmp://localhost:1935/live/" );//RTMP链接

7.安装完成!

预览图:

登录页面
登录页面

房间信息
房间信息-推流状态自动识别

直播房间
直播房间

Github链接:

https://github.com/7gugu/gu-rtmp

Rule34自动爬虫脚本

Rule34-Downloader

php爬虫,用于爬Rule34图站的数据,自动下载特定标签的图片


特性:

– 支持指定标签,多标签搜索
– 支持轮候任务
– 支持微信通知运行状态
– 低占用


安装向导:

1. 安装php环境
2. 把该程序拖至php.exe同目录中
3. 编辑php内的PATHS,该常量用于定义爬下来的数据的缓存路径
4. 保存
5. 打开ready.txt,按照格式填入待下载标签
6. 保存
7. 运行start.bat


标签格式

female:0:42
标签:开始的pid数(0开始的42的倍数):结束的pid数(0开始的42的倍数,需要比开始的pid大)


下载地址

https://gitee.com/7gugu/python-rule34Lib


有问题反馈

在使用中有任何问题,欢迎反馈给我,可以用以下联系方式跟我交流

  • 邮件(gz7gugu@qq.com)
  • 博客(https://www.7gugu.com)

尬吹

其实这玩意儿我去年(2018)二月就写好了,不过那时候处于要备考的节点了,就没太多的精力去管理,现在有空了就来把爬虫修好发上来