Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to know for sure if FastCGI is being used to run php scripts

I have a hosted site and I'm having trouble configuring Joomla (running Joomla + php + mySQL on IIS7 + win server 2008). I have a similar configuration running on a local machine (Joomla + php + mySQL on IIS7 + vista x64), so I was at least able to follow instructions showed in various tutorials on how to set this up.

This symptom with the hosted site is that I can't turn on any SEO settings in Joomla (not even the first setting, "Search Engine Friendly URLs"). I get either 404 (file not found) or the URL appears correctly rewritten but it's always the home page's content that is displayed. I had a similar issue on my home machine and it turns out to have been because I wasn't using FastCGI to host php, so I decided to investigate that on the hosted site.

Anyway, I noticed in the web.config file of the directory hosting joomla on the hosted site the following line:

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

From past experience, I know that php has some issues when not running under fastCGI. I noticed the web.config in the root folder used the following line instead:

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

I copied that in the web.config in the joomla directory, and got different behavior... but still not working. If I load a .php file in the joomla directory that runs phpInfo(), under Server API it says CGI/FastCGI . Is that positive confirmation that FastCGI is being used? Why does the handler in the web config point to modules="CgiModule" instead of modules="FastCgiModule" (I'm not even sure that exists, but I just find the mention of CgiModule suspicious).

It's a hosted site, so as far as I know I don't have access to ApplicationHost.config file...

like image 543
Jimmy Avatar asked Mar 04 '09 02:03

Jimmy


3 Answers

Here's a simple test:

  1. Create a phpinfo.php file with

 <?php phpinfo(); ?> 

inside;

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

  2. Check the output of phpinfo and look for _SERVER["REQUEST_URI"].

If this variable is missing, then CGI is used. If the variable is present and correctly set to /phpinfo.php/foobar?foo=bar, then either ISAPI or FastCGI is used. Look near the top of the output for Server API; it should be set to either ISAPI (which means ISAPI is being used) or CGI/FastCGI (which means FastCGI is being used, since we already ruled out CGI).

like image 60
Jimmy Avatar answered Oct 05 '22 22:10

Jimmy


php_sapi_name() or PHP_SAPI, both work.

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.';
    }
like image 21
Gregor Macgregor Avatar answered Oct 05 '22 23:10

Gregor Macgregor


You can use (on centos) apachectl -M, you'll show what modules are enabled:

apachectl -M:

file_cache_module (shared)
mem_cache_module (shared)
version_module (shared)
fastcgi_module (shared)
like image 38
damarsan Avatar answered Oct 06 '22 00:10

damarsan