部署
一旦应用程序完成了,或者甚至在此之前,你就要部署它了。在部署 CakePHP 应用程序时有一些你应当做的事情。
检查安全性
如果你要把你的应用程序放在可以公开访问的环境,最好确保它没有任何漏洞。请查看Security,了解如何防备 CSRF 攻击、表单字段篡改,等等。进行 数据验证 及/或Data Sanitization 也是保护数据库、防备 XSS 攻击很好的办法。检查确保只有 webroot
目录可以公开访问,机密信息(比如应用程序的盐和安全密钥)是秘密的,也是唯一的。
设置文档根目录
在应用程序中正确地设置文档根目录,是保护代码不泄漏、保证应用程序更安全的重要步骤。CakePHP 应用程序应当设置文档根目录为应用程序的 app/webroot
目录。这使得应用程序和配置文件无法通过网址访问。设置文档根目录对不同的 web 服务器是不同的。关于 web服务器相关的信息,可以参看 网址重写(URL Rewriting) 文档。
在所有情况下,你都应当设置虚拟主机/域(virtual host/domain)的文档为app/webroot/
。这样就避免了 webroot 目录以外的文件被执行的可能性。
更新 core.php
更新 core.php、尤其是 debug
的值是极其重要的。设置 debug = 0 禁用了一系列开发功能,一般来说,是绝不应当暴露在互联网中的。禁用调试改变了下面这些事情:
- 禁止了由
pr()
和debug()
产生的调试信息。 - 核心 CakePHP 缓存默认为每 999 天清理一次,而不是象在开发模式下每 10 秒清理一次。
- 错误视图(view)提供更少的信息,而且只给出笼统的错误消息。
- 不显示错误。
- 没有异常堆栈追踪。
除了上面这些,许多插件和应用程序扩展使用debug
来改变它们的行为。
你可以检查环境变量,从而在不同环境中动态地设置调试级别。这样就避免了部署 debug > 0的应用程序,也省去了在每次部署到生产环境之前要改变调试级别。
例如,你可以在 Apache 配置中设置一个环境变量:
- SetEnv CAKEPHP_DEBUG 2
然后就可以在 core.php
中动态地设置调试级别:
- if (getenv('CAKEPHP_DEBUG')) {
- Configure::write('debug', 2);
- } else {
- Configure::write('debug', 0);
- }
改善应用程序的性能
因为通过调度器(Dispatcher)处理静态资源,比如插件的图像、JavaScript 和 CSS 文件,是令人难以置信的低效的,所以强烈建议在生产环境中符号链接(symlink)它们。比如象这样:
- ln -s app/Plugin/YourPlugin/webroot/css/yourplugin.css app/webroot/css/yourplugin.css