Skip to content
View in the app

A better way to browse. Learn more.

AlphaGNU

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Long-awaited CWP PHP 8.4 & 8.5 — Finally on Test!

Featured Replies

After a long wait, PHP 8.4 and PHP 8.5 are finally available for testing on CWP (Control Web Panel)! 🎉

I've started testing both versions to check their installation, compatibility, stability, PHP extensions, and overall performance in a real CWP environment.

This is still a testing phase, so I'm checking for any issues before considering them ready for production use.

I'll be sharing my findings, installation steps, compatibility results, and any issues I encounter along the way.

PHP 8.4 & 8.5 on CWP — the testing begins! 🔧🐘

Stay tuned for the results.

image.png

@Sandeep B. Hello, here is the latest working EL9 script for PHP 8.5 FPM for AlmaLinux 9.x

#!/bin/bash

# Usage: bash /root/build-php-fpm85-el9.sh 2>&1 | tee /root/php85-build.log
# External modules:
# /usr/local/cwpsrv/htdocs/resources/conf/el9/php-fpm_selector/external_modules/8.5
set -euo pipefail
set -x

# --- Basic variables ---
PHPMAJOR="85"                  # php-fpm85
PHPVER="8.5.9"                # PHP version
FPMDIR="/opt/alt/php-fpm${PHPMAJOR}"
CONFBASE="/usr/local/cwp/.conf/php-fpm_conf"

arch=$(uname -m)
if [[ "$arch" == "x86_64" ]]; then
    platform="x86-64"
    libdir="/usr/lib64"
else
    platform="x86"
    libdir="/usr/lib"
fi

# --- Packages for Build (EL9) ---
dnf -y install \
  krb5-devel glibc-common gnutls-devel \
  libargon2 libargon2-devel libbsd-devel \
  perl libzip libzip-devel pcre2 pcre2-devel \
  libavif libavif-devel \
  uw-imap-devel \
  openssl-devel

# If there is any old CWP OpenSSL hack left, don't use it.:
if [ -d /usr/local/opensslso ]; then
  echo "WARN: /usr/local/opensslso exists, but we DO NOT USE for compiling PHP (OpenSSL 1.1 hack)."
fi

# --- Force OpenSSL 3.x ---
export PKG_CONFIG_PATH=/usr/lib64/pkgconfig
export OPENSSL_CFLAGS="-I/usr/include"
export OPENSSL_LIBS="-L/usr/lib64"
export LDFLAGS="-lssl -lcrypto"

# --- CWP pre-conf, if exists (e.g.: pcre2, & other libs) ---
if [ -e "${CONFBASE}/php${PHPMAJOR}_pre.conf" ]; then
    bash "${CONFBASE}/php${PHPMAJOR}_pre.conf"
fi

# --- PHP SOURCE DOWNLOAD CHECK: CWP CDN → OFFICIAL php.net → GitHub fallback ---
CWP_URL="http://static.cdn-cwp.com/files/php/php-${PHPVER}.tar.gz"
PHPNET_URL="https://www.php.net/distributions/php-${PHPVER}.tar.gz"
GITHUB_URL="https://codeload.github.com/php/php-src/tar.gz/refs/tags/php-${PHPVER}"

# Function: check HTTP 200 + verify tar.gz content
check_and_verify() {
    local url="$1"
    local testfile="/tmp/php-test-${PHPVER}.tar.gz"

    echo "Checking: $url"

    # First check HTTP status code
    if ! curl -I -L -s "$url" | grep -q "200"; then
        echo "  → HTTP check failed"
        return 1
    fi

    # Download temporary test file
    if ! wget -q "$url" -O "$testfile"; then
        echo "  → Download failed"
        return 1
    fi

    # Validate MIME type of tar.gz
    if file "$testfile" | grep -qiE "gzip compressed data|tar archive"; then
        rm -f "$testfile"
        echo "  → Valid TAR.GZ"
        return 0
    fi

    echo "  → Invalid TAR.GZ (HTML or wrong file)"
    rm -f "$testfile"
    return 1
}

# Check sources in order (CWP → php.net → GitHub)
if check_and_verify "$CWP_URL"; then
    PHPSOURCE="$CWP_URL"
elif check_and_verify "$PHPNET_URL"; then
    PHPSOURCE="$PHPNET_URL"
elif check_and_verify "$GITHUB_URL"; then
    PHPSOURCE="$GITHUB_URL"
else
    echo "ERROR: Could not download a valid PHP source for version ${PHPVER}"
    exit 1
fi

echo "Using source: $PHPSOURCE"

# --- Build directory ---
rm -rf /usr/local/src/php-build
mkdir -p /usr/local/src/php-build
cd /usr/local/src/php-build

wget -q "${PHPSOURCE}" -O "php-${PHPVER}.tar.gz"

tar -xzf "php-${PHPVER}.tar.gz"
cd "php-${PHPVER}"

# --- Configure: CWP's own php85.conf, but already wired to OpenSSL 3.x from env ---
if [ ! -x "${CONFBASE}/php${PHPMAJOR}.conf" ]; then
    chmod +x "${CONFBASE}/php${PHPMAJOR}.conf" 2>/dev/null || true
fi

# PHP 8.5 no longer accepts several legacy configure flags that CWP may keep
# in an already generated php85.conf.
sed -i -E \
    -e '/^[[:space:]]*--with-pspell(=[^[:space:]]*)?[[:space:]]*\\?[[:space:]]*$/d' \
    -e '/^[[:space:]]*--with-zlib-dir=[^[:space:]]*[[:space:]]*\\?[[:space:]]*$/d' \
    -e '/^[[:space:]]*--with-kerberos(=[^[:space:]]*)?[[:space:]]*\\?[[:space:]]*$/d' \
    -e '/^[[:space:]]*--with-imap-ssl(=[^[:space:]]*)?[[:space:]]*\\?[[:space:]]*$/d' \
    -e '/^[[:space:]]*--with-imap(=[^[:space:]]*)?[[:space:]]*\\?[[:space:]]*$/d' \
    -e '/^[[:space:]]*--enable-opcache[[:space:]]*\\?[[:space:]]*$/d' \
    -e 's/[[:space:]]--with-pspell(=[^[:space:]]*)?//g' \
    -e 's/[[:space:]]--with-zlib-dir=[^[:space:]]*//g' \
    -e 's/[[:space:]]--with-kerberos(=[^[:space:]]*)?//g' \
    -e 's/[[:space:]]--with-imap-ssl(=[^[:space:]]*)?//g' \
    -e 's/[[:space:]]--with-imap(=[^[:space:]]*)?//g' \
    -e 's/[[:space:]]--enable-opcache//g' \
    "${CONFBASE}/php${PHPMAJOR}.conf"

# IMPORTANT: LDFLAGS + PKG_CONFIG_PATH already exported
bash "${CONFBASE}/php${PHPMAJOR}.conf"

# --- Compiling ---
if command -v nproc >/dev/null 2>&1; then
    make -j"$(nproc)"
else
    make
fi

make install

