如何确定 FastCGI 是否用于运行 php 脚本

2022-08-30 22:56:43

我有一个托管网站,但我在配置Joomla时遇到问题(在IIS7上运行Joomla + php + mySQL + win server 2008)。我在本地计算机上运行了类似的配置(Joomla + php + mySQL on IIS7 + vista x64),所以我至少能够按照各种教程中所示的有关如何设置的说明进行操作。

托管网站的症状是我无法在Joomla中打开任何SEO设置(甚至不能打开第一个设置“搜索引擎友好URL”)。我得到404(找不到文件)或URL显示正确重写,但它始终是显示的主页内容。我在家用机器上遇到了类似的问题,事实证明这是因为我没有使用FastCGI来托管php,所以我决定在托管网站上进行调查。

无论如何,我注意到在托管站点上托管joomla的目录的web.config文件中有以下行:

<add name="Plesk_Handler_3522909676" path="*.php" verb="*" modules="IsapiModule" scriptProcessor="c:\program files (x86)\parallels\plesk\additional\pleskphp5\php5isapi.dll" resourceType="Either" />

根据过去的经验,我知道php在不运行fastCGI时存在一些问题。我注意到根文件夹中的web.config使用了以下行:

<add name="Plesk_Handler_0286090609" path="*.php" verb="*" modules="CgiModule" scriptProcessor="c:\program files (x86)\parallels\plesk\additional\pleskphp5\php-cgi.exe" resourceType="Either" /> 

我在joomla目录中的web.config中复制了它,并得到了不同的行为......但仍然不起作用。如果我在运行phpInfo()的joomla目录中加载一个.php文件,在Server API下,它显示CGI / FastCGI。这是否肯定了FastCGI正在被使用?为什么Web配置中的处理程序指向module=“CgiModule”而不是module=“FastCgiModule”(我甚至不确定是否存在,但我只是发现提到CgiModule可疑)。

这是一个托管网站,所以据我所知,我无法访问AdplicationHost.config文件...


答案 1

这是一个简单的测试:

  1. 创建一个 phpinfo.php 文件

 <?php phpinfo(); ?> 

内部;

  1. 请求 http://yoursite.com/phpinfo.php/foobar?foo=bar

  2. 检查phpinfo的输出并查找_SERVER[“REQUEST_URI”]。

如果缺少此变量,则使用 CGI。如果变量存在并正确设置为 /phpinfo.php/foobar?foo=bar,则使用 ISAPI 或 FastCGI。查看服务器API输出的顶部附近;它应该设置为ISAPI(这意味着正在使用ISAPI)或CGI / FastCGI(这意味着正在使用FastCGI,因为我们已经排除了CGI)。


答案 2

php_sapi_name() 或 PHP_SAPI,两者都有效。

http://php.net/manual/en/function.php-sapi-name.php

<?php
    if (php_sapi_name() != 'cgi-fcgi'){
        echo 'I knew fastcgi wasn\'t working.';
    }else{
        echo 'Holy crap, something worked for once.';
    }

推荐