PHP5 与 IIS 的集成 (Windows 2003)
正在做“Java 初级”的培训,公司内部。为了说明 MVC,我先讲了 Web 发展,接下来准备从 HTML 讲起,循序渐进的讲到 WebForm/JSF 等,其中一个环节是 Templating 技术。鉴于我对 Java 技术不熟,也没有使用过 Velocity 和 WebMacro,所以我准备使用 phplib 演示。
在配置 PHP 的过程中遇到了几个问题,是前几年没有遇到,或者说没有注意的,今天一并写出来,留个印象吧。
- 安装 PHP 之前,建议认真阅读一下 install.txt 文件。尽管网上已经有很多“经验之谈”,官方的文档仍是最准确、最全面的参考。另外,当我遇到问题时,真正帮我解决问题的,还是靠从头仔细阅读该文件。
- 建议使用手动安装(Manual Installation)模式,这样会加深你对 PHP 的了解。我一直认为:作为程序员,一定要能够自己搭建开发用的环境(两年前,我曾和一个 QQ 的网友,为此事“吵”一次,呵呵;那时候年轻,要是现在一定懒得多说)。
- 在 PHP5 中不建议将 php5ts.dll 和 php.ini 放到 c:\windows 文件夹下,只需设置一下 PATH 路径即可(这个不用我多介绍吧?)。
- IIS 和 PHP 的集成
- 设置 ISAPI Filter,直接引用 php5isapi.dll 文件即可
- 设置 Application Configuration/Mappings,增加对 php 扩展名文件的支持,仍旧使用 php5isapi.dll 文件解析 PHP 请求
- 设置 Web Service Extension 信息,在 Windows 2003 上这项配置是必须的,必须将 php5isapi.dll 设置为 Allow 后 PHP 才能够正常运行
- 如果完成了以上步骤仍然不好用,记得设置 php 所在文件夹的访问权限。我的机器使用 NTFS 分区,设置了 PHP 文件夹的 Everyone 的 Read、Read & Execute、List Folder Contents 功能后好用了。同时我也设置了 IUSR_MACHINE 的相应权限。
- 完成 3 和 5 的操作后,记得要重启系统,切记,切记。 Note: Be sure to reboot after following the steps above to ensure that the PATH changes are applied.
完成以上 6 个步骤后, PHP 就可以正常工作了,只是,此时却不能使用 mysql_connect 函数。也就是说,PHP5 默认不再加载 mysql 驱动,需要我们手动处理。
- 搜索 ; extension=php_mysql.dll 行,删除前面的分号
- 搜索 ; extension=php_pdo_mysql.dll 行,删除前面的分号(此项我没有测试,只是把和 mysql 相关的 DLL 都 Load 了进来。
- 要想让以上“扩展库”好用,必须设置 php.ini 中的 extension_dir
- 如果设置了以上内容,mysql 仍然不好用,一定要使用 phpinfo() 确认 php.ini 是否正确加载。
- php.ini 的加载设置
- 虽然 PHP5 文档中说,不必将 php.ini 放到 c:\windows 文件夹下,但是,只设置了 PATH 信息 PHP 还是找不到该文件。
- 在 Windows 平台上,要在“注册表”中增加以下键值,HKEY_LOCAL_MACHINE\SOFTWARE\PHP\IniFilePath,需要注意的是,要填写 php.ini 所在的文件夹(路径)。
- 最后,在 php.ini 中的 short_open_tag 默认值是 Off,即,写 PHP 程序时必须使用 <?php ?> 标签。
进行上面的 N 个步骤处理后,为使 PHP 配置生效,需要重启 IIS 服务,切记。
附:php.ini is searched in these locations (in order):
* SAPI module specific location (PHPIniDir directive in Apache 2, -c
command line option in CGI and CLI, php_ini parameter in NSAPI,
PHP_INI_PATH environment variable in THTTPD)
* The PHPRC environment variable. Before PHP 5.2.0 this was checked
after the registry key mentioned below.
* As of PHP 5.2.0, the following registry locations are searched in
order: HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x.y.z\IniFilePath,
HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x.y\IniFilePath and
HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x\IniFilePath, where x, y and z
mean the PHP major, minor and release versions.
* HKEY_LOCAL_MACHINE\SOFTWARE\PHP\IniFilePath (Windows Registry
location)
* Current working directory (except CLI)
* The web server's directory (for SAPI modules), or directory of PHP
(otherwise in Windows)
* Windows directory (C:\windows or C:\winnt) (for Windows), or
--with-config-file-path compile time option