FastCGI 모드를 사용하여 IIS에서 PHP 실행
PHP5.3의 개선으로 인해 isapi를 통한 원래 IIS 구문 분석 PHP 스크립트는 더 이상 지원되지 않습니다. PHP는 버전 5.3.0부터 Microsoft의 fastcgi 모드를 사용하기 시작합니다. 이는 더욱 발전된 방법이며 더욱 안정적으로 실행됩니다. 이 기사에서는 IIS에서 FastCGI 모드로 PHP를 실행하는 방법을 소개합니다. Windows 2003 + IIS 6.0(Windows 2003과 함께 제공)을 예로 들어보겠습니다.
1단계: 설치 파일 다운로드
1. FastCGI 버전 fcgisetup_1.5_x86_rtw.msi
2. MySQL 버전 mysql-5.5.19-win32.msi
3. PHP 버전 php-5.3.8-nts-Win32-VC9-x86.zip
팁:
1. 여기서는 최신 FastCGI 1.5 버전을 사용합니다. 공식주소
2. Windows에서 MySQL을 설치하려면 .msi 설치 패키지 형식을 선택합니다. mysql-5.5.19-win32.msi를 선택했습니다. 두 번 클릭하고 마법사를 따르면 간단하고 편리합니다.
3. PHP의 경우 php-5.3.8-nts-Win32-VC9-x86.zip 버전을 사용하도록 선택합니다. "vc9"는 IIS용으로 사용자 정의되었습니다. "nts"는 PHP의 FastCGI 설치를 위한 스레드로부터 안전하지 않은 버전입니다.
2단계: 파일 설치
1. 설치하려는 디스크에 폴더를 만듭니다. D 드라이브의 루트 디렉터리에 웹 폴더를 만듭니다. D:웹.
2. Web 폴더 아래에 WWW 폴더를 생성하여 PHP 웹 사이트 프로그램을 저장합니다. D:웹WWW.
3. 다운로드한 php-5.3.8-nts-Win32-VC9-x86.zip을 D:WebPHP 폴더에 압축을 풉니다.
4. MySql 데이터베이스를 설치하고 D:WebMySQL 폴더에 MySQL을 설치합니다. 구체적인 MySQL 설치 프로세스는 MySQL 설치 다이어그램 문서를 참조하세요.
5. IIS용 FastCGI 확장을 설치합니다. 먼저 IIS가 시스템에 설치되어 있는지 확인하십시오. 그런 다음 fcgisetup_1.5_x86_rtw.msi를 두 번 클릭하여 설치합니다. C 드라이브가 Windows 시스템 설치 디스크인 경우 fcgi 관련 파일을 C:Windowssystem32inetsrv 폴더에 복사하고 fcgi 웹 서비스를 활성화합니다. 이번에는 IIS의 "웹 서비스 확장"에 FastCGI Handler가 포함되어 있습니다.
3단계: IIS 구성
1. "제어판" -> "관리 도구" -> "인터넷 정보 서비스"를 클릭하거나 "시작" -> "실행" -> inetmgr.exe를 직접 입력하여 IIS를 엽니다.
2. "웹 사이트"->"오른쪽 클릭-속성"을 클릭하고 속성 대화 상자에서 "홈 디렉터리"->"구성"->"추가"를 클릭합니다.
3. "응용 프로그램 확장 매핑 추가 및 편집" 대화 상자에서 찾아보기를 클릭하여 C:Windowssystem32inetsrv에서 fcgiext.dll을 찾습니다. 확장자는 ".php"라고 쓰고, "Action" 항목에서 "Limit to"를 클릭하고, "GET, POST, HEAD"라고 쓰고, "Script Engine"과 "Confirm 여부 파일 존재 여부" 두 가지 옵션을 체크합니다. 구성을 확인하세요.
4. 웹사이트 속성 상자로 돌아가서 "문서"를 클릭하고 "index.php"를 기본 페이지로 추가하세요. 마지막으로 "확인"을 클릭하세요.
5. "웹사이트"->"오른쪽 클릭-새로 만들기"->"웹사이트"를 클릭하여 새 사이트를 만듭니다. 여기서 포트는 8080으로 설정되어 있으며 웹사이트 홈 디렉터리 경로는 D:WebWWW입니다.
4단계: FastCGI 구성
FastCGI를 설치하면 C:Windowssystem32inetsrv 폴더에 다음 세 가지 중요한 파일이 있습니다.
fcgiext.dll - fastcgi 핸들 동적 링크 라이브러리입니다. fastcgi와 통신하는 프로그램에 대한 요청을 처리할 수 있습니다.
fcgiext.ini - fastcgi 프로세스로 확장된 파일 매핑이 포함된 구성 파일입니다. 또한 fastcgi 프로세스 풀의 구성도 포함되어 있습니다.
fcgiconfig.js - 이 확장은 fastgci를 구성합니다. 이 스크립트는 fcgiext.ini 파일을 업데이트하고 iis 메타베이스를 수정하며 필요한 경우 웹 서비스 응용 프로그램 풀을 재사용합니다.
여기서 FastCGI를 구성하는 방법에는 두 가지가 있는데, 하나는 명령줄을 통해 구성하는 것이고, 다른 하나는 fcgiext.ini 파일을 직접 수정하는 것입니다.
1. 명령줄을 통한 구성
명령줄을 열고 주소를 C:Windowssystem32inetsrv로 변환한 후 다음 명령을 입력합니다.
cscript fcgiconfig.js -add -section:"PHP" -extension:php -path:"D:\Web\php\php-cgi.exe" cscript fcgiconfig.js -set -section:"PHP" -InstanceMaxRequests:5000 cscript fcgiconfig.js -set -section:"PHP" -EnvironmentVars:PHP_FCGI_MAX_REQUESTS:10000 cscript fcgiconfig.js -set -section:"PHP" -RequestTimeout:360 cscript fcgiconfig.js -set -section:"PHP" -ActivityTimeout:120
스크립트의 의미는 다음과 같습니다.
2. fcgiext.ini를 직접 구성
C:windowssystem32inetsrvfcgiext.ini 파일을 열고 추가합니다.
[Types] php=PHP [PHP] ExePath=D:\Web\php\php-cgi.exe InstanceMaxRequests=5000 EnvironmentVars=PHP_FCGI_MAX_REQUESTS:10000 RequestTimeout=360 ActivityTimeout=120
팁: "php"는 확장을 나타내고 "PHP"는 "[PHP]"로 정의된 구성 섹션 이름을 나타냅니다.
위 코드를 fcgiext.ini 끝에 복사하여 저장하세요.
5단계: PHP 구성
打开PHP安装目录,即D:\Web\PHP,我们可以看到目录下有两个这样的文件 php.ini-development 和 php.ini-production,第一个是开发使用的配置文件,第二个是生产环境的配置,因为我们是在本机做开发,所以选择前者。将php.ini-development复制一份到同目录下,并改名为 php.ini。这个php.ini 就是当前使用的配置文件,以下几步都是在修改这个php.ini文件的内容。 另外要注意的是修改php.ini文件后需重新启动IIS服务,新设置才会生效。参见文档:如何重启IIS服务的方法
1. 设置关于FastCGI部分
找到下面几行,那前面的引号“;” 去掉,参数设置为如下
fastcgi.impersonate = 1 cgi.fix_pathinfo= 1 cgi.force_redirect = 0
它们的说明请参考cgi.force-redirect;cgi.fix-pathinfo;fastcgi.impersonate。
2. 指定PHP扩展库的存放目录
在Windows下PHP的扩展库通常以 DLL 形式存放在PHP的ext目录中。
使用文本工具打开php.ini文件,查找extension_dir = "ext",也就是在 On windows 下面那一行。把它前面的分号“;”去除掉,改为如下:
extension_dir = "D:/Web/PHP/ext"
extension_dir 表示PHP扩展库的具体目录,以便调用相应的DLL文件。
3. 开启相应的扩展库
默认情况下许多PHP的扩展库都是关闭的,比如默认PHP不支持连接Mysql数据库,需开启相应的扩展库。
这里我们开启一些常用的扩展库。
查找 ; Windows Extensions(大概在941行),在它的下面是extension列表。
找到如下扩展:
;extension=php_curl.dll ;extension=php_gd2.dll ;extension=php_mbstring.dll ;extension=php_exif.dll ;extension=php_mysql.dll ;extension=php_mysqli.dll ;extension=php_pdo_mysql.dll ;extension=php_pdo_odbc.dll ;extension=php_sockets.dll ;extension=php_xmlrpc.dll ;extension=php_xsl.dll
把以上extension 前面的分号 “;” 去掉。如果你希望加载其它扩展模块,方法相同,只要去掉前面的分号即可。
提示1:Exif 扩展是用来显示图片的 exif 信息的,因为该扩展需要 mbstring.dll 支持,所以必须将 extension=php_exif.dll 这一行写到extension=php_mbstring.dll 的后面。
提示2:如果PHP自带的扩展库不能满足你的需要,你可以去 pecl.php.net 查找并下载你需要的库。windows用户可以去 pecl4win.php.net 或者 http://downloads.php.net/pierre/ 下载已经编译好的DLL文件,也可以去http://museum.php.net/php5/ 载PECL集合压缩包。
提示3:很多人在找php_zip.dll,其实从php5.3开始已经集成了zip扩展,你可以用 找到zip扩展的说明。
4. 让PHP支持短标签
在 php.ini 配置文件查找 short_open_tag = Off (大概在266行)把它修改成:short_open_tag = On 让其支持短标签。
php的代码一般包含在的标签内,设置 short_open_tag = On 之后,可以写成更简洁的形式: .... ?>。
5. 配置PHP的Session功能
在使用session功能时,我们必须配置session文件在服务器上的保存目录。我们需要为session建立一个可读写的目录,这个目录最好独立于网站目录之外。
这里把目录上建在了D:\Web\sessiontmp,然后在 php.ini 配置文件中找 ;session.save_path = "/tmp" (大概在1467行),去掉前面的分号“;” ,改为如下:
session.save_path = "D:/Web/sessiontmp"
6. 配置PHP的文件上传功能
同session一样,在使用PHP文件上传功能时,我们必须要指定一个临时文件夹以完成文件上传功能,否则文件上传功能会失败。
我们建立一个可读写的目录文件夹 D:\Web\fileuploadtmp,然后在 php.ini 配置文件中找到 ;upload_tmp_dir = (大概875行),修改为:
upload_tmp_dir = "D:/Web/fileuploadtmp"
PHP默认上传文件大小不超过2M,要想上传大于2M的文件,请参考文档 配置php.ini实现文件上传功能。
7. 设置时区
在 php.ini 配置文件查找 ;date.timezone = ,去掉前面的分号“;” 改为如下:
date.timezone = PRC
date.timezone是PHP5.1开始新增加的配置参数,用来设置时区。默认date.timezone是被注释掉的,也就是默认时区是UTC格林威治标准时间。
我们这里改为 date.timezone = PRC(PRC,People’s Republic of China,中华人民共和国),也就是日期使用中国的时区。这样可以解决时间相差八小时的问题。
第六步:测试
将如下代码保存为index.php文件,放到D:\Web\WWW目录下面。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>测试服务器</title> </head> <body> <div> <?php $link=mysql_connect("localhost","<em>你的mysql管理账号</em>","<em>你的mysql管理密码</em>"); if(!$link) echo "MySQL数据库 连接失败!"; else echo "MySQL数据库 连接成功!"; mysql_close(); ?> </div> <br/> <?php phpinfo(); ?> </body> </html>
然后在浏览器地址栏输入“http://localhost:8080/index.php”。结果如下图所示:
以上就介绍了IIS下使用FastCGI模式运行PHP,包括了FastCGI模式方面的内容,希望对PHP教程有兴趣的朋友有所帮助。