- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
标题1
PHP企业应用开发最佳实践
背景
主要方向是企业管理软件。
以私有部署为主要方式。
终端环境千变万化:操作系统,WebServer,PHP版本。
遇到了大量的问题,归纳为十个问题,供大家参考。
核心是尽量做到最小依赖,最简安装,最简维护。
目录
如何选择PHP的开发框架?
如何保护自己的代码?
如何解决PHP环境部署的问题?
如何解决用户二次开发无法升级的问题?
如何实现全文检索的问题?
如何实现计划任务的问题?
怎么导入导出word, excel?
如何实现轻量级的聊天服务器?
如何实现常见的消息通知?
如何应对常见的安全问题?
问题一:如何选择开发框架
PHP框架多如牛毛,选择困难。
09年的时候,研究过cakephp, ci等框架。
最后还是自己来写:zentaoPHP。
第三方框架的问题:通用框架,方向难以控制。
主要特点:结构简单,开发友好,深度扩展。
不管是自主开发还是第三方,一定要能掌控代码。
比如很多框架新版本无法兼容老版本的应用:(。
程序员一定要控制代码,而不是被代码控制。
问题二:如何保护自己的代码
商务手段:
保护代码的最好方式是开源。
通过开源开放建立竞争壁垒。
技术手段:
安全防护:内网的安全,限制访问。
加密软件:ioncube, zend。
前端保护:用PHP输出,代码混淆,签名,彩蛋(bmpcrypt)。
法律手段:
对内:保密协议,版权意识普及。
对外:商标,著作权登记,数字作品登记,外观发明专利,律师函,诉讼。
问题三:如何解决应用部署的问题
最开始不认为部署是问题,总觉得PHP程序员能搞定。(x)
先后尝试了各种集成运行环境,到后来自己精简,编译。
windows一键安装包
linux一键安装包(各种依赖lib全内置,尽量减少第三方依赖。)
各种deb包,rpm包。
docker镜像。
虚拟机镜像。
尽可能简化用户安装这一关。
问题四:如何解决二次开发和升级的矛盾
做二次开发的用户是最有价值的用户,但他们无法升级。
这个问题要从一开始就要考虑,也是我们自己开发框架的原因。
每个模块分为model, view, control, lang, config
充分利用PHP的解释执行的特点,加上OOP的机制。
主干代码和扩展代码分开。
框架判断扩展目录下面是否有扩展代码,有则优先加载。
无法使用OOP的,使用钩子机制,加上js, css实现动态的修改。
我们现在无分支:一套主干代码 + 若干插件。
问题五:如何实现全文检索的问题
无法使用第三方全文引擎软件:部署成本太高,有局限。
只能着眼于mysql的fulltext功能。
不做分词,做单字索引。
适用于小规模的全文检索,实际使用效果还不错。
基本步骤:
将内容拼装,转换为unicode值,存为一张索引表。
在转换过程中,将汉字和unicode的对应关系记录下来。
搜索时候同样做unicode的转换,然后对索引表进行检索。
将结果中的unicode还原为原来的内容,给用户呈现搜索结果。
对四个字符以下的英文单词填充特殊字符,这样也能搜索。
问题六:如何实现计划任务
操作系统自带的crontab, 计划任务用户部署起来有成本。
使用PHP的ignore_user_abort机制。
通过用户的访问来触发,启动一个计划任务的进程,常驻。
然后仿照crontab的语法,实现了PHP版本的crontab。
用户可以在后台自主添加计划任务。
常驻内存的调度程序定期扫描计划任务表,决定是否执行。
问题:webserver重启后,需要用户手工触发。
问题七:和其他数据格式的交换
word, exce格式的导入导出是常见需求。
可以借助开源的类库:phpexcel, phpword。
还有一种思路:将docx, xslx当作模板。
和其他应用的集成,采用接口的方式:
/my-bugs.html
/my-bugs.json
无需额外开发大量接口,尽量做到代码重用。
问题八:如何实现轻量级的IM服务
定位是轻量级的IM服务。
服务器端使用PHP + socket,跨平台部署,最小依赖。
客户端使用nw.js,html5的方案。
协议没有使用websocket,在socket基础上自己封装。
业务逻辑按照正常的B/S架构开发,mvc结构。
文字消息使用socket传输,附件使用http协议。
服务器端启动一个PHP脚本即可。
问题九:如何使用消息通知
邮件通知还是最常用的方式。
问题一:终端用户对smtp服务不了解。
问题二:各大邮件服务商对smtp服务限制越来越严格。
应对方案:
在配置的时候简化用户的配置。
换个角度来看:和sendcloud同学建议,促成了notice服务。
在尝试由我们来提供通知服务,摸索中。
体会:技术无法解决的问题尝试用商务来解决
文档评论(0)