# --- PHP.ini + FPM scaffolding ---
mkdir -p "${FPMDIR}/usr/php/php.d"
mkdir -p "${FPMDIR}/usr/var/sockets"
mkdir -p "${FPMDIR}/usr/etc/php-fpm.d"
mkdir -p "${FPMDIR}/usr/etc/php-fpm.d/users"

rsync php.ini-production "${FPMDIR}/usr/php/php.ini"

sed -i 's/^short_open_tag.*/short_open_tag = On/' "${FPMDIR}/usr/php/php.ini"
sed -i 's/^;cgi.fix_pathinfo=.*/cgi.fix_pathinfo=1/' "${FPMDIR}/usr/php/php.ini"
sed -i 's/.*mail.add_x_header.*/mail.add_x_header = On/' "${FPMDIR}/usr/php/php.ini"
sed -i 's@.*mail.log.*@mail.log = /usr/local/apache/logs/phpmail.log@' "${FPMDIR}/usr/php/php.ini"

echo "include=${FPMDIR}/usr/etc/php-fpm.d/users/*.conf" > "${FPMDIR}/usr/etc/php-fpm.d/users.conf"
echo "include=${FPMDIR}/usr/etc/php-fpm.d/*.conf" > "${FPMDIR}/usr/etc/php-fpm.conf"

cat > "${FPMDIR}/usr/etc/php-fpm.d/cwpsvc.conf" <<EOF
[cwpsvc]
listen = ${FPMDIR}/usr/var/sockets/cwpsvc.sock
listen.owner = cwpsvc
listen.group = cwpsvc
listen.mode = 0640
user = cwpsvc
group = cwpsvc
pm = ondemand
pm.max_children = 25
pm.process_idle_timeout = 15s
request_terminate_timeout = 0
EOF

# --- Systemd service ---
cp sapi/fpm/php-fpm.service "/usr/lib/systemd/system/php-fpm${PHPMAJOR}.service"
sed -i "s|\${exec_prefix}|${FPMDIR}/usr|g" "/usr/lib/systemd/system/php-fpm${PHPMAJOR}.service"
sed -i "s|\${prefix}|${FPMDIR}/usr|g" "/usr/lib/systemd/system/php-fpm${PHPMAJOR}.service"

systemctl daemon-reload
systemctl enable "php-fpm${PHPMAJOR}"

# --- Loading Apache FPM module if not already present ---
if [ ! -e "/usr/local/apache/conf.d/php-fpm.conf" ]; then
cat > /usr/local/apache/conf.d/php-fpm.conf <<EOF
<IfModule !proxy_fcgi_module>
    LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
</IfModule>
EOF
fi

# --- External modules (imagick, redis, imap, etc.) ---
if [ -e "${CONFBASE}/php${PHPMAJOR}_external.conf" ]; then
    bash "${CONFBASE}/php${PHPMAJOR}_external.conf" || true
fi

# These extensions are unbundled from PHP 8.5 and may be absent from stale
# CWP-generated external configs.
for late_module in imap7.sh pspell.sh; do
    late_script="/usr/local/cwpsrv/htdocs/resources/conf/el9/php-fpm_selector/external_modules/8.5/${late_module}"
    if [ -x "${late_script}" ]; then
        bash "${late_script}" || true
    fi
done

# --- Monit integration for custom PHP-FPM ---
MONIT_CONF_DIR="/etc/monit.d"
MONIT_CONF_FILE="${MONIT_CONF_DIR}/php-fpm${PHPMAJOR}"
PHPFPM_SERVICE="php-fpm${PHPMAJOR}.service"
PHPFPM_BASE="/opt/alt/php-fpm${PHPMAJOR}"
PHPFPM_CONF="${PHPFPM_BASE}/usr/etc/php-fpm.conf"
PHPFPM_SOCKET="${PHPFPM_BASE}/usr/var/sockets/cwpsvc.sock"
PHPVER_LABEL="${PHPMAJOR:0:1}.${PHPMAJOR:1:1}"

echo ""
echo "===== Monit integration for PHP-FPM ${PHPVER_LABEL} ====="

if ! command -v monit >/dev/null 2>&1; then
    echo "Monit is not installed. Installing..."
    dnf -y install monit
fi

mkdir -p "${MONIT_CONF_DIR}"

cat > "${MONIT_CONF_FILE}" <<EOF
# PHP-FPM ${PHPVER_LABEL} - CWP alt-php custom build
check process php-fpm${PHPMAJOR} matching ".*/opt/alt/php-fpm${PHPMAJOR}/usr/etc/php-fpm.conf.*"
        start program "/usr/bin/systemctl start ${PHPFPM_SERVICE}"
        stop program "/usr/bin/systemctl stop ${PHPFPM_SERVICE}"
        if failed unixsocket ${PHPFPM_SOCKET} then restart
        if cpu > 95% for 12 cycles then restart
        if 4 restarts within 8 cycles then timeout
EOF

chmod 0644 "${MONIT_CONF_FILE}"

if [ ! -f "${PHPFPM_CONF}" ]; then
    echo "WARNING: PHP-FPM config not found yet: ${PHPFPM_CONF}"
fi

systemctl enable "${PHPFPM_SERVICE}" >/dev/null 2>&1 || true
systemctl enable monit >/dev/null 2>&1 || true

if systemctl is-active --quiet "${PHPFPM_SERVICE}"; then
    echo "PHP-FPM service is active: ${PHPFPM_SERVICE}"
else
    echo "PHP-FPM service is not active yet; trying to start it..."
    systemctl start "${PHPFPM_SERVICE}" || true
fi

systemctl restart monit || true

if command -v monit >/dev/null 2>&1; then
    monit reload || true
    monit validate || true
fi

echo "Monit config installed: ${MONIT_CONF_FILE}"
echo "===== Monit integration completed ====="

systemctl restart "php-fpm${PHPMAJOR}"

# --- CSF pignore ---
if [ -e "/etc/csf/csf.pignore" ]; then

    # PHP-FPM + PHP binary
    if ! grep -q "${FPMDIR}/usr/sbin/php-fpm" /etc/csf/csf.pignore; then
        echo "exe:${FPMDIR}/usr/sbin/php-fpm" >> /etc/csf/csf.pignore
    fi

    if ! grep -q "${FPMDIR}/usr/bin/php" /etc/csf/csf.pignore; then
        echo "exe:${FPMDIR}/usr/bin/php" >> /etc/csf/csf.pignore
    fi

    # memcached daemon
    if command -v memcached >/dev/null 2>&1; then
        if ! grep -q "exe:/usr/bin/memcached" /etc/csf/csf.pignore; then
            echo "exe:/usr/bin/memcached" >> /etc/csf/csf.pignore
        fi
    fi

    # redis-server daemon
    if command -v redis-server >/dev/null 2>&1; then
        if ! grep -q "exe:/usr/bin/redis-server" /etc/csf/csf.pignore; then
            echo "exe:/usr/bin/redis-server" >> /etc/csf/csf.pignore
        fi
    fi

    # Restart CSF/LFD to apply changes
    csf -r
fi

rm -rf /usr/local/src/php-build
rm -rf /usr/local/src/build-dir

echo "PHP ${PHPVER} (php-fpm${PHPMAJOR}) build finished successfully."

