>  기사  >  백엔드 개발  >  IIS에서 FastCGI 모드로 PHP 실행

IIS에서 FastCGI 모드로 PHP 실행

WBOY
WBOY원래의
2016-08-08 09:33:311327검색

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

스크립트의 의미는 다음과 같습니다.

  1. FastCGI에 PHP를 등록합니다.
  2. InstanceMaxRequests는 응용 프로그램 풀 재활용을 설정하는 데 사용됩니다. FastCGI 프로세스 요청 수가 InstanceMaxRequests 값 5000에 도달하고 응용 프로그램 풀이 자동으로 재활용됩니다. 기본값은 1000입니다.
  3. 환경 변수 PHP_FCGI_MAX_REQUESTS가 10000에 도달하면 응용 프로그램 풀이 자동으로 재활용됩니다.
  4. RequestTimeout은 요청에 허용되는 최대 시간인 요청 시간 초과를 설정합니다. FastCGI 프로세스 요청이 이 설정을 초과하면 값은 90초가 됩니다.
  5. ActivityTimeout은 FastCGI 프로세스가 요청한 최대 활성 시간을 지정합니다. 설정된 시간 내에 FastCGI 프로세스와 IIS 간에 통신이 없으면 프로세스가 종료됩니다. 기본값은 70초입니다.

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教程有兴趣的朋友有所帮助。

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.