半吊子全栈开发者的日常

使用 MySQLi 重写 Do you like me

这次升级 PHP7,一切顺利,到了恢复站点数据的时候,发现上次搞的 “Do you like me?” 不工作了。看了日志发现是 mysql_connect() 这个函数的问题。

看了下文档,原来在 PHP7 中全面移除了 mysql_ 系列函数,转而使用 mysqli 或者 PDO。。fuck 劳资皮肤站里都是 mysql_ 系列函数啊啊

上次偷懒用的 LWL12 写的,看来他也没想到这种情况呢。遂使用 mysqli 重写之。

mysqli 改为以面向对象的方式操作数据库,而不是 mysql_ 系列函数的面向过程,这点倒是挺好的。

不知道为何原来 LWL12 写的版本单独使用了一个表来存投票数,可能是怕效率问题。不过 SELECT COUNT(*) 在没有指定 WHICH 的时候效率还是蛮高的,参见:知乎:mysql select count(*) 与 select count(id) 两个执行效率怎样?

其实也没改多少,另外把建表的 SQL 也顺便封装在文件里了,托管在 Gist 上。

不忘初心,方得始终

如白驹过隙,2015 年已经悄悄离去,新年的钟声已经敲响。

虽然早就过了发年终总结的日子,但本着宁缺毋滥的原则,一直捂着草稿没发,我博客第一次的年度总结,总要搞得有逼格一点。

回首 2015

2015,毫不夸张的说是我收获最大的一年。去年的 3 月 28 日,不知道哪里来的兴趣,开始折腾起了独立博客。

我从来不是一个喜欢写文学性文字的人,以前不是,将来也应该不会是。开始搭建博客的理由已经不可考,但是我仍然庆幸当初选择了这条道路。

2015 年,我高中一年级。真的只是一个平凡的,刚上完一般的高一课程,终于开始习惯了高中生活的死小孩。

稍微和其他孩子不一样的,也就是我对计算机的兴趣了。嘛,讲的这么高大上,其实就是比起用电脑玩游戏,更喜欢折腾一些乱七八糟的东西。

我绝对不算早接触计算机的那一批人,我的父母也没有那么高瞻远瞩,不过在 2008 年,我还是碰到了人生中第一台电脑。

我至今记得她刚刚被父亲抬回家的样子。

清华同方 真爱 G2000 品牌机,棱角分明,散发出一股冷峻气息的黑色机箱,漂亮的镜面设计的前面板,这么一个酷爆了的铁疙瘩,给那个卧室客厅合一的蜗居和我以后的人生,涂上了浓密重彩的一笔。

她刚刚被请回家时,我凭借着不知道哪里学来的技能将其正确的与那台 14 吋液晶彩电连在一起并且成功点亮了,不过看到的是一个黑黑的屏幕,上面闪烁着光标与一个字符。我在键盘上乱按一通,它也会显示对应的字母。

这和我在别人家里玩的不一样啊,我哭着喊着要父亲拿回店里修。知道那是 DOS,已经是几年后的事情了。

同其他同龄的孩子一样,打 CF 到废寝忘食在我身上也发生过。然而不知道什么时候,甚至连我也没注意到,当我已经把管理 Windows 的文件系统,浏览 system32,折腾美化,优化系统作为一种乐趣的时候,我已经走上了一条不归路。

初中二年级,照理来说应该是在本子上写写画画人物设定,写写右臂封印着黑炎龙的世界第一勇者流落民间扮猪吃老虎一路装逼如风抱得美人归的小说的年纪,但窝不知道从哪里知道了编程这个词汇,并且发现了吴涛大哥的中文编程语言后,我又在这条不归路上前进了一步。

易语言,中文编程从入门到精通,海洋出版社出版。这就是当初我书架上最大部头的一本书了。感谢这本书,虽然现在的我再去看,可能会嗤之以鼻,但是这本书给予了我一个起点,给予了我对编程的兴趣,给予了我完成一个作品的满足感。

感谢这门语言,没有它,就不会有今天的我。愿它可以吸引更多的希望学习编程的中国人初学者踏上这条道路。

> READ MORE...

Blessing Skin Server 0.1 —— 开源 PHP Minecraft 皮肤站

bss upload

很久以前就有想写一个皮肤站的想法了,但是苦于没有时间且 PHP、前端的 coding 都不熟练,所以一直搁置着,当作一个目标。

恰逢前几周稍微有点时间(其实是克服了懒癌),就写了一个皮肤站的原型。PHP + MySQL,表单 POST 数据,基本的登录/注册/上传 功能还是实现了的。但是前端完全没有写,全是 webkit 的默认样式。

不过盼星星盼月亮终于等到了元旦假期(连上周末三天),于是把整个项目重构了一下,并且用鞋拔子写了个稍微能看的页面。

前端页面引用的资源/库均位于根目录下的 /assets/libs,这是不知道从哪里学来的,总之觉得这样挺好的就这样放了(笑)

然后是实现了全站 Ajax,登录/注册 均 POST 请求 check.php 返回 json,加入了 SQL 注入防护(虽然还没有 sqlmap 测试过),加入了基于 IP 的注册数量限制,支持保存 cookie,token 验证自动登录。token 就是使用普通的用于验证的不可逆算法得到(用户名 + MD5 密码 + 盐,MD5 二次加密)。

Ajax 文件上传带 token POST 请求 upload.php,同样返回 json,上次后的文件位于 /uploads。(其实窝觉着这俩可以放一个文件里的)

user.php 为用户页面,本来是想用 php 路由到 /user/admin 等子目录的,但是想想还是算了。因为窝对路由之类的理解并不多,边查边写的话窝也没有那么多时间了。准备放在下一个版本里。

user.php 中使用了 djazz 的 Minecraft Skin Previewer 实现 3D 皮肤预览(就是 skinme 使用的那个),窝将其封装了一下放入了 three.msp.js 中,可以使用类似 MSP.getStatus()MSP.changeSkin() 的接口来访问。

后端就没啥出彩的地方了(话说前端也没有吧),所有使用了数据库连接的操作均封装为函数放在 connect.php 里面。不过感觉这个放根目录不合适就是了。

config.php 中定义了数据库连接信息,站点名称等常量以供调用。这是从 WordPress 那学来的(笑

遗憾的是由于没有时间,后台管理页面还没写,目前只能通过自己管理数据库和文件的方式来管理用户。而且现在的数据表结构也不支持后台管理 qwq

而且前端的 JS 和 CSS 都写得乱糟糟的,CSS 选择器一半是 id 一般是 class,文件关系也没处理好,没有响应式设计,有些地方还用了绝对定位 emotion1

不过由于时间所限,这些都放到下一个版本吧~


项目开源在 GitHub 上,欢迎 Pull Request~ 在线演示:https://skin.prinzeugen.net/

Hello World !

欢迎使用 WordPress。这是您的第一篇文章。编辑或删除它,然后开始写作吧!


说实话我开始写博客后真正的「第一篇文章」早就不知道啥时候被我不小心删掉了,这篇文章只是在我后来回想起大概的日期,去 WordPress 源码里找出默认「Hello World」文章的内容后拼造出的文章而已。

不过不管怎么说这也是本博客的第一篇文章(虽然是假的),值得庆贺。鼓掌!


小提示:2016 年以前的文章(黑历史)请在「归档」页面中查看。