You can use it.

Critical part:

/usr/local/cwpsrv/htdocs/resources/conf/el9/php-fpm_selector/pre_run/8.5/imap7.sh

The working script is:

#!/bin/bash
set -euo pipefail

echo ""
echo "===== PHP-FPM 8.5 IMAP setup ====="

PHPFPM="/opt/alt/php-fpm85"
PHPBIN="${PHPFPM}/usr/bin/php"
PHPCONFIG="${PHPFPM}/usr/bin/php-config"
PHPIZE="${PHPFPM}/usr/bin/phpize"
PHPINIDIR="${PHPFPM}/usr/php/php.d"
IMAP_VERSION="1.0.3"

echo "Installing IMAP build dependencies..."
dnf -y install uw-imap-devel krb5-devel openssl-devel pkgconf make gcc autoconf

if [ ! -x "${PHPCONFIG}" ] || [ ! -x "${PHPIZE}" ]; then
    echo "PHP-FPM 8.5 is not built yet. Dependencies are installed; run this script again after PHP 8.5 is installed to build PECL imap."
    exit 0
fi

if "${PHPBIN}" -m 2>/dev/null | grep -qi '^imap$'; then
    echo "IMAP extension is already loaded for PHP-FPM 8.5."
    exit 0
fi

mkdir -p "${PHPINIDIR}"

cd /usr/local/src
rm -rf "imap-${IMAP_VERSION}" imap.tgz

echo "Downloading PECL imap-${IMAP_VERSION}..."
curl -fL "https://pecl.php.net/get/imap-${IMAP_VERSION}.tgz" -o imap.tgz

tar -xzf imap.tgz
cd "imap-${IMAP_VERSION}"

echo "Running phpize..."
"${PHPIZE}"

echo "Configuring IMAP extension..."
./configure \
    --with-php-config="${PHPCONFIG}" \
    --with-libdir=lib64 \
    --with-imap=/usr \
    --with-imap-ssl \
    --with-kerberos

echo "Building IMAP extension..."
make -j"$(nproc)"
make install

PHPEXTDIR="$("${PHPCONFIG}" --extension-dir)"

if [ ! -f "${PHPEXTDIR}/imap.so" ]; then
    echo "ERROR: imap.so was not installed to ${PHPEXTDIR}"
    exit 1
fi

echo "extension=imap.so" > "${PHPINIDIR}/imap.ini"

if "${PHPBIN}" -m 2>/dev/null | grep -qi '^imap$'; then
    echo "IMAP extension installed and enabled for PHP-FPM 8.5."
else
    echo "ERROR: imap.ini was created, but PHP does not load the IMAP extension."
    "${PHPBIN}" -d display_errors=1 -m
    exit 1
fi

if command -v systemctl >/dev/null 2>&1; then
    systemctl restart php-fpm85 || true
fi

echo "===== PHP-FPM 8.5 IMAP setup completed ====="

These are designed to supplement the CWP UI until the system PHP 8.4, 8.5 scripts arrive.

@Sandeep B. Hello, This is a PHP 5.6 FPM script for El9 AlmaLinux 9 environment:

#!/bin/bash

# Usage: bash /root/build-php-fpm56-el9.sh 2>&1 | tee /root/php56-build.log
# External modules:
# /usr/local/cwpsrv/htdocs/resources/conf/el9/php-fpm_selector/external_modules/5.6
set -euo pipefail
set -x

# --- Basic variables ---
PHPMAJOR="56"                  # php-fpm56
PHPVER="5.6.40"                # PHP version
FPMDIR="/opt/alt/php-fpm${PHPMAJOR}"
CONFBASE="/usr/local/cwp/.conf/php-fpm_conf"
SELECTOR_BASE="/usr/local/cwpsrv/htdocs/resources/conf/el9/php-fpm_selector"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
LOCAL_CONFBASE="${SCRIPT_DIR}/conf"
PRE_RUN_BASE="${SELECTOR_BASE}/pre_run/5.6"
EXT_BASE="${SELECTOR_BASE}/external_modules/5.6"
OPENSSL_HACK_DIR="/usr/local/ssls"
CURL_HACK_DIR="/usr/local/curls"
IMAP_HACK_DIR="/usr/local/imap-2007f"

arch=$(uname -m)
if [[ "$arch" == "x86_64" ]]; then
    platform="x86-64"
    libdir="/usr/lib64"
else
    platform="x86"
    libdir="/usr/lib"
fi

run_if_exists() {
    local script="$1"

    if [ -f "$script" ]; then
        bash "$script" || true
    fi
}

resolve_conf_file() {
    local name="$1"
    local primary="${CONFBASE}/${name}"
    local fallback="${LOCAL_CONFBASE}/${name}"

    if [ -f "$primary" ]; then
        echo "$primary"
        return 0
    fi

    if [ -f "$fallback" ]; then
        echo "$fallback"
        return 0
    fi

    return 1
}

ensure_executable_config() {
    local config_file="$1"

    if [ -e "$config_file" ] && [ ! -x "$config_file" ]; then
        chmod +x "$config_file" 2>/dev/null || true
    fi
}

prepare_config_file() {
    local config_file="$1"
    local normalized_file="$2"

    cp "$config_file" "$normalized_file"

    # The generated 5.6 selector config can contain a malformed IMAP option
    # string. Normalize it before invoking configure so bash passes both flags
    # as separate arguments.
    sed -i \
        -e "s|--with-imap=/usr/local/imap-2007f' '--with-imap-ssl=/usr/local/ssls|--with-imap=/usr/local/imap-2007f --with-imap-ssl=/usr/local/ssls|g" \
        -e 's/ --enable-intl//g' \
        -e 's/ --with-icu-dir=\/usr//g' \
        "$normalized_file"

    chmod +x "$normalized_file" 2>/dev/null || true
}

ensure_imap_hack_layout() {
    mkdir -p "${IMAP_HACK_DIR}/include" "${IMAP_HACK_DIR}/lib" "${IMAP_HACK_DIR}/lib64" "${IMAP_HACK_DIR}/c-client"

    if [ -d "/usr/include/imap" ] && [ ! -e "${IMAP_HACK_DIR}/include/imap" ]; then
        ln -sfn /usr/include/imap "${IMAP_HACK_DIR}/include/imap"
    fi

    if [ -e "/usr/lib64/libc-client.so" ]; then
        ln -sfn /usr/lib64/libc-client.so "${IMAP_HACK_DIR}/lib64/libc-client.so"
    fi

    if [ -e "/usr/lib64/libc-client.a" ]; then
        ln -sfn /usr/lib64/libc-client.a "${IMAP_HACK_DIR}/lib64/libc-client.a"
    fi

    if [ -e "/usr/lib/libc-client.so" ]; then
        ln -sfn /usr/lib/libc-client.so "${IMAP_HACK_DIR}/lib/libc-client.so"
    fi

    if [ -e "/usr/lib/libc-client.a" ]; then
        ln -sfn /usr/lib/libc-client.a "${IMAP_HACK_DIR}/lib/libc-client.a"
    fi
}

CONFIG_FILE_TEMPLATE=""
ENABLE_IMAP=0

