(王春生)PHP开发企业应用常见问题

2020-02-27 193浏览

  • 1.
  • 2.标题1 PHP开发企业应用常见问题 王春生 2016/5/14
  • 3.自我介绍 • PHP程序员:大学的时候开始写PHP。 • 开源软件开发者:BugFree ECShop 禅道 蝉知 然之。 • 在路上的创业者:2009年开始创业至今。 • 喜欢尝试用PHP解决一切问题。
  • 4.关于这次演讲的背景 • 主要方向是企业管理软件。 • 以私有部署为主要方式。 • 终端环境千变万化:操作系统,WebServer,PHP版本。 • 遇到了大量的问题,归纳为十个问题,供大家参考。 • 核心是尽量做到最小依赖,最简安装,最简维护。
  • 5.目录 • 如何选择PHP的开发框架? • 如何保护自己的代码? • 如何解决PHP环境部署的问题? • 如何解决用户二次开发无法升级的问题? • 如何实现全文检索的问题? • 如何实现计划任务的问题? • 怎么导入导出word, excel? • 如何实现轻量级的聊天服务器? • 如何实现常见的消息通知? • 如何应对常见的安全问题?
  • 6.问题一:如何选择开发框架 • PHP框架多如牛毛,选择困难。 • 09年的时候,研究过cakephp, ci等框架。 • 最后还是自己来写:zentaoPHP。 • 第三方框架的问题:通用框架,方向难以控制。 • 主要特点:结构简单,开发友好,深度扩展。 • 不管是自主开发还是第三方,一定要能掌控代码。 • 比如很多框架新版本无法兼容老版本的应用:(。 • 程序员一定要控制代码,而不是被代码控制。
  • 7.问题二:如何保护自己的代码 • 商务手段: – 保护代码的最好方式是开源。 – 通过开源开放建立竞争壁垒。 • 技术手段: – 安全防护:内网的安全,限制访问。 – 加密软件:ioncube, zend。 – 前端保护:用PHP输出,代码混淆,签名,彩蛋(bmpcrypt)。 • 法律手段: – 对内:保密协议,版权意识普及。 – 对外:商标,著作权登记,数字作品登记,外观发明专利,律师函,诉讼。
  • 8.问题三:如何解决应用部署的问题 • 最开始不认为部署是问题,总觉得PHP程序员能搞定。(x) • 先后尝试了各种集成运行环境,到后来自己精简,编译。 • windows一键安装包 • linux一键安装包(各种依赖lib全内置,尽量减少第三方依赖。) • 各种deb包,rpm包。 • docker镜像。 • 虚拟机镜像。 • 尽可能简化用户安装这一关。
  • 9.问题四:如何解决二次开发和升级的矛盾 • 做二次开发的用户是最有价值的用户,但他们无法升级。 • 这个问题要从一开始就要考虑,也是我们自己开发框架的原因。 • 每个模块分为model, view, control, lang, config • 充分利用PHP的解释执行的特点,加上OOP的机制。 • 主干代码和扩展代码分开。 • 框架判断扩展目录下面是否有扩展代码,有则优先加载。 • 无法使用OOP的,使用钩子机制,加上js, css实现动态的修改。 • 我们现在无分支:一套主干代码 + 若干插件。
  • 10.问题五:如何实现全文检索的问题 • 无法使用第三方全文引擎软件:部署成本太高,有局限。 • 只能着眼于mysql的fulltext功能。 • 不做分词,做单字索引。 • 适用于小规模的全文检索,实际使用效果还不错。 • 基本步骤: – 将内容拼装,转换为unicode值,存为一张索引表。 – 在转换过程中,将汉字和unicode的对应关系记录下来。 – 搜索时候同样做unicode的转换,然后对索引表进行检索。 – 将结果中的unicode还原为原来的内容,给用户呈现搜索结果。 – 对四个字符以下的英文单词填充特殊字符,这样也能搜索。
  • 11.问题六:如何实现计划任务 • 操作系统自带的crontab, 计划任务用户部署起来有成本。 • 使用PHP的ignore_user_abort机制。 • 通过用户的访问来触发,启动一个计划任务的进程,常驻。 • 然后仿照crontab的语法,实现了PHP版本的crontab。 • 用户可以在后台自主添加计划任务。 • 常驻内存的调度程序定期扫描计划任务表,决定是否执行。 • 问题:webserver重启后,需要用户手工触发。
  • 12.问题七:和其他数据格式的交换 • word, exce格式的导入导出是常见需求。 • 可以借助开源的类库:phpexcel, phpword。 • 还有一种思路:将docx, xslx当作模板。 • 和其他应用的集成,采用接口的方式: –http://pms.zentao.net/my-bugs.html–http://pms.zentao.net/my-bugs.json– 无需额外开发大量接口,尽量做到代码重用。
  • 13.问题八:如何实现轻量级的IM服务 • 定位是轻量级的IM服务。 • 服务器端使用PHP + socket,跨平台部署,最小依赖。 • 客户端使用nw.js,html5的方案。 • 协议没有使用websocket,在socket基础上自己封装。 • 业务逻辑按照正常的B/S架构开发,mvc结构。 • 文字消息使用socket传输,附件使用http协议。 • 服务器端启动一个PHP脚本即可。
  • 14.问题九:如何使用消息通知 • 邮件通知还是最常用的方式。 • 问题一:终端用户对smtp服务不了解。 • 问题二:各大邮件服务商对smtp服务限制越来越严格。 • 应对方案: – 在配置的时候简化用户的配置。 – 换个角度来看:和sendcloud同学建议,促成了notice服务。 – 在尝试由我们来提供通知服务,摸索中。 – 体会:技术无法解决的问题尝试用商务来解决。
  • 15.问题十:如何应对常见的安全问题 • 一开始并没有太在意,乌云上爆了十几个问题。 • 核心就是对用户的输入做过滤: – XSS攻击: 对输入做标准化,过滤。HTML Purifier – SQL注入: 接管SQL的拼装,并严格过滤。 – 附件木马: 白名单模式,严格过滤。 – CSRF攻击:重要操作密码验证,邮箱验证,文件验证。 – 垃圾过滤: 审核再发布,基于用户行为特征过滤。 – 防DDOS: 第三方cdn,云加速之类的解决方案。
  • 16.标题1 谢谢大家