This Month in TYPO3: January, 2025 [Issue #21]
Welcome to the January 2025 edition of our TYPO3 roundup! With the new year in full swing, we’re seeing important security releases, fresh community…
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.
Welcome to the January 2025 edition of our TYPO3 roundup! With the new year in full swing, we’re seeing important security releases, fresh community…
The TYPO3 Documentation Team has enhanced the resources available to new integrators and developers, delivering a completely revamped Getting Started…
Whether you're new to TYPO3 or perhaps you’ve used it in the past, this short guide is the ideal starting point. In this guide we’re going to…
The TYPO3 Association has officially launched the second community budget process of 2025.
TYPO3 v14 LTS is scheduled for release at the end of April 2026. The Product Strategy Group has plans for ground-breaking changes to our favorite CMS.…
The TYPO3 Documentation Team made significant strides in 2024, achieving groundbreaking advancements and key improvements. Let’s explore the…