# --- Packages for Build (EL9) ---
dnf -y install \
  autoconf automake bison gcc gcc-c++ make pkgconf-pkg-config re2c \
  krb5-devel glibc-common gnutls-devel \
  libxml2-devel libxslt-devel libicu-devel \
  libjpeg-turbo-devel freetype-devel libpng-devel libXpm-devel \
  libzip libzip-devel \
  libbsd-devel \
  libtidy-devel aspell aspell-devel \
  perl \
  uw-imap-devel \
  openldap-devel \
  bzip2-devel gettext-devel gmp-devel \
  openssl-devel

# PHP 5.6 on EL9 must use the old CWP OpenSSL 1.x hack.
if [ -d /usr/local/opensslso ]; then
    echo "WARN: /usr/local/opensslso exists, but PHP 5.6.40 must be built against /usr/local/ssls."
fi

# --- Prepare old CWP 1.x dependencies ---
run_if_exists "${PRE_RUN_BASE}/dep.sh"
run_if_exists "${PRE_RUN_BASE}/ldap.sh"
run_if_exists "${PRE_RUN_BASE}/firebird.sh"

if ! CONFIG_FILE_TEMPLATE="$(resolve_conf_file "php${PHPMAJOR}.conf")"; then
    echo "ERROR: php${PHPMAJOR}.conf not found in ${CONFBASE} or ${LOCAL_CONFBASE}"
    exit 1
fi

if grep -q -- '--with-imap' "${CONFIG_FILE_TEMPLATE}"; then
    ENABLE_IMAP=1
    run_if_exists "${PRE_RUN_BASE}/imap.sh"
fi

if [ ! -d "${OPENSSL_HACK_DIR}" ]; then
    echo "ERROR: ${OPENSSL_HACK_DIR} is missing. Run the selector pre-run dependency step first."
    exit 1
fi

if [ ! -d "${CURL_HACK_DIR}" ]; then
    echo "ERROR: ${CURL_HACK_DIR} is missing. Run the selector pre-run dependency step first."
    exit 1
fi

export PKG_CONFIG_PATH="${OPENSSL_HACK_DIR}/lib/pkgconfig:${OPENSSL_HACK_DIR}/lib64/pkgconfig:${CURL_HACK_DIR}/lib/pkgconfig:${CURL_HACK_DIR}/lib64/pkgconfig:/usr/lib64/pkgconfig"
export CPPFLAGS="-I${OPENSSL_HACK_DIR}/include -I${CURL_HACK_DIR}/include"
export CFLAGS="${CFLAGS:-} -fcommon"
export LDFLAGS="-L${OPENSSL_HACK_DIR}/lib -L${OPENSSL_HACK_DIR}/lib64 -L${CURL_HACK_DIR}/lib -L${CURL_HACK_DIR}/lib64"
export LIBRARY_PATH="${OPENSSL_HACK_DIR}/lib:${OPENSSL_HACK_DIR}/lib64:${CURL_HACK_DIR}/lib:${CURL_HACK_DIR}/lib64"
export LD_LIBRARY_PATH="${OPENSSL_HACK_DIR}/lib:${OPENSSL_HACK_DIR}/lib64:${CURL_HACK_DIR}/lib:${CURL_HACK_DIR}/lib64:${LD_LIBRARY_PATH:-}"
export OPENSSL_CFLAGS="-I${OPENSSL_HACK_DIR}/include"
export OPENSSL_LIBS="-L${OPENSSL_HACK_DIR}/lib -L${OPENSSL_HACK_DIR}/lib64 -lssl -lcrypto"

if [ "${ENABLE_IMAP}" -eq 1 ]; then
    ensure_imap_hack_layout
    export CPPFLAGS="${CPPFLAGS} -I${IMAP_HACK_DIR}/include -I${IMAP_HACK_DIR}/include/imap -I${IMAP_HACK_DIR}/c-client"
    export LDFLAGS="${LDFLAGS} -L${IMAP_HACK_DIR}/lib -L${IMAP_HACK_DIR}/lib64 -L${IMAP_HACK_DIR}/c-client"
    export LIBRARY_PATH="${LIBRARY_PATH}:${IMAP_HACK_DIR}/lib:${IMAP_HACK_DIR}/lib64:${IMAP_HACK_DIR}/c-client"
    export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${IMAP_HACK_DIR}/lib:${IMAP_HACK_DIR}/lib64:${IMAP_HACK_DIR}/c-client"
fi

echo "INFO: PHP 5.6 intl is disabled on EL9 because ICU 67+ is not compatible with ext/intl from PHP 5.6."

# --- PHP source download: direct official php.net tarball ---
PHPSOURCE="https://www.php.net/distributions/php-${PHPVER}.tar.gz"
echo "Using source: $PHPSOURCE"

# --- Build directory ---
rm -rf /usr/local/src/php-build
mkdir -p /usr/local/src/php-build
cd /usr/local/src/php-build

wget -q "${PHPSOURCE}" -O "php-${PHPVER}.tar.gz"

if ! file "php-${PHPVER}.tar.gz" | grep -qiE "gzip compressed data|tar archive"; then
    echo "ERROR: Downloaded PHP source is not a valid tarball: ${PHPSOURCE}"
    exit 1
fi

tar -xzf "php-${PHPVER}.tar.gz"
cd "php-${PHPVER}"

# --- Configure PHP 5.6.40 for EL9 + old CWP OpenSSL 1.x hack ---
CONFIG_FILE="${CONFIG_FILE_TEMPLATE}"
ensure_executable_config "$CONFIG_FILE"
NORMALIZED_CONFIG_FILE="$(mktemp "/tmp/php${PHPMAJOR}.conf.XXXXXX")"
prepare_config_file "$CONFIG_FILE" "$NORMALIZED_CONFIG_FILE"
bash "$NORMALIZED_CONFIG_FILE"
rm -f "$NORMALIZED_CONFIG_FILE"

# --- Compiling ---
if command -v nproc >/dev/null 2>&1; then
    make -j"$(nproc)"
else
    make
fi

make install

# --- PHP.ini + FPM scaffolding ---
mkdir -p "${FPMDIR}/usr/php/php.d"
mkdir -p "${FPMDIR}/usr/var/sockets"
mkdir -p "${FPMDIR}/usr/etc/php-fpm.d"
mkdir -p "${FPMDIR}/usr/etc/php-fpm.d/users"

rsync php.ini-production "${FPMDIR}/usr/php/php.ini"

sed -i 's/^short_open_tag.*/short_open_tag = On/' "${FPMDIR}/usr/php/php.ini"
sed -i 's/^;cgi.fix_pathinfo=.*/cgi.fix_pathinfo=1/' "${FPMDIR}/usr/php/php.ini"
sed -i 's/.*mail.add_x_header.*/mail.add_x_header = On/' "${FPMDIR}/usr/php/php.ini"
sed -i 's@.*mail.log.*@mail.log = /usr/local/apache/logs/phpmail.log@' "${FPMDIR}/usr/php/php.ini"

