You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
266 lines
7.5 KiB
266 lines
7.5 KiB
#!/bin/bash
|
|
# Copyright Broadcom, Inc. All Rights Reserved.
|
|
# SPDX-License-Identifier: APACHE-2.0
|
|
#
|
|
# Bitnami PHP library
|
|
|
|
# shellcheck disable=SC1091
|
|
|
|
# Load Generic Libraries
|
|
. /opt/bitnami/scripts/libfs.sh
|
|
. /opt/bitnami/scripts/libfile.sh
|
|
. /opt/bitnami/scripts/libservice.sh
|
|
. /opt/bitnami/scripts/libvalidations.sh
|
|
. /opt/bitnami/scripts/libwebserver.sh
|
|
|
|
########################
|
|
# Add or modify an entry in the main PHP configuration file (php.ini)
|
|
# Globals:
|
|
# PHP_CONF_FILE
|
|
# Arguments:
|
|
# $1 - Key
|
|
# $2 - Value
|
|
# $3 - File to modify (default: $PHP_CONF_FILE)
|
|
# Returns:
|
|
# None
|
|
#########################
|
|
php_conf_set() {
|
|
local -r key="${1:?key missing}"
|
|
local -r value="${2:?value missing}"
|
|
local -r file="${3:-"$PHP_CONF_FILE"}"
|
|
local pattern="^[; ]*${key}\s*=.*$"
|
|
if [[ "$key" = "extension" || "$key" = "zend_extension" ]]; then
|
|
# The "extension" property works a bit different for PHP, as there is one per module to be included, meaning it is additive unlike other configurations
|
|
# Because of that, we first check if the extension was defined in the file to replace the proper entry
|
|
pattern="^[; ]*${key}\s*=\s*[\"]?${value}(\.so)?[\"]?\s*$"
|
|
fi
|
|
local -r entry="${key} = ${value}"
|
|
if is_file_writable "$file"; then
|
|
# Not using the ini-file tool since it does not play well with php.ini
|
|
if grep -q -E "$pattern" "$file"; then
|
|
replace_in_file "$file" "$pattern" "$entry"
|
|
else
|
|
cat >> "$file" <<< "$entry"
|
|
fi
|
|
else
|
|
warn "The PHP configuration file '${file}' is not writable. The '${key}' option will not be configured."
|
|
fi
|
|
}
|
|
|
|
########################
|
|
# Ensure PHP is initialized
|
|
# Globals:
|
|
# PHP_*
|
|
# Arguments:
|
|
# None
|
|
# Returns:
|
|
# None
|
|
#########################
|
|
php_initialize() {
|
|
# Configure PHP options based on the runtime environment
|
|
info "Configuring PHP options"
|
|
if ! is_dir_empty "$PHP_DEFAULT_CONF_DIR"; then
|
|
# Copy default configuration to php configuration directory
|
|
cp -nr "$PHP_DEFAULT_CONF_DIR"/. "$PHP_CONF_DIR"
|
|
fi
|
|
php_set_runtime_config "$PHP_CONF_FILE"
|
|
|
|
|
|
# PHP-FPM configuration
|
|
! is_empty_value "$PHP_FPM_LISTEN_ADDRESS" && info "Setting PHP-FPM listen option" && php_conf_set "listen" "$PHP_FPM_LISTEN_ADDRESS" "${PHP_CONF_DIR}/php-fpm.d/www.conf"
|
|
|
|
# Avoid exit code of previous commands to affect the result of this function
|
|
true
|
|
}
|
|
|
|
########################
|
|
# Set PHP runtime options, based on user-provided environment variables
|
|
# Globals:
|
|
# PHP_*
|
|
# Arguments:
|
|
# None
|
|
# Returns:
|
|
# None
|
|
#########################
|
|
php_set_runtime_config() {
|
|
local -r conf_file="${1:?missing conf file}"
|
|
|
|
! is_empty_value "$PHP_DATE_TIMEZONE" && info "Setting PHP date.timezone option" && php_conf_set date.timezone "$PHP_DATE_TIMEZONE" "$conf_file"
|
|
! is_empty_value "$PHP_ENABLE_OPCACHE" && info "Setting PHP opcache.enable option" && php_conf_set opcache.enable "$PHP_ENABLE_OPCACHE" "$conf_file"
|
|
! is_empty_value "$PHP_EXPOSE_PHP" && info "Setting PHP expose_php option" && php_conf_set expose_php "$PHP_EXPOSE_PHP" "$conf_file"
|
|
! is_empty_value "$PHP_MAX_EXECUTION_TIME" && info "Setting PHP max_execution_time option" && php_conf_set max_execution_time "$PHP_MAX_EXECUTION_TIME" "$conf_file"
|
|
! is_empty_value "$PHP_MAX_INPUT_TIME" && info "Setting PHP max_input_time option" && php_conf_set max_input_time "$PHP_MAX_INPUT_TIME" "$conf_file"
|
|
! is_empty_value "$PHP_MAX_INPUT_VARS" && info "Setting PHP max_input_vars option" && php_conf_set max_input_vars "$PHP_MAX_INPUT_VARS" "$conf_file"
|
|
! is_empty_value "$PHP_MEMORY_LIMIT" && info "Setting PHP memory_limit option" && php_conf_set memory_limit "$PHP_MEMORY_LIMIT" "$conf_file"
|
|
! is_empty_value "$PHP_POST_MAX_SIZE" && info "Setting PHP post_max_size option" && php_conf_set post_max_size "$PHP_POST_MAX_SIZE" "$conf_file"
|
|
! is_empty_value "$PHP_UPLOAD_MAX_FILESIZE" && info "Setting PHP upload_max_filesize option" && php_conf_set upload_max_filesize "$PHP_UPLOAD_MAX_FILESIZE" "$conf_file"
|
|
! is_empty_value "$PHP_OUTPUT_BUFFERING" && info "Setting PHP output_buffering option" && php_conf_set output_buffering "$PHP_OUTPUT_BUFFERING" "$conf_file"
|
|
|
|
true
|
|
}
|
|
|
|
########################
|
|
# Convert a yes/no value to a PHP boolean
|
|
# Globals:
|
|
# None
|
|
# Arguments:
|
|
# $1 - yes/no value
|
|
# Returns:
|
|
# None
|
|
#########################
|
|
php_convert_to_boolean() {
|
|
local -r value="${1:?missing value}"
|
|
is_boolean_yes "$value" && echo "true" || echo "false"
|
|
}
|
|
|
|
########################
|
|
# Execute/run PHP code and print to stdout
|
|
# Globals:
|
|
# None
|
|
# Stdin:
|
|
# Code to execute
|
|
# Arguments:
|
|
# $1..$n - Input arguments to script
|
|
# Returns:
|
|
# None
|
|
#########################
|
|
php_execute_print_output() {
|
|
local php_cmd
|
|
# Obtain the command specified via stdin
|
|
php_cmd="$(</dev/stdin)"
|
|
debug "Executing PHP code:\n${php_cmd}"
|
|
php -- "$@" <<< "<?php ${php_cmd}"
|
|
}
|
|
|
|
########################
|
|
# Execute/run PHP code
|
|
# Globals:
|
|
# None
|
|
# Stdin:
|
|
# Code to execute
|
|
# Arguments:
|
|
# $1..$n - Input arguments to script
|
|
# Returns:
|
|
# None
|
|
#########################
|
|
php_execute() {
|
|
debug_execute php_execute_print_output "$@"
|
|
}
|
|
|
|
########################
|
|
# Execute/run PHP code and print to stdout
|
|
# Globals:
|
|
# None
|
|
# Stdin:
|
|
# Code to execute
|
|
# Arguments:
|
|
# $1..$n - Input arguments to script
|
|
# Returns:
|
|
# None
|
|
#########################
|
|
php_execute_print_output() {
|
|
local php_cmd
|
|
# Obtain the command specified via stdin
|
|
php_cmd="$(</dev/stdin)"
|
|
debug "Executing PHP code:\n${php_cmd}"
|
|
php -- "$@" <<< "<?php ${php_cmd}"
|
|
}
|
|
|
|
########################
|
|
# Execute/run PHP code
|
|
# Globals:
|
|
# None
|
|
# Stdin:
|
|
# Code to execute
|
|
# Arguments:
|
|
# $1..$n - Input arguments to script
|
|
# Returns:
|
|
# None
|
|
#########################
|
|
php_execute() {
|
|
debug_execute php_execute_print_output "$@"
|
|
}
|
|
|
|
########################
|
|
# Stop PHP-FPM
|
|
# Globals:
|
|
# PHP_FPM_PID_FILE
|
|
# Arguments:
|
|
# $1 - Signal (default: SIGTERM)
|
|
# Returns:
|
|
# None
|
|
#########################
|
|
php_fpm_stop() {
|
|
local -r signal="${1:-}"
|
|
is_php_fpm_not_running && return
|
|
stop_service_using_pid "$PHP_FPM_PID_FILE" "$signal"
|
|
}
|
|
|
|
########################
|
|
# Reload PHP-FPM configuration
|
|
# Globals:
|
|
# PHP_FPM_PID_FILE
|
|
# Arguments:
|
|
# None
|
|
# Returns:
|
|
# None
|
|
#########################
|
|
php_fpm_reload() {
|
|
php_fpm_stop "USR2"
|
|
}
|
|
|
|
########################
|
|
# Check if PHP-FPM is enabled for the current Bitnami installation
|
|
# Globals:
|
|
# None
|
|
# Arguments:
|
|
# None
|
|
# Returns:
|
|
# true if PHP-FPM is enabled, false otherwise
|
|
########################
|
|
is_php_fpm_enabled() {
|
|
if [[ "$(web_server_type)" = "apache" ]]; then
|
|
# If mod_php is enabled, then PHP-FPM is cannot be
|
|
if apachectl -M | grep -q -E "php[0-9]?_module"; then
|
|
false
|
|
else
|
|
true
|
|
fi
|
|
else
|
|
# Assume PHP-FPM is enabled with any other configuration (i.e. NGINX)
|
|
true
|
|
fi
|
|
}
|
|
|
|
########################
|
|
# Check if PHP-FPM is running
|
|
# Globals:
|
|
# PHP_FPM_PID_FILE
|
|
# Arguments:
|
|
# None
|
|
# Returns:
|
|
# true if PHP-FPM is running, false otherwise
|
|
########################
|
|
is_php_fpm_running() {
|
|
local pid
|
|
pid="$(get_pid_from_file "$PHP_FPM_PID_FILE")"
|
|
if [[ -n "$pid" ]]; then
|
|
is_service_running "$pid"
|
|
else
|
|
false
|
|
fi
|
|
}
|
|
|
|
########################
|
|
# Check if PHP-FPM is running
|
|
# Globals:
|
|
# PHP_FPM_PID_FILE
|
|
# Arguments:
|
|
# None
|
|
# Returns:
|
|
# true PHP-FPM is not running, false otherwise
|
|
########################
|
|
is_php_fpm_not_running() {
|
|
! is_php_fpm_running
|
|
}
|