IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

Zen Cart 源码阅读笔记 (一)

雕刻时光 2012-08-02 23:58:57 累计浏览 3,051 次
本机暂存

深夜失眠,苦闷无处排遣,于是打开电脑读起Zen Cart的代码来了。

从index.php开始读,这个文件相当重要,注释里说index.php represents the hub of the Zen Cart MVC system,也就是说它代表了Zen Cart MVC系统的中心。Zen cart 的Wiki页也有相当完整的介绍:开发者API教程 整个流程如下:

  • Load application_top.php - see {@tutorial initsystem} 载入application_top.php
  • Set main language directory based on $_SESSION[\'language\'] 基于$_SESSION[\'language\']设置主语言目录
  • Load all *header_php.php files from includes/modules/pages/PAGE_NAME/ 从includes/modules/pages/PAGE_NAME/加载全部全部*header_php.php文件
  • Load html_header.php (this is a common template file) 载入html_header.php(此为通用模板文件)
  • Load main_template_vars.php (this is a common template file) 载入main_template_vars.php通用模板文件
  • Load on_load scripts (page based and site wide) 装载 on_load 脚本(基于页面和整站)
  • Load tpl_main_page.php (this is a common template file)载入tpl_main_page.php通用模板页
  • Load application_bottom.php 载入application_bottom.php

先切换到includes/application_top.php,看看里面做了些什么,首先对$_FILES,$_GET,$_COOKIE,$_SESSION检查,确保其不含有非法的或者系统保留的键和值,其中对$_GET还要检查某些特定参数的值不能以http开头或含有//,并且这些参数的strlen不能大于43(因为42是宇宙终极密码?),检查到非法时会发生406 Not Acceptable错误,整个系统执行终止。

然后设置一些常量(是否为管理界面IS_ADMIN_FLAG,页面执行开始时间PAGE_PARSE_START_TIME,Debug脚本DEBUG_AUTOLOAD),并把对php.ini的arg_separator.output设置为&,这个是php生成url的参数连接的分隔符,在http_build_query函数里可能会用到。见

http_build_query, 然后载入includes/local/configure.php的本地配置文件(如果存在的话),如果STRICT_ERROR_REPORTING常量设置为True,则会显示错误,不设置时不显示错误报告,在生产环境下不要设置这个常量。关闭magic-quotes支持,即在php5.3以下版本set_magic_quotes_runtime(0),在5.4以下版本ini_set(‘magic_quotes_sybase’, 0);接着加载includes/configure.php的配置文件,如果不存在,则进入显示错误页(提示安装),页面执行终止。

includes/configure.php定义了一些URL和目录常量,还有数据库连接信息和SQL缓存类型。默认为文件缓存。

回到application_top.php来,DIR_FS_CATALOG如果没有被定义,则配置文件无效,也会进入显示错误提示安装的页面。

继续载入额外的配置文件,即includes/extra_configures下的php文件,其中enable_error_logging.php为Debug的相关设置,

然后设置了一个按前缀载入核心文件的变量$loader_file,在这里为config.core.php,并没有在此加载,可能在以后将会用到。

然后包含includes/initsystem.php,在这里加载和解析autoloader文件,即includes/autoloaders目录内的文件,其中includes/autoloaders/overrides/下文件将会覆盖include/autoloaders下的同名文件(如果存在的话)

同分类推荐文章

  1. 等了十年的 Go 链式管道,终于来了:seq 让你像写 Scala 一样写 Go (2026-06-25 18:38:18)
  2. Go 实验特性详解 (2026-06-21 10:05:27)
  3. amd64 微架构级别对 Go 程序性能提升多少? (2026-06-21 09:38:49)

查看更多 后端 文章 →

建议继续学习

  1. 使用gettext来支持PHP的多语言 (累计阅读 39,270)
  2. WordPress插件开发 -- 在插件使用数据库存储数据 (累计阅读 29,165)
  3. Paypal接口详细代码(PHP版,非API接口) (累计阅读 19,409)
  4. 我的PHP,Python和Ruby之路 (累计阅读 13,150)
  5. include(“./file.php”)和include(“file.php”)区别 (累计阅读 12,791)
  6. 15个最好的免费开源电子商务平台 (累计阅读 12,542)
  7. Redis消息队列的若干实现方式 (累计阅读 12,088)
  8. 到底什么是MVC? (累计阅读 11,870)
  9. 整理了一份招PHP高级工程师的面试题 (累计阅读 11,710)
  10. Rolling cURL: PHP并发最佳实践 (累计阅读 11,488)