echo "include=${FPMDIR}/usr/etc/php-fpm.d/users/*.conf" > "${FPMDIR}/usr/etc/php-fpm.d/users.conf"
echo "include=${FPMDIR}/usr/etc/php-fpm.d/*.conf" > "${FPMDIR}/usr/etc/php-fpm.conf"

cat > "${FPMDIR}/usr/etc/php-fpm.d/cwpsvc.conf" <<EOF
[cwpsvc]
listen = ${FPMDIR}/usr/var/sockets/cwpsvc.sock
listen.owner = cwpsvc
listen.group = cwpsvc
listen.mode = 0640
user = cwpsvc
group = cwpsvc
pm = ondemand
pm.max_children = 25
pm.process_idle_timeout = 15s
request_terminate_timeout = 0
EOF

# --- Systemd service ---
cp sapi/fpm/php-fpm.service "/usr/lib/systemd/system/php-fpm${PHPMAJOR}.service"
sed -i "s|\${exec_prefix}|${FPMDIR}/usr|g" "/usr/lib/systemd/system/php-fpm${PHPMAJOR}.service"
sed -i "s|\${prefix}|${FPMDIR}/usr|g" "/usr/lib/systemd/system/php-fpm${PHPMAJOR}.service"

systemctl daemon-reload
systemctl enable "php-fpm${PHPMAJOR}"

# --- Loading Apache FPM module if not already present ---
if [ ! -e "/usr/local/apache/conf.d/php-fpm.conf" ]; then
cat > /usr/local/apache/conf.d/php-fpm.conf <<EOF
<IfModule !proxy_fcgi_module>
    LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
</IfModule>
EOF
fi

# --- External modules (imagick, redis, imap, etc.) ---
if EXTERNAL_FILE="$(resolve_conf_file "php${PHPMAJOR}_external.conf")"; then
    ensure_executable_config "$EXTERNAL_FILE"
    bash "$EXTERNAL_FILE" || true
else
    for module in \
        imagick.sh \
        ioncube.sh \
        mailparse.sh \
        memcache.sh \
        mongodb.sh \
        opcache.sh \
        redis.sh \
        sourceguardian.sh \
        ssh2.sh \
        xcache.sh \
        yaz.sh \
        zendgl.sh
    do
        run_if_exists "${EXT_BASE}/${module}"
    done
fi

# --- CSF pignore ---
if [ -e "/etc/csf/csf.pignore" ]; then

    if ! grep -q "${FPMDIR}/usr/sbin/php-fpm" /etc/csf/csf.pignore; then
        echo "exe:${FPMDIR}/usr/sbin/php-fpm" >> /etc/csf/csf.pignore
    fi

    if ! grep -q "${FPMDIR}/usr/bin/php" /etc/csf/csf.pignore; then
        echo "exe:${FPMDIR}/usr/bin/php" >> /etc/csf/csf.pignore
    fi

    if command -v memcached >/dev/null 2>&1; then
        if ! grep -q "exe:/usr/bin/memcached" /etc/csf/csf.pignore; then
            echo "exe:/usr/bin/memcached" >> /etc/csf/csf.pignore
        fi
    fi

    if command -v redis-server >/dev/null 2>&1; then
        if ! grep -q "exe:/usr/bin/redis-server" /etc/csf/csf.pignore; then
            echo "exe:/usr/bin/redis-server" >> /etc/csf/csf.pignore
        fi
    fi

    csf -r || true
fi

# --- Monitor integration ---
if [ -d "/etc/monit.d" ]; then
    if [ ! -e "/etc/monit.d/php-fpm${PHPMAJOR}" ]; then
        if [ -e "/usr/local/cwpsrv/htdocs/resources/conf/monit.d/php-fpm${PHPMAJOR}" ]; then
            cp "/usr/local/cwpsrv/htdocs/resources/conf/monit.d/php-fpm${PHPMAJOR}" /etc/monit.d/ 2>/dev/null || true
            monit reload || true
        fi
    fi
fi

rm -rf /usr/local/src/php-build
rm -rf /usr/local/src/build-dir

systemctl restart "php-fpm${PHPMAJOR}"

echo "PHP ${PHPVER} (php-fpm${PHPMAJOR}) build finished successfully."

Sometimes it is necessary for a legacy system to be able to operate temporarily even under AlmaLinux 9.

  • Author
On 8/11/2026 at 3:39 PM, TheHolbi said:

@Sandeep B. Hello, here is the latest working EL9 script for PHP 8.5 FPM for AlmaLinux 9.x

#!/bin/bash

# Usage: bash /root/build-php-fpm85-el9.sh 2>&1 | tee /root/php85-build.log# External modules:# /usr/local/cwpsrv/htdocs/resources/conf/el9/php-fpm_selector/external_modules/8.5set -euo pipefail
set -x

# --- Basic variables ---
PHPMAJOR="85"                  # php-fpm85
PHPVER="8.5.9"                # PHP version
FPMDIR="/opt/alt/php-fpm${PHPMAJOR}"
CONFBASE="/usr/local/cwp/.conf/php-fpm_conf"

arch=$(uname -m)
if [[ "$arch" == "x86_64" ]]; then
    platform="x86-64"
    libdir="/usr/lib64"else
    platform="x86"
    libdir="/usr/lib"fi

# --- Packages for Build (EL9) ---
dnf -y install \
  krb5-devel glibc-common gnutls-devel \
  libargon2 libargon2-devel libbsd-devel \
  perl libzip libzip-devel pcre2 pcre2-devel \
  libavif libavif-devel \
  uw-imap-devel \
  openssl-devel

# If there is any old CWP OpenSSL hack left, don't use it.:if [ -d /usr/local/opensslso ]; thenecho "WARN: /usr/local/opensslso exists, but we DO NOT USE for compiling PHP (OpenSSL 1.1 hack)."fi

# --- Force OpenSSL 3.x ---export PKG_CONFIG_PATH=/usr/lib64/pkgconfig
export OPENSSL_CFLAGS="-I/usr/include"export OPENSSL_LIBS="-L/usr/lib64"export LDFLAGS="-lssl -lcrypto"

# --- CWP pre-conf, if exists (e.g.: pcre2, & other libs) ---if [ -e "${CONFBASE}/php${PHPMAJOR}_pre.conf" ]; then
    bash "${CONFBASE}/php${PHPMAJOR}_pre.conf"fi

# --- PHP SOURCE DOWNLOAD CHECK: CWP CDN → OFFICIAL php.net → GitHub fallback ---
CWP_URL="http://static.cdn-cwp.com/files/php/php-${PHPVER}.tar.gz"
PHPNET_URL="https://www.php.net/distributions/php-${PHPVER}.tar.gz"
GITHUB_URL="https://codeload.github.com/php/php-src/tar.gz/refs/tags/php-${PHPVER}"

# Function: check HTTP 200 + verify tar.gz contentcheck_and_verify() {
    local url="$1"
    local testfile="/tmp/php-test-${PHPVER}.tar.gz"

    echo "Checking: $url"

    # First check HTTP status code
    if ! curl -I -L -s "$url" | grep -q "200"; then
        echo "  → HTTP check failed"
        return 1
    fi

    # Download temporary test file
    if ! wget -q "$url" -O "$testfile"; then
        echo "  → Download failed"
        return 1
    fi

    # Validate MIME type of tar.gz
    if file "$testfile" | grep -qiE "gzip compressed data|tar archive"; then
        rm -f "$testfile"
        echo "  → Valid TAR.GZ"
        return 0
    fi

    echo "  → Invalid TAR.GZ (HTML or wrong file)"
    rm -f "$testfile"
    return 1
}

