一般資料隻介紹 Zend Framework 與 Apache 通過 .htaccess 配置檔案進行內建,實作通路的定向和分發。這是因為 apache 通過裝載 mod_rewrite 子產品實作了 URL Rewrite 技術,将所有的請求轉發到 index.php。
但由于 IIS 不支援基于 .htaccess 配置的 URL Rewrite,是以 Zend Framework 無法簡單地在 IIS 下運作。但是,由于 IIS 支援基于 HttpModule 的 URL Rewrite,是以通過别的途徑,是可以讓 Zend Framework 在 IIS上跑的。我利用第三方軟體 ISAPI_Rewrite 實作了這個功能,測試了一下控制器和視圖,可以運作,更深入的應用還沒有測試,大家可以繼續探讨。
Zend Framework 版本 1.5.1,PHP 版本 5.2.5,在 Windows Server 2003 R2(SP3) 的 IIS6.0 下測試。PHP.ini 的 include_path 已經包含至 Zend Framework 的 library 路徑。
本人的測試檔案夾為:
D:\MyPHP5\ZF_mydemo,裡面包含 App 和 www 2個檔案夾。
D:\MyPHP5\ZF_mydemo\App 下包含 controllers、DB、models、views 檔案夾。
D:\MyPHP5\ZF_mydemo\www 用于儲存 index.php 檔案,所有的請求轉發到這裡。該檔案内容為:
<?php
error_reporting(E_ALL|E_STRICT);
date_default_timezone_set(’Asia/Shanghai’);
//由于 php.ini 配置了Zend Framework 的庫路徑,這裡省略 set_include_path 語句。
include “Zend/Loader.php”;
Zend_Loader::registerAutoload(); //可以用以上(1)和(2)任一個代替
$fc = Zend_Controller_Front::getInstance();
$fc->setControllerDirectory(’../App/controllers’);
$fc->throwExceptions(true);
$fc->setParam(’noViewRenderer’, true);
$fc->setParam(’noErrorHandler’, false);
$fc->dispatch();
?>
需要配置 ISAPI_Rewrite 檔案夾下的 httpd.ini 檔案(預設一般在 C:\Program Files\Helicon\ISAPI_Rewrite),加2條規則:
RewriteRule /zf_mydemo/www/.* /zf_mydemo/www/index.php
RewriteRule /zf_mydemo/www /zf_mydemo/www/index.php
附注:費了這麼大的神探索這個問題,讓 ZF 和 IIS 結親,總有點拉郎配的感覺!其實我個人是不喜歡也不贊成在 IIS 上跑 ZF 的,而 Zend 公司似乎也不願意。是以我們在 Zend 的文檔裡和網際網路上很少能找到在 IIS 上運作 ZF 的資料,操這份閑心的都是一些愛好者和像我這樣的好事者。畢竟 Lamp 才是 PHP 的黃金搭檔,作為技術,我們要讓它們用在最合适的環境下。
但是作為技術人員,有時我真的無法壓制自己的好奇心,在嘗試中,我體驗到了探險家的樂趣:把看似可以實作的事情變成已然實作的結果。 這就是技術人員的好奇、執着(偏執?)、固執己見吧?
本文轉自網眼51CTO部落格,原文連結:http://blog.51cto.com/itwatch/286482,如需轉載請自行聯系原作者