闲情zhi

生活 创业 时评 杂文

毕业设计素材整理帖

感觉还是做的时候把问题记下来更加好一点、不然到时一次性回忆会很痛苦。

8.24
网站具有文件上传功能,一般的做法是直接form表单提交,页面跳转刷新然后提示提交是否成功的信息。但一般为了更好的用户体验,文件的上传也会提供ajax局部刷新的方式上传,无需跳转页面。

现在常用的了解过的ajax上传文件的实现方对发生的式有:flash提交、新建iframe提交。
相对应的开源的ajax上传插件中有这么范德萨几款:
1. swfupload
2. ajaxFileupload

前者使用flash上传方式,比较好的一点是可以显示上传进度。但在使用过程中chrome浏览器会出现flash crash的错误。
后者则使用iframe提交方式,美中不足的是不可以显示进度。

在这个网站中使用ajaxFileUpload来做为ajax文件上传的插件
总体使用还算顺利,但其中也出现了两个问题(现已修复)

1. ajaxFileUpload对于高版本的jquery支持性(这边用的jquery是1.9.1)不好、因为jquery低版本的部分函数在1.9.1中已经移除,但ajaxFileUpload恰恰利用的是低版本jquery中使用的函数,而且对于json格式的数据返回支持性很差。针对这个问题,这边的做法是修改ajaxFileUpload的源码,添加json支持,并且把高版本中缺失的对应函数拷贝进来。

2. ajaxFileUpload默认是不支持自定义参数的。比如在你上传一张图片的时候,你的参数只会有图片input的name、而不能添加其他的参数,类似ajax中的data:{xxx:xxx}。但很显而易见,既然ajaxFileUpload使用的是iframe提交,明显是可以添加自定义参数的,所以针对这个情况,我采用的方法是修改ajaxFileUpload的源码、在插件创建的form表单中、添加对应的隐藏域<input name=”” type=”hidden” value=”” />然后就解决了。

=====================================================================

结合上面的文件上传插件,文件上传的时候为了提供更好的交互,通常用户在改变input file的值的时候就开始ajax上传。但是在使用中,input file在上传一次之后再次选择其他文件上传的时候,不会有反应。这是个很蛋疼的问题。

这边直接选择了一种很轻松的方式解决。页面初始化的时候input file bind上传函数,执行函数的时候,unbind,服务器端返回上传结果的时候再次bind。考虑到这个页面不属于大流量,高并发的页面,所以这种方式很值得一试。

 

 

 

8.25

网站所采用的框架为ThinkPHP。Tp作为一个国产框架、对于中小型网站来说算很强大了。Tp内部有这么两个功能,我结合起来使用出现了问题。

1.Tp有路由功能

2.Tp可以把域名绑定到控制器

主站的网址为 http://ikuduo.com/ 而http://zqr.in/ 则指向其中一个控制器,用于短地址访问,如http://zqr.in/NDFDS  实际上访问的是那个控制器下的其中一个方法、并且参数值为NDFDS。如果不采用路由、在该控制器下面的_empty方法中可以获取到NDFDS、此时这个值被系统的该控制器默认成为了一个方法名字。

但实际上我们可以进行路由映射。如 http://zqr.in/NDFDS 实际上访问的是 AAA控制器下的index方法、它的参数id的值为NDFDS。按理说Tp是可以做到这个的,但是在研究Tp中Router.class.php的源码后发现,他判断路由的时候,不会加上控制器的名字,而恰恰他进入控制器那个方法快正是通过判断路由的长度。

$len1 = substr_count($regx,'/');
$len2 = substr_count($rule,'/');
echo $rule; //调试信息
echo $regx; //调试信息

HTTP://ZQR.IN/NDFDS 长度为1、而指向的 控制器/方法名长度为2、ZQR,IN指向的是AAA控制器,实际上他应该带上控制器,才行、但是系统没有这种判定,所以进不去。但显然这样是不合理的。已经向Tp开发组提交issue期待回复。暂时的解决方式是在AAA控制器下通过_empty方法进行判定指向。

9.1

网站中二维码的生成到美化这个步骤中数据是通过session来临时保存。这样的数据具有持久稳定的特点。我们第一次的实现方式就是这样,但实际应用中二维码预览的时候用户并不能看到二维码临时的内容。我们后来才用memcache的方式来临时保存。在用户扫描二维码的时候,如果短地址是处于编辑状态,也就是二维码还在编辑状态,就会直接用缓存中读取,可以给予更好的用户体验。

网站中有存储用户扫描时候产生的数据,比如浏览器,操作系统。这边采用PHP原生的$_SERVER中的数据,通过过滤来提取,此外用户的ip地址我们也采用定位的形式,这边使用了纯真地址库,来实现ip地址和用户地点的判定。

 