# Check sources in order (CWP → php.net → GitHub)if check_and_verify "$CWP_URL"; then
    PHPSOURCE="$CWP_URL"elif check_and_verify "$PHPNET_URL"; then
    PHPSOURCE="$PHPNET_URL"elif check_and_verify "$GITHUB_URL"; then
    PHPSOURCE="$GITHUB_URL"else
    echo "ERROR: Could not download a valid PHP source for version ${PHPVER}"
    exit 1
fi

echo "Using source: $PHPSOURCE"

# --- Build directory ---rm -rf /usr/local/src/php-build
mkdir -p /usr/local/src/php-build
cd /usr/local/src/php-build

wget -q "${PHPSOURCE}" -O "php-${PHPVER}.tar.gz"

tar -xzf "php-${PHPVER}.tar.gz"cd "php-${PHPVER}"

# --- Configure: CWP's own php85.conf, but already wired to OpenSSL 3.x from env ---if [ ! -x "${CONFBASE}/php${PHPMAJOR}.conf" ]; then
    chmod +x "${CONFBASE}/php${PHPMAJOR}.conf" 2>/dev/null || truefi

# PHP 8.5 no longer accepts several legacy configure flags that CWP may keep# in an already generated php85.conf.
sed -i -E \
    -e '/^[[:space:]]*--with-pspell(=[^[:space:]]*)?[[:space:]]*\\?[[:space:]]*$/d' \
    -e '/^[[:space:]]*--with-zlib-dir=[^[:space:]]*[[:space:]]*\\?[[:space:]]*$/d' \
    -e '/^[[:space:]]*--with-kerberos(=[^[:space:]]*)?[[:space:]]*\\?[[:space:]]*$/d' \
    -e '/^[[:space:]]*--with-imap-ssl(=[^[:space:]]*)?[[:space:]]*\\?[[:space:]]*$/d' \
    -e '/^[[:space:]]*--with-imap(=[^[:space:]]*)?[[:space:]]*\\?[[:space:]]*$/d' \
    -e '/^[[:space:]]*--enable-opcache[[:space:]]*\\?[[:space:]]*$/d' \
    -e 's/[[:space:]]--with-pspell(=[^[:space:]]*)?//g' \
    -e 's/[[:space:]]--with-zlib-dir=[^[:space:]]*//g' \
    -e 's/[[:space:]]--with-kerberos(=[^[:space:]]*)?//g' \
    -e 's/[[:space:]]--with-imap-ssl(=[^[:space:]]*)?//g' \
    -e 's/[[:space:]]--with-imap(=[^[:space:]]*)?//g' \
    -e 's/[[:space:]]--enable-opcache//g' \
    "${CONFBASE}/php${PHPMAJOR}.conf"

# IMPORTANT: LDFLAGS + PKG_CONFIG_PATH already exported
bash "${CONFBASE}/php${PHPMAJOR}.conf"

# --- Compiling ---if command -v nproc >/dev/null 2>&1; then
    make -j"$(nproc)"else
    make
fi

make install

# --- PHP.ini + FPM scaffolding ---mkdir -p "${FPMDIR}/usr/php/php.d"mkdir -p "${FPMDIR}/usr/var/sockets"mkdir -p "${FPMDIR}/usr/etc/php-fpm.d"mkdir -p "${FPMDIR}/usr/etc/php-fpm.d/users"

rsync php.ini-production "${FPMDIR}/usr/php/php.ini"

sed -i 's/^short_open_tag.*/short_open_tag = On/' "${FPMDIR}/usr/php/php.ini"
sed -i 's/^;cgi.fix_pathinfo=.*/cgi.fix_pathinfo=1/' "${FPMDIR}/usr/php/php.ini"
sed -i 's/.*mail.add_x_header.*/mail.add_x_header = On/' "${FPMDIR}/usr/php/php.ini"
sed -i 's@.*mail.log.*@mail.log = /usr/local/apache/logs/phpmail.log@' "${FPMDIR}/usr/php/php.ini"

echo "include=${FPMDIR}/usr/etc/php-fpm.d/users/*.conf" > "${FPMDIR}/usr/etc/php-fpm.d/users.conf"echo "include=${FPMDIR}/usr/etc/php-fpm.d/*.conf" > "${FPMDIR}/usr/etc/php-fpm.conf"

cat > "${FPMDIR}/usr/etc/php-fpm.d/cwpsvc.conf" <<EOF
[cwpsvc]
listen = ${FPMDIR}/usr/var/sockets/cwpsvc.sock
listen.owner = cwpsvc
listen.group = cwpsvc
listen.mode = 0640
user = cwpsvc
group = cwpsvc
pm = ondemand
pm.max_children = 25
pm.process_idle_timeout = 15s
request_terminate_timeout = 0
EOF

# --- Systemd service ---cp sapi/fpm/php-fpm.service "/usr/lib/systemd/system/php-fpm${PHPMAJOR}.service"
sed -i "s|\${exec_prefix}|${FPMDIR}/usr|g" "/usr/lib/systemd/system/php-fpm${PHPMAJOR}.service"
sed -i "s|\${prefix}|${FPMDIR}/usr|g" "/usr/lib/systemd/system/php-fpm${PHPMAJOR}.service"

systemctl daemon-reload
systemctl enable "php-fpm${PHPMAJOR}"

# --- Loading Apache FPM module if not already present ---if [ ! -e "/usr/local/apache/conf.d/php-fpm.conf" ]; thencat > /usr/local/apache/conf.d/php-fpm.conf <<EOF
<IfModule !proxy_fcgi_module>
    LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
</IfModule>
EOFfi

# --- External modules (imagick, redis, imap, etc.) ---if [ -e "${CONFBASE}/php${PHPMAJOR}_external.conf" ]; then
    bash "${CONFBASE}/php${PHPMAJOR}_external.conf" || truefi

# These extensions are unbundled from PHP 8.5 and may be absent from stale# CWP-generated external configs.for late_module in imap7.sh pspell.sh; do
    late_script="/usr/local/cwpsrv/htdocs/resources/conf/el9/php-fpm_selector/external_modules/8.5/${late_module}"
    if [ -x "${late_script}" ]; then
        bash "${late_script}" || true
    fidone

# --- Monit integration for custom PHP-FPM ---
MONIT_CONF_DIR="/etc/monit.d"
MONIT_CONF_FILE="${MONIT_CONF_DIR}/php-fpm${PHPMAJOR}"
PHPFPM_SERVICE="php-fpm${PHPMAJOR}.service"
PHPFPM_BASE="/opt/alt/php-fpm${PHPMAJOR}"
PHPFPM_CONF="${PHPFPM_BASE}/usr/etc/php-fpm.conf"
PHPFPM_SOCKET="${PHPFPM_BASE}/usr/var/sockets/cwpsvc.sock"
PHPVER_LABEL="${PHPMAJOR:0:1}.${PHPMAJOR:1:1}"

