Solar有两个入口文件,到底哪个才是真的?
其实这篇文章我最早在论坛里发过,原文地址是:http://solarphp.org.cn/viewtopic.php?f=11&t=4,今天把它引用过来,目的是为下一步的写作开个头,下一步将讨论Solar架构类及保证Solar运行必须的类库:)。
其实Solar有两个入口文件,一个是/index.php,别一个是/docroot/index.php。那么为什么要设置两个呢,究竟哪个才是真的入口文件? 假设及前提: 1.linux下的apache根目录为/var/www/html 2.solar的目录是/var/www/html/solar 3.有域名已经指向该服务器,假设域名为:www.exmaple.com 原因:为了让用户更快、更简单地体验Solar(也为了让用户更快有成就感),Solar允许直接把域名指向/var/www/html/solar目录,并用此域名访问,但是在实际项目布署中这是极其不安全的,更好的做法是把域名指向/var/www/html/solar/docroot。
所以我们只看/docroot/index.php:
<?php // Solar system directory // 定义当前目录的上级目录为solar的系统目录 // 也就是说当目录为/docroot,它的上级目录即为:/ $system = dirname(dirname(__FILE__)); // set the include-path // 在php的include路径中增加$system/include目录,之后再使用require或include的时候会更方便。 set_include_path("$system/include"); // load Solar // 加载Solar.php文件 require_once 'Solar.php'; // start Solar with system config file // 载入配置文件并启动Solar $config = "$system/config.php"; Solar::start($config); // instantiate and run the front controller、 // 通过延迟加载的方式获取front控制器的实例,并把处理结果输出到浏览器(渲染视图) $front = Solar_Registry::get('controller_front'); $front->display(); // Done! // 完成! Solar::stop();
引导文件中,特别要注意的就是dirname()函数的嵌套使用:
dirname(dirname(__FILE__)); 假设__FILE__为 /var/www/html/solar/docroot/index.php 上面的方法输出为 /var/www/html/solar dirname(dirname(__FILE__));得到的是文件上一层目录名 dirname(__FILE__);得到的是文件所在层目录名