我刚刚阅读了Twelve-Factor App,它看起来像是一套非常全面的规则,适用于基于Web的应用程序.它在其示例中使用了python或rails,但从来没有php ...我想知道哪些因素可以应用于PHP项目以及如何应用?
谢谢
简短回答:
所有要点都适用于PHP,因为十二个因子应用宣言专门针对网络应用.
PHP非常难以遵守12个因子,特别是在项目2,7,8,9(作为7和8的副作用)和12(部分)中.实际上,这是我在整个"PHP糟透了"的咆哮中听到的第一个真正有根据的论点,这在Ruby和Python社区很常见(不要误解我,我认为Ruby和Python是更好的语言,但我不讨厌PHP,并且明确地讨厌"我的语言更好"的咆哮.)
话虽如此,可能是您的PHP项目不是Web应用程序或SaaS,而只是一个简单的网站,因此您可能只是认为不需要十二个因素.
答案很长:逐点分析将是:
代码库:不是问题
依赖关系: PEAR的工作方式完全违背了这一点,因为梨依赖关系是在系统范围内安装的,通常你没有一个统一的宣言来声明它们.PHP设置通常也要求您将软件包添加到操作系统安装中以获得一些库.最后AFAIK在PHP中没有提供隔离工具,如"virtualenv","rbenv"或"rvm"(或者如果它存在于PHP社区中不受欢迎)编辑: Composer(http://getcomposer.org/)似乎做了关于依赖的权利,它仍然没有隔离PHP版本,但对于所有其余的它应该没问题.
配置:一些PHP框架不太适合这样做,但肯定还有其他一些表现良好,所以它不是平台本身的缺陷
支持服务:不应该是一个问题,尽管可能不得不破解一些框架,以便作为资源管理服务
构建,发布,运行:这完全适用于PHP,因为这绝对不仅仅涉及"编译".有人可能会争辩说PHP社区上有几个项目和托管平台滥用直接FTP等等,但这并不是PHP本身的缺陷,并且在这个项目上做正确的事情并没有真正的障碍.
进程:这绝对是PHP的关注点.PHP完全能够运行纯粹的无状态进程(重点是无状态这个词),实际上有几个框架可以让你的生活变得轻松.例如,symfony提供了开箱即用的会话管理和memcached或数据库存储,而不是常规会话
端口绑定:简单地说,这一点基本上要求您反向代理并将实际的Web服务器嵌入应用程序而不是分离的组件.这使得PHP处于非常难以遵守的地位.尽管有很多方法可以做到这一点(请参阅关于使用PHP作为FastCGI的回复),这绝不是最常见的,也不是最好的支持方式来提供PHP应用程序,就像在其他社区(例如Ruby,Node.js)上一样.
进程:这在PHP中并非不可能.然而,有几个元素使PHP难以遵守.即对项目6和7缺乏良好支持; 事实上,生成新进程的PHP API并不是很好用; 特别是Apache的mod_php处理其工作者的方式(这是迄今为止最常见的PHP部署架构)
可处理性:如果您使用正确的工具,PHP中没有任何内在因素可以阻止您创建快速,一次性,整洁的Web和工作进程.但是我认为,由于根据第7点和第8点难以实现基础过程模型,因此9作为副作用变得有点麻烦
开发/生产平价:这是非常平台无关的,我会说最难做的事情之一.PHP也不例外,但它也没有特别的障碍.实际上,宣言中命名的大多数工具都可以应用于PHP项目
日志:让您的应用程序与执行环境中的日志系统无关,这在PHP上是完全可行的
管理进程:关于这一点,PHP最重要的缺陷是缺少REPL shell.关于其他方面,像Symfony这样的几个框架允许您编写管理任务(例如,基于Doctine的数据库迁移)并在与"常规"Web环境相同的环境中运行它们.
由于PHP社区正在发展,它可能已经纠正了一些提到的错误.