echo ""echo "===== Monit integration for PHP-FPM ${PHPVER_LABEL} ====="

if ! command -v monit >/dev/null 2>&1; then
    echo "Monit is not installed. Installing..."
    dnf -y install monit
fi

mkdir -p "${MONIT_CONF_DIR}"

cat > "${MONIT_CONF_FILE}" <<EOF
# PHP-FPM ${PHPVER_LABEL} - CWP alt-php custom build
check process php-fpm${PHPMAJOR} matching ".*/opt/alt/php-fpm${PHPMAJOR}/usr/etc/php-fpm.conf.*"
        start program "/usr/bin/systemctl start ${PHPFPM_SERVICE}"
        stop program "/usr/bin/systemctl stop ${PHPFPM_SERVICE}"
        if failed unixsocket ${PHPFPM_SOCKET} then restart
        if cpu > 95% for 12 cycles then restart
        if 4 restarts within 8 cycles then timeout
EOF

chmod 0644 "${MONIT_CONF_FILE}"

if [ ! -f "${PHPFPM_CONF}" ]; then
    echo "WARNING: PHP-FPM config not found yet: ${PHPFPM_CONF}"fi

systemctl enable "${PHPFPM_SERVICE}" >/dev/null 2>&1 || true
systemctl enable monit >/dev/null 2>&1 || true

if systemctl is-active --quiet "${PHPFPM_SERVICE}"; then
    echo "PHP-FPM service is active: ${PHPFPM_SERVICE}"else
    echo "PHP-FPM service is not active yet; trying to start it..."
    systemctl start "${PHPFPM_SERVICE}" || truefi

systemctl restart monit || true

if command -v monit >/dev/null 2>&1; then
    monit reload || true
    monit validate || truefi

echo "Monit config installed: ${MONIT_CONF_FILE}"echo "===== Monit integration completed ====="

systemctl restart "php-fpm${PHPMAJOR}"

# --- CSF pignore ---if [ -e "/etc/csf/csf.pignore" ]; then

    # PHP-FPM + PHP binary
    if ! grep -q "${FPMDIR}/usr/sbin/php-fpm" /etc/csf/csf.pignore; then
        echo "exe:${FPMDIR}/usr/sbin/php-fpm" >> /etc/csf/csf.pignore
    fi

    if ! grep -q "${FPMDIR}/usr/bin/php" /etc/csf/csf.pignore; then
        echo "exe:${FPMDIR}/usr/bin/php" >> /etc/csf/csf.pignore
    fi

    # memcached daemon
    if command -v memcached >/dev/null 2>&1; then
        if ! grep -q "exe:/usr/bin/memcached" /etc/csf/csf.pignore; then
            echo "exe:/usr/bin/memcached" >> /etc/csf/csf.pignore
        fi
    fi

    # redis-server daemon
    if command -v redis-server >/dev/null 2>&1; then
        if ! grep -q "exe:/usr/bin/redis-server" /etc/csf/csf.pignore; then
            echo "exe:/usr/bin/redis-server" >> /etc/csf/csf.pignore
        fi
    fi

    # Restart CSF/LFD to apply changes
    csf -r
fi

rm -rf /usr/local/src/php-build
rm -rf /usr/local/src/build-dir

echo "PHP ${PHPVER} (php-fpm${PHPMAJOR}) build finished successfully."

You can use it.

Critical part:

/usr/local/cwpsrv/htdocs/resources/conf/el9/php-fpm_selector/pre_run/8.5/imap7.sh

The working script is:

#!/bin/bashset -euo pipefail

echo ""echo "===== PHP-FPM 8.5 IMAP setup ====="

PHPFPM="/opt/alt/php-fpm85"
PHPBIN="${PHPFPM}/usr/bin/php"
PHPCONFIG="${PHPFPM}/usr/bin/php-config"
PHPIZE="${PHPFPM}/usr/bin/phpize"
PHPINIDIR="${PHPFPM}/usr/php/php.d"
IMAP_VERSION="1.0.3"

echo "Installing IMAP build dependencies..."
dnf -y install uw-imap-devel krb5-devel openssl-devel pkgconf make gcc autoconf

if [ ! -x "${PHPCONFIG}" ] || [ ! -x "${PHPIZE}" ]; then
    echo "PHP-FPM 8.5 is not built yet. Dependencies are installed; run this script again after PHP 8.5 is installed to build PECL imap."
    exit 0
fi

if "${PHPBIN}" -m 2>/dev/null | grep -qi '^imap$'; then
    echo "IMAP extension is already loaded for PHP-FPM 8.5."
    exit 0
fi

mkdir -p "${PHPINIDIR}"

cd /usr/local/src
rm -rf "imap-${IMAP_VERSION}" imap.tgz

echo "Downloading PECL imap-${IMAP_VERSION}..."
curl -fL "https://pecl.php.net/get/imap-${IMAP_VERSION}.tgz" -o imap.tgz

tar -xzf imap.tgz
cd "imap-${IMAP_VERSION}"

echo "Running phpize...""${PHPIZE}"

echo "Configuring IMAP extension..."
./configure \
    --with-php-config="${PHPCONFIG}" \
    --with-libdir=lib64 \
    --with-imap=/usr \
    --with-imap-ssl \
    --with-kerberos

echo "Building IMAP extension..."
make -j"$(nproc)"
make install

PHPEXTDIR="$("${PHPCONFIG}" --extension-dir)"

if [ ! -f "${PHPEXTDIR}/imap.so" ]; then
    echo "ERROR: imap.so was not installed to ${PHPEXTDIR}"
    exit 1
fi

echo "extension=imap.so" > "${PHPINIDIR}/imap.ini"

if "${PHPBIN}" -m 2>/dev/null | grep -qi '^imap$'; then
    echo "IMAP extension installed and enabled for PHP-FPM 8.5."else
    echo "ERROR: imap.ini was created, but PHP does not load the IMAP extension."
    "${PHPBIN}" -d display_errors=1 -m
    exit 1
fi

if command -v systemctl >/dev/null 2>&1; then
    systemctl restart php-fpm85 || truefi

echo "===== PHP-FPM 8.5 IMAP setup completed ====="

These are designed to supplement the CWP UI until the system PHP 8.4, 8.5 scripts arrive.

imap is dropped from PHP 8.4 and 8.5; we'll not include it in the latest releases

I had issues with zlib not being available with a fresh CWP install in Alma 9.XX

8.5 got installed, it just took more time and trouble shooting than I would have liked.

On 8/20/2026 at 11:27 AM, enetworkassociates said:

I had issues with zlib not being available with a fresh CWP install in Alma 9.XX

8.5 got installed, it just took more time and trouble shooting than I would have liked.

I'm having the problem with PHP-FPM 8.4 and 8.5 selector not installing because of zlib-dir dependencies which I *think is not needed in PHP 8.4 and above? Seems from what I can tell that zlib should install without it, hence CWP not including it as an option, but still requiring it to compile. I can just go into advanced settings and touch nothing and since zlib is automatically selected, it throws the zlib-dir dependency warning when I try to save the settings. What do I do, go into the simple editor and remove the "include=zlib-dir" from the zlib block? Am I right PHP-FPM 8.4 and 8.5 does not need zlib-dir as it is baked in to 8.4 and up?

