分类目录归档:PHP

PHP实现 struct结构体

还是那个朋友,在用 Workman 开发 TCP协议 的项目。TCP客户端发过来的流,整数啥的好解析,遇到解析小数蒙圈了。百度一下,竟然没找出来方法,最终使用unpack解决。

直接写,真头疼,很容易出错,模仿C语言的struct自己造了一个车子,这应该是最优雅的解决方案了(自我陶醉…)。

封装成了类,代码如下:
继续阅读

PHP二进制操作初体验

一个朋友 最近在做一个 硬件相关的项目。搞Web的,最擅长的也是最熟悉的 PHP来开发,使用了 workerman 框架。搞WEB的平常很少和 二进制打交道,他看到 文档 开头就蒙圈了。向他的大神(也就是我)来求救了。下面是 部分文档的截图,第一次看时 简直 头大阿。

我也很少 和 二进制打交道,作为”大神”的我,怎么能在”迷弟”面前表现出不会呢,只能硬着头皮上了,折腾了一晚上,终于造出来一个小轮子。代码已经测试没有问题了,另外 为了 让 这朋友 更加崇拜我,完成后,特意美化了一下代码。。。

继续阅读

PHP 数字转字符串互换类

再次更新:发现尽然有现成的Base32方案,无奈已经写好了,还是继续分享出来吧。本方案比Base32相比还是有优势的。
1、自带校验功能
2、解码后可以和数据库中的生成项目对比进行二次验证
3、生成的邀请码是随机,相比Base32规律更难找

本类所在的项目,使用 ThinkPHP 搭建,把 IntConvert.php 放到 app\services 目录下,就可以直接使用app\services\IntConvert 自动调用。如果存放目录后,注意修改下 对应的明明空间。

—-分割线—–

最近 的APP上需要增加一个 邀请码功能,通过邀请码注册。因为内部使用,需要防止 外部用户 随便填写一个 邀请码注册成功。因为主要通过图片的方式进行传播,还不恩那个设计的太长。

初期考虑了两种方案: 最笨的方法是一次生成好,用时随机获取一个。另一个是通过Base64对用户ID进行转换下。分析之后,两种方案都不太理想。 继续阅读

PHP 实现 毫秒级读取大文件(千万行级别)

一同行朋友遇到奇葩的需求,需要在 一个 1000万行级别的 文件,随机读取一行。
几千行很好处理,直接 file(文件名),通过返回的数组 的索引既可获取。

尝试了 很多方法,超过50M的文件,打开速度都不理想。给朋友提供了 memcached 和 mysql 内存表的思路,因为后期维护比较麻烦,也都放弃了。

在 去 蹲坑时 灵光一闪,既然小文件打开很快,为什么不把数据分到多个文件呢? 继续阅读

thinkphp5 instance 的简单实现

最近学习 ThinkPHP5,第一次看到 TestClass::instance() 就能创建 TestClass 实例的方法。感到很好奇,翻阅 ThinkPHP 的源代码,大体理解了 它的 设计思想,非常的先进。

再次从零造车一次(昨天的造车:angularjs的数组传参方式的简单实现http://www.miaoqiyuan.cn/p/angularjs-array-arguments),来讲讲 他的 具体实现。本文(thinkphp5 instance 的简单实现)为原创文章,原文地址:http://www.miaoqiyuan.cn/p/php-class-instance,转载请注明出处。
继续阅读

mysql使用localhost,竟然会导致程序变慢

好久没有更新博客了:),之前写的 ThinkPHP的权限管理 thinkAuthorization(地址:http://git.oschina.net/mqycn/thinkAuthorization 最近会支持 ThinkPHP5.0),预计本周末会发布

最近的一个项目使用 ThinkPHP5.0 框架,为了省事,直接用全宇宙最强大的 phpStudy 做开发环境。调试时,每次脚本执行时间都超过一秒,查看日志,发现 数据库 Connect 时竟然使用了超过1秒的时间。

最初怀疑是 TP5 框架的问题,改用原生方式(mysql_connect)连接 数据库,竟然也存在问题。数据库地址 使用的 localhost,改用 127.0.0.1 后,解决。 继续阅读