部署

一旦应用程序完成了,或者甚至在此之前,你就要部署它了。在部署 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 配置中设置一个环境变量:

  1. SetEnv CAKEPHP_DEBUG 2

然后就可以在 core.php 中动态地设置调试级别:

  1. if (getenv('CAKEPHP_DEBUG')) {
  2. Configure::write('debug', 2);
  3. } else {
  4. Configure::write('debug', 0);
  5. }

改善应用程序的性能

因为通过调度器(Dispatcher)处理静态资源,比如插件的图像、JavaScript 和 CSS 文件,是令人难以置信的低效的,所以强烈建议在生产环境中符号链接(symlink)它们。比如象这样:

  1. ln -s app/Plugin/YourPlugin/webroot/css/yourplugin.css app/webroot/css/yourplugin.css