First speakers announced for TYPO3 Camp London
Join us on Tuesday, 7 October 2025, for a day of talks and networking in the capital of the United Kingdom.
Remove mod_php4 / mod_php5 if not already done
# a2dismod php4
# a2dismod php5
Enable mod_actions and mod_fcgid
# a2enmod actions
# a2enmod fcgid
Raise the communication timeout (= maximum execution time) for FCGI applications in /etc/apache2/mods-enabled/fcgid.conf by adding the “IPCCommTimeout” directive
<IfModule mod_fcgid.c>
AddHandler fcgid-script .fcgi
SocketPath /var/lib/apache2/fcgid/sock
# Communication timeout: Default value is 20 seconds
IPCCommTimeout 60
# Connection timeout: Default value is 3 seconds
#IPCConnectTimeout 3
</IfModule>
Create a new file /etc/apache2/conf.d/php-fcgid.conf:
<IfModule !mod_php4.c>
<IfModule !mod_php4_filter.c>
<IfModule !mod_php5.c>
<IfModule !mod_php5_filter.c>
<IfModule !mod_php5_hooks.c>
<IfModule mod_actions.c>
<IfModule mod_alias.c>
<IfModule mod_mime.c>
<IfModule mod_fcgid.c>
# Path to php.ini – defaults to /etc/phpX/cgi
DefaultInitEnv PHPRC=/etc/php5/cgi
# Number of PHP childs that will be launched. Leave undefined to let PHP decide.
#DefaultInitEnv PHP_FCGI_CHILDREN 3
# Maximum requests before a process is stopped and a new one is launched
#DefaultInitEnv PHP_FCGI_MAX_REQUESTS 5000
# Define a new handler "php-fcgi" for ".php" files, plus the action that must follow
AddHandler php-fcgi .php
Action php-fcgi /fcgi-bin/php-fcgi-wrapper
# Define the MIME-Type for ".php" files
AddType application/x-httpd-php .php
# Define alias "/fcgi-bin/". The action above is using this value, which means that
# you could run another "php5-cgi" command by just changing this alias
Alias /fcgi-bin/ /var/www/fcgi-bin.d/php5-default/
# Turn on the fcgid-script handler for all files within the alias "/fcgi-bin/"
<Location /fcgi-bin/>
SetHandler fcgid-script
Options +ExecCGI
</Location>
</IfModule>
</IfModule>
</IfModule>
</IfModule>
</IfModule>
</IfModule>
</IfModule>
</IfModule>
</IfModule>
Next, create the directory which is chosen by the alias, and put in a symlink to the php5-cgi binary
# mkdir /var/www/fcgi-bin.d/php5-default
# ln -s /usr/bin/php5-cgi /var/www/fcgi-bin.d/php5-default/php-fcgi-wrapper
Finally, restart Apache
# /etc/init.d/apache2 restart
It is also possible to run different versions of PHP, even with different users.
Enable mod_suexec
# a2enmod suexec
Create a new user
# adduser <username>
For every instance of PHP, create a new subdirectory in /var/www/fcgi-bin.d/
# mkdir /var/www/fcgi-bin.d/php<version>-<username>/
Instead of creating a symlink, this time you need to add a new file “php-fcgi-wrapper” inside this directory
#!/bin/sh
# Wrapper for PHP-fcgi
# This wrapper can be used to define settings before launching the PHP-fcgi binary.
# Define the path to php.ini. This defaults to /etc/phpX/cgi.
#export PHPRC=/var/www/fcgi-bin.d/php5-web01/phprc
#export PHPRC=/etc/php5/cgi
# Define the number of PHP childs that will be launched. Leave undefined to let PHP decide.
#export PHP_FCGI_CHILDREN=3
# Maximum requests before a process is stopped and a new one is launched
#export PHP_FCGI_MAX_REQUESTS=5000
# Launch the PHP CGI binary
# This can be any other version of PHP which is compiled with FCGI support.
exec /usr/bin/php5-cgi
Make this script executable and change the user appropriately
# chmod a+x /var/www/fcgi-bin.d/php<version>-<username>/php-fcgi-wrapper
# chown <user>:<group> /var/www/fcgi-bin.d/php<version>-<username>/php-fcgi-wrapper
Modify the Apache configuration, e.g. in /etc/apache2/sites-enabled/web01
<VirtualHost *:80>
Servername web01.myserver.com
DocumentRoot /var/www/websites/web01/
SuexecUserGroup <user> <group>
Action php-fcgi /fcgi-bin/php-fcgi-wrapper
Alias /fcgi-bin/ /var/www/fcgi-bin.d/php<version>-<username>/
</VirtualHost>
Notice: It is important that user and group are owned by the same user and group as defined for the wrapper script above.
Restart Apache
# /etc/init.d/apache2 restart
Further reading
[1] Website of mod_fcgid: <link http: fastcgi.coremail.cn>fastcgi.coremail.cn
FAQ
How fast is it?
Compared to mod_php5 the speed seems to be almost equal, probably just a little bit slower.
Can I turn off the PHP parser for a specific directory?
Of course! You can simply disable the parser for directories. This is very useful for example to use WebDAV for editing PHP files. Using mod_php5 these files would be sent as plain HTML output:
<Location /dav/>
RemoveHandler .php
</Location>
ChangeLog
Changes in version 1.0
Initial version
About the author
Michael Stucki is the leader of the TYPO3 core team. He lives close to Basel / Switzerland. When he is not developing, he likes doing sports and travel around. Michael is working for snowflake productions, where this document was initially written as a help guide for their customers.
Join us on Tuesday, 7 October 2025, for a day of talks and networking in the capital of the United Kingdom.
I'm happy to be back with another report on one of our recent initiatives. Over the past few weeks, we have focused on creating an interactive…
Optimizing website structures and content relevance are crucial elements for an optimal user experience and good SEO. In this article, I will share my…
TYPO3 showcased its CMS for content-driven commerce at Webwinkel Vakdagen 2025—scalable, flexible, and perfect for multi-market ecommerce.
Starting May 1, 2025, TYPO3 v10.4 enters its third and final year of Extended Long-Term Support (ELTS) if you are not an official TYPO3 Partner. If…
CloudFest is the world's leading conference for the cloud and internet infrastructure industries. It is an event where professionals worldwide come…