No, that doesn't work... And since I can't change any of the other setting in PHP-FPM Selector due to the zlib-dir dependecy I am stuck.

On 8/24/2026 at 11:51 PM, oblique said:

I'm having the problem with PHP-FPM 8.4 and 8.5 selector not installing because of zlib-dir dependencies which I *think is not needed in PHP 8.4 and above? Seems from what I can tell that zlib should install without it, hence CWP not including it as an option, but still requiring it to compile. I can just go into advanced settings and touch nothing and since zlib is automatically selected, it throws the zlib-dir dependency warning when I try to save the settings. What do I do, go into the simple editor and remove the "include=zlib-dir" from the zlib block? Am I right PHP-FPM 8.4 and 8.5 does not need zlib-dir as it is baked in to 8.4 and up?

Hello @oblique

Yes, this appears to be an outdated CWP PHP configuration rather than a missing PHP 8.5 feature.

PHP still requires the system zlib development library:

dnf install -y zlib-devel

However, the legacy PHP configure option:

--with-zlib-dir=...

must be removed. It has not been supported since PHP 7.4. Modern PHP discovers zlib through pkg-config.

Check the generated CWP configuration, usually the relevant php85.conf, and remove --with-zlib-dir. If the CWP editor itself refuses to save because the zlib block contains:

include=zlib-dir

then that dependency reference is also stale and should be removed from the CWP editor definition. Keep zlib enabled and keep zlib-devel installed; only remove the obsolete zlib-dir configure option/dependency.

On 8/14/2026 at 2:39 AM, Sandeep B. said:

imap is dropped from PHP 8.4 and 8.5; we'll not include it in the latest releases

@Sandeep B. Hi Sandeep,

There is a related issue that needs to be addressed in the official PHP 8.4/8.5 compiler implementation.

Every CWP update restores the old external_modules and pre_run scripts. These scripts contain legacy assumptions and configure options that are no longer compatible with PHP 8.4 and 8.5. As a result, locally corrected compiler configurations are repeatedly overwritten by the updater.

IMAP is a clear example. You previously wrote:

“imap is dropped from PHP 8.4 and 8.5; we'll not include it in the latest releases”

However, IMAP remains selectable in the CWP PHP-FPM configuration interface. Selecting it causes the old IMAP, Kerberos and IMAP-SSL handling to be injected into the build, even though these options are no longer supported by bundled PHP 8.4/8.5.

This makes the interface a trap for administrators: CWP offers an option that its own compiler cannot validly process.

The same legacy configuration problem affects options such as:

--with-imap
--with-imap-ssl
--with-kerberos
--with-pspell
--with-zlib-dir
--enable-opcache

Please update the complete PHP 8.4/8.5 compiler chain, not only the visible version list:

  1. Remove unsupported bundled-extension options from the PHP 8.4/8.5 interface.

  2. Make the available options version-aware.

  3. Update the official external_modules and pre_run scripts.

  4. Stop CWP updates from restoring legacy PHP 8.4/8.5 compiler definitions.

  5. Remove the forced /usr/local/opensslso OpenSSL 1.1.1 integration and use the AlmaLinux 9 system OpenSSL.

  6. If IMAP or Pspell support is planned through PECL, expose it explicitly as a PECL extension rather than retaining obsolete PHP configure options.

  7. Test a clean PHP 8.4 and 8.5 compilation after a normal CWP update, without any administrator-applied patches.

At present, CWP advertises official PHP 8.4/8.5 compilation support, but the surrounding compiler configuration still belongs to older PHP releases. An administrator who simply selects the options offered by the interface can generate a failed, obsolete or incorrectly linked build.

I have already provided working corrections, but maintaining local patches is not a sustainable solution when every CWP update reinstalls the broken legacy scripts. These fixes need to be incorporated into the official update packages.

On 8/11/2026 at 3:41 AM, Sandeep B. said:

Started testing PHP 8.4 in AlmaLinux 8 - pass

Started testing PHP 8.5 in AlmaLinux 8 - pass

Started testing PHP 8.4 in AlmaLinux 9 - pass

Started testing PHP 8.5 in AlmaLinux 9 - pass

@Sandeep B. Hi Sandeep,

CWP now officially supports compiling PHP 8.4 and 8.5, but the default PHP-FPM builds are still being linked against CWP’s legacy OpenSSL 1.1.1t:

/opt/alt/php-fpm85/usr/bin/php --ri openssl

openssl

OpenSSL support => enabled
OpenSSL Library Version => OpenSSL 1.1.1t  7 Feb 2023
OpenSSL Header Version => OpenSSL 1.1.1t  7 Feb 2023
Openssl default config => /usr/local/opensslso/openssl.cnf

Directive => Local Value => Master Value
openssl.cafile => no value => no value
openssl.capath => no value => no value
openssl.libctx => custom => custom

This means that even newly compiled PHP 8.5 installations use the obsolete /usr/local/opensslso build instead of the current system OpenSSL provided by AlmaLinux 9.

After correcting the compiler environment and linking PHP against the AlmaLinux 9 system libraries, the expected result is:

/opt/alt/php-fpm85/usr/bin/php --ri openssl

openssl

OpenSSL support => enabled
OpenSSL Library Version => OpenSSL 3.5.5 27 Jan 2026
OpenSSL Header Version => OpenSSL 3.5.5 27 Jan 2026
Openssl default config => /etc/pki/tls/openssl.cnf

Directive => Local Value => Master Value
openssl.cafile => no value => no value
openssl.capath => no value => no value
openssl.libctx => custom => custom

This confirms that PHP 8.5 can be compiled correctly on AlmaLinux 9 against the current system OpenSSL. It also uses the correct system configuration file:

/etc/pki/tls/openssl.cnf

instead of:

/usr/local/opensslso/openssl.cnf

I previously supplied the required include and library configuration, but it appears that it was not incorporated into the official compiler setup.

Could you please treat this as a priority and update the PHP-FPM 8.4/8.5 compiler so that it:

  1. uses the AlmaLinux 9 system OpenSSL headers and libraries;

  2. does not inject /usr/local/opensslso into the build environment;

  3. does not link new PHP binaries against OpenSSL 1.1.1;

  4. uses /etc/pki/tls/openssl.cnf as the default OpenSSL configuration;

  5. verifies the completed build with:

/opt/alt/php-fpm85/usr/bin/php --ri openssl
ldd /opt/alt/php-fpm85/usr/bin/php | grep -E 'ssl|crypto'

Official PHP 8.4/8.5 support should not produce newly compiled binaries linked against an obsolete OpenSSL branch. Updating PHP alone does not provide a modern and maintainable runtime while its TLS and cryptographic functionality remains tied to OpenSSL 1.1.1t.

Please review the include and library settings I sent earlier and integrate them into the official CWP compiler instead of requiring administrators to patch every generated build manually.

Create an account or sign in to comment

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.