Report From the eGovernance Conference in Tartu, Estonia
TYPO3 attended the conference for the second time and we made many new connections at our popular booth. Our focus on governance, digital sovereignty,…
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.
TYPO3 attended the conference for the second time and we made many new connections at our popular booth. Our focus on governance, digital sovereignty,…
Eike Starkmann shares insights from the first in-person sprint of the Best Practices team.
The Open Website Alliance and its initiative to strengthen collaboration between free and open source content management systems has generated much…
We have come a long way and there is still a lot to do. Content Blocks are on their way to being integrated with TYPO3 v13 and mark a significant…
The version 12.4.19 of the TYPO3 Enterprise Content Management System has just been released.
The submission deadline for the TYPO3 Awards 2024 is just around the corner! With only one month left until 15 September, now is the time to submit…