1.2. 下载并安装Solar

1.2.1 Linux/Unix平台

  1. 下载Solar系统压缩包,你可以从这里下载。

  2. 把系统包解压到网站根目录(例如:/var/www/htdocs 或 /etc/apache2/sites/default),在本示例中我们把该目录叫SYSTEM

    [Warning]Warning

    请注意,这种做法是很不安全的;在实际项目中,你应该把系统包解压到网站根目录之外,通过建立虚拟主机来指向SYSTEM/docroot目录

  3. 进入SYSTEM目录,你应该会看到类似下面这样的文件目录:

    $ cd SYSTEM
    $ ls -1F
    README
    config/
    config.php
    docroot/
    include/
    index.php
    script/
    source/
    sqlite/
    tmp/
    $
  4. 更改tmp/和sqlite/目录的权限,以使web服务器对其具有可写权限

    $ chmod -R 777 sqlite/ tmp/
    $
    [Warning]Warning

    请注意,对这些目录使用最大读/写权限是不安全的。在实际项目中,你应该把sqlite/和tmp/的所有者改为web服务器。

  5. 现在你可以浏览http://localhost/index.php 并且可以看到Hello World!消息

1.2.2 Windows 平台

  1. 下载Solar系统压缩包,你可以从这里下载。

  2. 把系统包解压到/solarlatest目录下,在本示例中我们把该目录叫SYSTEM

  3. 进入SYSTEM目录,你应该会看到类似下面这样的文件目录:

    $ cd SYSTEM
    $ dir
    README
    README2
    config/
    config.php
    docroot/
    include/
    index.php
    script/
    source/
    toolkit/
    sqlite/
    tmp/
    $
    [Note]为什么要区分 Windows 和 Linux 呢?

    这个问题确实让我们没办法回避,事实上这可能也是Solar目前尚不流行的原因,许多人看到这里肯定会问:“ PHP 不是跨平台的么,为何一个PHP框架不是跨平台的呢?”恩,这个问题我现在可以回答你。不错,PHP是跨平台的,但是PHP在两个平台下肯定有不同的实现,而且PHP对于Linux的支持更好。那么Solar也一样,Solar 出生在 Linux 家庭。其实Solar可以直接在win下运行(只要有wamp环境),但是因为 Solar 用到文件系统的 Symlink 特性,所以其实是 Solar 的命令行工具不能很好地在 WIN 下执行。命令行是帮助我们快速开发的得力助手,我们当然不允许它不能使用。

    仔细看Solar for Windows的目录结构,你会发现和 Linux 平台下的 Solar 对比,这里多了 README2 文件和 toolkit 文件夹。文件 README2 是 Roy <http://roygu.com> 用于记录 Solar for Windows 版本日志的。而 toolkit 文件夹下是在 WIN 平台的一些工具包,在 WIN 下要想更好的使用 Solar,我认为这些工具包是必要的。

  4. Window 版本的主要工作

    WIN 下主要的不同也就在 script 目录下,因为我们只需要解决 Solar 命令行问题就行了。这里我要说说我对 Solar 的理解。Paul <http://paul-m-jones.com> 把 Solar 设计得足够好了。整个 Solar 是一个系统,你可以把它理解为操作系统,它由 Solar 内核和辅助工具组成,我们在 Solar 上开发应用就相当于在操作系统上开发软件一样,这个比喻应该好理解而且不过分。一般来说,我们有两种途径访问 Solar:一种是从浏览器访问,这个时候入口文件是 /docroot/index.php/index.php;一种是从 CLI(命令行)访问,这个时候入口文件是 /script/solar。这两个文件都通过 Solar 的架构类 /source/solar/Solar.php 来使用 Solar 内核。

    在 Solar 上开发应用是以 vendor 为单位的,你开发的应用的所有代码都是高度集中的,事实上一个 vendor 是一个文件夹。这就是说你在部署代码时,只需要部署 vendor 就行了,非常简单高效。

    由于 Solar 使用了文件系统的 Symlink 特性,Windows NT6 之前的系统是不支持 Symlink 特性的,也就是说 WIN 2000, XP, 2003 不支持这种特性。但是市面上 WIN 2000 和 WIN 2003 仍有很大份额,所以不能在这两个服务器版本上部署是不能接受的。但同时为了尽可能小的改变 Solar 的设计哲学,所以只能采用复制的方式来保证/include目录的可用性,采用反向同步技术来保证 vendor 的完整性、可移植性。

  5. 如何开始?

    很简单,打开/script/phpenv.ini文件,配置 PHP 可执行文件及其配置文件的路径。

    PHP_EXE="D:\php\php.exe"
    PHP_INI="D:\php\php.ini"

    然后进入 SYSTEM 目录,输入下面这条命令测试你的配置,同时可查看你的 PHP 版本:

    D:\xampp\htdocs\solarlatest>script\solar -phpv
    PHP 5.2.9-2 (cli) (built: Apr  9 2009 08:23:19)
    Copyright (c) 1997-2009 The PHP Group
    Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies
        with Xdebug v2.0.4, Copyright (c) 2002-2008, by Derick Rethans

    恭喜,如果出现上面这种情况,说是你已经成功了。接下来初使化 Solar 的运行环境,尽管 WIN NT6 之后的系统支持 Symlink,但 Symlink 是不能移动的,即使创建的时候使用的是相对路径。这就需要我们手工创建了,Paul 在 Solar 1.1.2 版本中提供了 winfix.bat 文件用于解决此问题。不过我有不同的看法,/source/solar/Solar 文件夹是 Solar 的内核,有其特殊性,但我们仍可以把它看作是一个 vendor,是一个系统级的 vendor,所以我们仍想使用 link-vendor 命令来为它创建链接,幸运的是,我们已经实现了这个功能。你要做的就是输入下面这条命令:

    D:\xampp\htdocs\solarlatest>script\solar link-vendor Solar
    Making links for vendor 'Solar' ...
        Making link 'include/Solar' ... done.
        Making link 'include\Test/Solar' ... done.
        Making link 'include\Mock/Solar' ... done.
        Making link 'include\Fixture/Solar' ... done.
        Making link 'include/Solar.php' ... done.
        Making link 'include\Test/Solar.php' ... done.
    ... done.
    Making public symlinks for 'Solar' ...
        Making public directory docroot/public/Solar/Controller ... done.
        Making public symlink for Solar_Controller_Bread ... done.
        Making public symlink for Solar_Controller_Page ... done.
        Making public directory docroot/public/Solar/View/Helper ... done.
        Making public symlink for Solar_View_Helper_Pager ... done.
    ... done.
    Remember to add 'Solar_App' to the ['Solar_Controller_Front']['classes'] element
     in your config file so that it finds your apps.
    Remember to add 'Solar_Model' to the ['Solar_Sql_Model_Catalog']['classes'] elem
    ent in your config file so that it finds your models.

    OK,在 WIN NT6 之后的系统中,接下来的事情就和 Linux 下一模一样了。在 WIN NT6 之前的系统中(也即:WIN XP, 2000, 2003)还有点区别,因为在这种情况下我们是使用复制的方式来模拟实现的,所以在这种系统上我们的工作区域就不再是任意的,我们要细心地在/include/docroot/public下工作,确保目前的应用是可用的。最后使用sync-vendor命令把所有代码同步到/source下。

    # script\solar sync-vendor Solar
    Sync directories and files ...
    include/Fixture/Solar -> source/solar/tests/Fixture/Solar
        done.
    include/Mock/Solar -> source/solar/tests/Mock/Solar
        done.
    include/Test/Solar -> source/solar/tests/Test/Solar
        done.
    include/Solar.php -> source/solar/Solar.php
        done.
    include/Test/Solar.php -> source/solar/tests/Test/Solar.php
        done.
    include/Solar -> source/solar/Solar
        done.
    Sync complete.
    ... done.