--- /dev/null
+<IfDefine PHP>
+ # The mod_php.so symlink is controlled by
+ # eselect-php. However, the module name changed from
+ # php5_module to php7_module so we can't blindly load whatever
+ # is there. Instead we let eselect-php manage a small
+ # configuration file that loads the appropriate module.
+ Include "/var/lib/eselect-php/mod_php.conf"
+
+ # Tell apache that mod_php should handle PHP files.
+ #
+ # NOTE: Avoiding AddHandler/AddType for security (bug
+ # #538822). Please read the related news item!
+ <FilesMatch "\.(php|php[57]|phtml)$">
+ SetHandler application/x-httpd-php
+ </FilesMatch>
+
+ # PHP source files which are meant to be displayed as
+ # syntax-highlighted source code.
+ <FilesMatch "\.phps$">
+ SetHandler application/x-httpd-php-source
+ </FilesMatch>
+
+ DirectoryIndex index.php index.phtml
+</IfDefine>
-#!/sbin/runscript
+#!/sbin/openrc-run
+
+extra_started_commands="reload"
+extra_commands="configtest"
set_phpvars() {
- PHPSLOT=${SVCNAME#php-fpm-}
+ PHPSLOT="${SVCNAME#php-fpm-}"
PHP_FPM_PID="/run/php-fpm-${PHPSLOT}.pid"
- if [ ${PHPSLOT} = 'php-fpm' ] ; then
+ if [ "${PHPSLOT}" = "php-fpm" ] ; then
PHPSLOT="$(eselect php show fpm)"
PHP_FPM_PID="/run/php-fpm.pid"
fi
PHP_FPM_CONF="/etc/php/fpm-${PHPSLOT}/php-fpm.conf"
-}
-
-extra_commands="depend"
-extra_started_commands="reload"
-
-depend() {
- need net
- use apache2 lighttpd nginx
+ PHP_FPM_BIN="/usr/lib/${PHPSLOT}/bin/php-fpm"
}
start() {
+ # If configtest fails, we don't have to sit around for five
+ # seconds waiting for a pid to show up.
+ configtest || return $?
ebegin "Starting PHP FastCGI Process Manager"
set_phpvars
- start-stop-daemon --start --pidfile ${PHP_FPM_PID} --exec \
- /usr/lib/${PHPSLOT}/bin/php-fpm -- -y "${PHP_FPM_CONF}" -g "${PHP_FPM_PID}"
+ start-stop-daemon --start --pidfile "${PHP_FPM_PID}" \
+ --exec "${PHP_FPM_BIN}" \
+ -- \
+ --fpm-config "${PHP_FPM_CONF}" \
+ --pid "${PHP_FPM_PID}"
local i=0
local timeout=5
- while [ ! -f ${PHP_FPM_PID} ] && [ $i -le $timeout ]; do
+ while [ ! -f "${PHP_FPM_PID}" ] && [ $i -le $timeout ]; do
sleep 1
i=$(($i + 1))
done
-
+
[ $timeout -gt $i ]
eend $?
}
stop() {
ebegin "Stopping PHP FastCGI Process Manager"
set_phpvars
- start-stop-daemon --signal QUIT --stop --exec /usr/lib/${PHPSLOT}/bin/php-fpm --pidfile ${PHP_FPM_PID}
+ start-stop-daemon --signal QUIT \
+ --stop \
+ --exec "${PHP_FPM_BIN}" \
+ --pidfile "${PHP_FPM_PID}"
eend $?
}
reload() {
+ configtest || return $?
ebegin "Reloading PHP FastCGI Process Manager"
set_phpvars
- [ -f ${PHP_FPM_PID} ] && kill -USR2 $(cat ${PHP_FPM_PID})
+ [ -f "${PHP_FPM_PID}" ] && kill -USR2 $(cat "${PHP_FPM_PID}")
eend $?
}
+
+configtest() {
+ ebegin "Testing PHP FastCGI Process Manager configuration"
+ set_phpvars
+ # Hide the "test is successful" message (which goes to stderr) if
+ # the test passed, but show the entire output if the test failed
+ # because it may contain hints about the problem.
+ OUTPUT=$( "${PHP_FPM_BIN}" --fpm-config "${PHP_FPM_CONF}" --test 2>&1 )
+
+ # Save this so `echo` doesn't clobber it.
+ local exit_code=$?
+ [ $exit_code -ne 0 ] && echo "${OUTPUT}" >&2
+ eend $exit_code
+}