9.2

因为网站使用了memcache,本机用windows+memcache成功、但是服务器端原生memcache的配置一直出问题。后来使用了lnmp一键安装包、顺便装了配套的memcache。但是装好之后用远程链接mysql一直连不上,测试了本地的数据库可以成功,后来看了一下linux中的iptables,没有在白名单中加进去3306端口。

 

9.4

网站最近加了memcache缓存,但在具体的应用场景中还显的不够熟练。用户在生成二维码的时候,一堆临时数据,而这些临时数据我们在第一期设计的时候不能与用户绑定起来,这是非常致命的一个bug。今天想了一个办法,使用short_code作为memcache的key,其他的值作为array中的value存在,这样memcache面对的数据将会更加清晰,对于开发这来说效率也会提升很多。

 10.20

隔了这么久才来维护这篇帖子,下面就继续来搞一下吧。

网站http://www.ikuduo.com/ 基本功能完成,线上部分暂时不考虑盈利,美化部分还有待完善,另外这个系统总体还是有些繁琐的,与市面上的联图、草料比起来步骤太多。草料走的是做企业应用路线,我们不考虑这个方向。而是做消费级的产品。

所以我们有了酷多留声贴、酷多失物贴、酷多名片。其中留声贴和失物贴的功能已经完成。名片正在制作中,而留声贴和失物贴的商业化进程也正在进行中。

技术部分。

失物贴是直接在酷多二维码的模块上进行开发的。就与酷多二维码网站上的文字、网址类型类似。

留声贴功能市面上类似的产品有贴贴以及多信。不过这个产品的天花板是很低的,所以能赚钱,能赚一笔。而我的目的也是如此,当然为消费者带来更好的礼物体验也是我想去做的。留声贴的介绍页面

http://v.ikuduo.com/

为了批量印制留声贴,我们特意写了一个Service来处理这个事务,以便跟印刷厂合作的时候能够提供更加标准的物品。

这边顺便一提。我们的网站本来是MVC架构,TP所倡导也正是这种软件架构。在此基础上我家了一层Service层。同类型的业务用一个Service来提供,而controller作为一个导游,告诉你去那个Service去获取相应的服务。多个controller可以调取同一个Service。这更加利于代码的重复利用和效率 。对于Domain这个我暂时还不够清楚。由于现在经验和经历有限,只有在软件开发过程中遇到相应的问题才会去进行改变。

TP提供单一入口子域名绑定功能,之前一直失败,现在成功把多个网站通过一个ThinkPHP包进行执行。

在这个过程中也遇到了robots.txt 和 sitemap.xml 路径的问题,因为入口文件只有一个,robots.txt这些文件要放置在根目录,所以需要通过nginx重定向才能更好的进行SEO。

现阶段没有搞定的一个事就是针对TP框架UNIT测试,这个问题很严重,因为我们在开发/修改一个功能的时候,往往会无意之间改掉其他函数,虽然会有代码的review但是整体来说,不可控性很大。所以这也是一个亟待解决的问题。

 

最近技术方面就是在忙活酷多名片的事,在设计系统的过程中让我产生了疑惑。因为自身是从技术出生的,所以一般情况就是简单分析完需求、分析完角色和功能、直接上代码、直接构建SQL。然后再慢慢细调。这跟标准的软件设计流程估计差别很大,所以我不知道怎样才是一条正确的设计软件的方式,以及具体的操作步骤。这一点还在困惑中的寻找答案中….

10.24

TP的缓存一直是一个坑,今天线上的服务器一直读不到数据库中的某个字段,调试了N步后来删了Runtime才发现是缓存问题。

今天出了一个蛾子,生成失物贴的时候,我们的步骤是 先从短地址中选取一定的量标记,然后开始生成图片,生成完图片之后再进行数据库写入。但是因为nginx的限制,每次生成到一半就返回502,而且还留下一堆垃圾数据!简直烦透了!

 

11.29

又有一阵子没来搭理了。

ffmpeg作为处理视频编码转换的库,非常之好用,但是在linux下面编译安装一直出现问题(转换无声音,转换无图像等等问题)

后来经过多方查找,是ffmpeg的依赖库的问题。

我们在调试的时候是在windows下面进行的,两者的编译条件不一样,所以这个坑我们踩了。。。。

对于音频解码编码、视频解码编码lame等库需要自己编译安装

 

 

作为一个网站,数据备份也是必不可少的,所以采用常用的crond来处理,但是要把数据保存在哪里才好呢?

 

百度云盘提供的API接口,2T空间很好的解决的了这个问题。

访问日志的保存,数据库文件每天备份。 棒棒的。

发表评论

电子邮件地址不会被公开。