Difference between revisions of "Running PHP Scripts on the CS Webservers"

Line 14: Line 14:
 
Most documentation on the web describes how to use the [https://httpd.apache.org/docs/2.2/mod/mod_mime.html#AddType AddType] Apache directive in your <tt>'''.htaccess'''</tt> file for this, and that directive usually looks like this:
 
Most documentation on the web describes how to use the [https://httpd.apache.org/docs/2.2/mod/mod_mime.html#AddType AddType] Apache directive in your <tt>'''.htaccess'''</tt> file for this, and that directive usually looks like this:
  
<pre style="background-color: #cb4b16;">AddType application/x-httpd-php .html</pre>
+
<pre class="bad">AddType application/x-httpd-php .html</pre>
  
 
''However,'' for our http://www.cs.jhu.edu website, ''instead of AddType,'' you will need to use the [https://httpd.apache.org/docs/2.2/mod/mod_mime.html#addhandler AddHandler] directive to process the file as a FastCGI script and give the ''full path'' to your <tt>'''php-cgi'''</tt> script to run it.  For example:
 
''However,'' for our http://www.cs.jhu.edu website, ''instead of AddType,'' you will need to use the [https://httpd.apache.org/docs/2.2/mod/mod_mime.html#addhandler AddHandler] directive to process the file as a FastCGI script and give the ''full path'' to your <tt>'''php-cgi'''</tt> script to run it.  For example:
  
<pre style="background-color: #859900;">AddHandler fcgid-script .html
+
<pre class="good">AddHandler fcgid-script .html
 
FcgidWrapper /users/YOUR-ACCOUNT-HERE/public_html/cgi-bin/php-cgi .html</pre>
 
FcgidWrapper /users/YOUR-ACCOUNT-HERE/public_html/cgi-bin/php-cgi .html</pre>
  
Line 25: Line 25:
 
Another way to force a particular file or files to be treated as PHP is to use a [https://httpd.apache.org/docs/2.2/mod/core.html#files <Files>] or [https://httpd.apache.org/docs/2.2/mod/core.html#directory <Directory>] section in your <tt>'''.htaccess'''</tt> file to target those files specifically.  The customary documentation on the web uses the [https://httpd.apache.org/docs/2.2/mod/core.html#ForceType ForceType] directive for this:
 
Another way to force a particular file or files to be treated as PHP is to use a [https://httpd.apache.org/docs/2.2/mod/core.html#files <Files>] or [https://httpd.apache.org/docs/2.2/mod/core.html#directory <Directory>] section in your <tt>'''.htaccess'''</tt> file to target those files specifically.  The customary documentation on the web uses the [https://httpd.apache.org/docs/2.2/mod/core.html#ForceType ForceType] directive for this:
  
<pre style="background-color: #cb4b16;"><Files quux.foo>
+
<pre class="bad"><Files quux.foo>
 
   ForceType application/x-httpd-php
 
   ForceType application/x-httpd-php
 
</Files></pre>
 
</Files></pre>
Line 31: Line 31:
 
''However,'' for our http://www.cs.jhu.edu website, ''instead of ForceType,'' you have to use the [https://httpd.apache.org/docs/2.0/mod/core.html#sethandler SetHandler] directive along with the ''full path'' to your <tt>'''php-cgi'''</tt> script.  For example:
 
''However,'' for our http://www.cs.jhu.edu website, ''instead of ForceType,'' you have to use the [https://httpd.apache.org/docs/2.0/mod/core.html#sethandler SetHandler] directive along with the ''full path'' to your <tt>'''php-cgi'''</tt> script.  For example:
  
<pre style="background-color: #859900;"><Files quux.foo>
+
<pre class="good"><Files quux.foo>
 
   SetHandler fcgid-script
 
   SetHandler fcgid-script
 
   FcgidWrapper /users/YOUR-ACCOUNT-HERE/public_html/cgi-bin/php-cgi
 
   FcgidWrapper /users/YOUR-ACCOUNT-HERE/public_html/cgi-bin/php-cgi

Revision as of 20:04, 10 October 2013

The multi-user nature of the CS www.cs.jhu.edu website requires that we run PHP in a slightly uncommon way. We run PHP as a CGI using Apache's mod_fcgid FastCGI module. That means that some common ways to use PHP need to be done slightly differently in our environment. These differences are documented below.

Files in Your Home Directory

There is a new php-cgi script in your ~/public_html/cgi-bin directory. This is the script that runs the PHP CGI interpreter for you. Apache is told about this script by the FcgidWrapper directive in your ~/public_html/.htaccess file.

Changing either of these files should be done with care, as doing so could prevent PHP from working for your webpages.

Apache AddType Directives

The CS www.cs.jhu.edu webserver treats any file that has a .php extension as a PHP script. In some cases, you might want files with other extensions to also be treated as PHP scripts.

Most documentation on the web describes how to use the AddType Apache directive in your .htaccess file for this, and that directive usually looks like this:

AddType application/x-httpd-php .html

However, for our http://www.cs.jhu.edu website, instead of AddType, you will need to use the AddHandler directive to process the file as a FastCGI script and give the full path to your php-cgi script to run it. For example:

AddHandler fcgid-script .html
FcgidWrapper /users/YOUR-ACCOUNT-HERE/public_html/cgi-bin/php-cgi .html

Apache ForceType Directives

Another way to force a particular file or files to be treated as PHP is to use a <Files> or <Directory> section in your .htaccess file to target those files specifically. The customary documentation on the web uses the ForceType directive for this:

<Files quux.foo>
   ForceType application/x-httpd-php
</Files>

However, for our http://www.cs.jhu.edu website, instead of ForceType, you have to use the SetHandler directive along with the full path to your php-cgi script. For example:

<Files quux.foo>
  SetHandler fcgid-script
  FcgidWrapper /users/YOUR-ACCOUNT-HERE/public_html/cgi-bin/php-cgi
</Files>