Skip to content

Commit 3000323

Browse files
authored
Merge pull request #226 from EngineScript/copilot/refactor-php-version-check
fix(php-update): deduplicate old-version detection, complete multi-version config migration and cleanup
2 parents c9e2cd9 + 7568443 commit 3000323

1 file changed

Lines changed: 43 additions & 28 deletions

File tree

scripts/update/php-update.sh

Lines changed: 43 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,13 @@ fi
3636

3737
# Auto-detect currently installed PHP-FPM version
3838
OLD_PHP_VERS=()
39+
declare -A _SEEN_OLD_PHP_VERS=()
3940
for ver in "${SUPPORTED_PHP_VERSIONS[@]}"; do
4041
if [[ "${ver}" != "${NEW_PHP_VER}" ]] && dpkg -l | grep -q "php${ver}-fpm"; then
41-
OLD_PHP_VERS+=("${ver}")
42+
if [[ -z "${_SEEN_OLD_PHP_VERS["${ver}"]+x}" ]]; then
43+
OLD_PHP_VERS+=("${ver}")
44+
_SEEN_OLD_PHP_VERS["${ver}"]=1
45+
fi
4246
fi
4347
done
4448

@@ -53,19 +57,21 @@ if [[ ${#OLD_PHP_VERS[@]} -eq 0 ]]; then
5357
fi
5458
fi
5559

56-
# Preserve existing variable name for downstream logic that expects a single source version.
60+
# Keep backward-compatible single-version variable for legacy downstream logic.
61+
# Migration logic must use MIGRATION_SOURCE_PHP_VERS to ensure all detected old versions are handled.
5762
OLD_PHP_VER="${OLD_PHP_VERS[0]}"
63+
MIGRATION_SOURCE_PHP_VERS=("${OLD_PHP_VERS[@]}")
5864

5965
echo ""
6066
echo "============================================================="
6167
echo ""
62-
echo "PHP Upgrade: Migrating from PHP ${OLD_PHP_VER} to PHP ${NEW_PHP_VER}"
68+
echo "PHP Upgrade: Migrating to PHP ${NEW_PHP_VER} from detected old version(s): ${MIGRATION_SOURCE_PHP_VERS[*]}"
6369
echo ""
6470
echo "============================================================="
6571
echo ""
6672

67-
echo "Detected PHP installation(s): ${OLD_PHP_VERS[*]}"
68-
echo "Proceeding with upgrade to PHP ${NEW_PHP_VER} (primary source version: ${OLD_PHP_VER})..."
73+
echo "Detected PHP installation(s): ${MIGRATION_SOURCE_PHP_VERS[*]}"
74+
echo "Proceeding with upgrade to PHP ${NEW_PHP_VER}..."
6975

7076
# Stop old PHP service
7177
echo "Stopping PHP ${OLD_PHP_VER} service..."
@@ -127,29 +133,34 @@ echo "Updating Nginx configuration for PHP ${NEW_PHP_VER}..."
127133

128134
# Update php-fpm.conf
129135
if [[ -f "/etc/nginx/globals/php-fpm.conf" ]]; then
130-
sed -i "s|php${OLD_PHP_VER}-fpm|php${NEW_PHP_VER}-fpm|g" "/etc/nginx/globals/php-fpm.conf"
131-
sed -i "s|php${OLD_PHP_VER}|php${NEW_PHP_VER}|g" "/etc/nginx/globals/php-fpm.conf"
136+
for _OLD_VER in "${MIGRATION_SOURCE_PHP_VERS[@]}"; do
137+
sed -E -i "s|php${_OLD_VER}(-fpm)?|php${NEW_PHP_VER}\1|g" "/etc/nginx/globals/php-fpm.conf"
138+
done
132139
fi
133140

134141
# Update all nginx site configurations
135142
for config_file in /etc/nginx/sites-available/*; do
136143
if [[ -f "$config_file" ]]; then
137-
sed -i "s|php${OLD_PHP_VER}-fpm|php${NEW_PHP_VER}-fpm|g" "$config_file"
138-
sed -i "s|php${OLD_PHP_VER}|php${NEW_PHP_VER}|g" "$config_file"
144+
for _OLD_VER in "${MIGRATION_SOURCE_PHP_VERS[@]}"; do
145+
sed -E -i "s|php${_OLD_VER}(-fpm)?|php${NEW_PHP_VER}\1|g" "$config_file"
146+
done
139147
fi
140148
done
141149

142150
# Update phpSysInfo configuration
143151
if [[ -f "/var/www/admin/tools/phpsysinfo/phpsysinfo.ini" ]]; then
144152
echo "Updating phpSysInfo configuration..."
145-
sed -i "s|php${OLD_PHP_VER}|php${NEW_PHP_VER}|g" "/var/www/admin/tools/phpsysinfo/phpsysinfo.ini"
153+
for _OLD_VER in "${MIGRATION_SOURCE_PHP_VERS[@]}"; do
154+
sed -E -i "s|php${_OLD_VER}(-fpm)?|php${NEW_PHP_VER}\1|g" "/var/www/admin/tools/phpsysinfo/phpsysinfo.ini"
155+
done
146156
fi
147157

148158
# Update admin control panel API configuration
149159
if [[ -f "/var/www/admin/control-panel/api.php" ]]; then
150160
echo "Updating admin control panel API configuration..."
151-
sed -i "s|php${OLD_PHP_VER}-fpm|php${NEW_PHP_VER}-fpm|g" "/var/www/admin/control-panel/api.php"
152-
sed -i "s|php${OLD_PHP_VER}|php${NEW_PHP_VER}|g" "/var/www/admin/control-panel/api.php"
161+
for _OLD_VER in "${MIGRATION_SOURCE_PHP_VERS[@]}"; do
162+
sed -E -i "s|php${_OLD_VER}(-fpm)?|php${NEW_PHP_VER}\1|g" "/var/www/admin/control-panel/api.php"
163+
done
153164
fi
154165

155166
# Start new PHP service
@@ -177,28 +188,32 @@ else
177188
exit 1
178189
fi
179190

180-
# Remove old PHP version
181-
echo "Removing PHP ${OLD_PHP_VER} installation..."
191+
# Remove old PHP version(s)
192+
echo "Removing old PHP installation(s)..."
182193

183-
# Stop and disable old PHP service
184-
systemctl stop "php${OLD_PHP_VER}-fpm" 2>/dev/null || true
185-
systemctl disable "php${OLD_PHP_VER}-fpm" 2>/dev/null || true
194+
for OLD_VER in "${OLD_PHP_VERS[@]}"; do
195+
echo "Removing PHP ${OLD_VER} installation..."
186196

187-
# Remove old PHP packages
188-
apt purge -y php${OLD_PHP_VER}* 2>/dev/null || true
197+
# Stop and disable old PHP service
198+
systemctl stop "php${OLD_VER}-fpm" 2>/dev/null || true
199+
systemctl disable "php${OLD_VER}-fpm" 2>/dev/null || true
189200

190-
# Remove old PHP configuration directory
191-
rm -rf "/etc/php/${OLD_PHP_VER}" 2>/dev/null || true
201+
# Remove old PHP packages
202+
apt purge -y php${OLD_VER}* 2>/dev/null || true
192203

193-
# Remove old PHP logrotate configuration
194-
rm -f "/etc/logrotate.d/php${OLD_PHP_VER}-fpm" 2>/dev/null || true
204+
# Remove old PHP configuration directory
205+
rm -rf "/etc/php/${OLD_VER}" 2>/dev/null || true
195206

196-
# Archive old log
197-
if [[ -f "/var/log/php/php${OLD_PHP_VER}-fpm.log" ]]; then
198-
mv "/var/log/php/php${OLD_PHP_VER}-fpm.log" "/var/log/php/php${OLD_PHP_VER}-fpm.log.old" 2>/dev/null || true
199-
fi
207+
# Remove old PHP logrotate configuration
208+
rm -f "/etc/logrotate.d/php${OLD_VER}-fpm" 2>/dev/null || true
200209

201-
echo "PHP ${OLD_PHP_VER} has been removed."
210+
# Archive old log
211+
if [[ -f "/var/log/php/php${OLD_VER}-fpm.log" ]]; then
212+
mv "/var/log/php/php${OLD_VER}-fpm.log" "/var/log/php/php${OLD_VER}-fpm.log.old" 2>/dev/null || true
213+
fi
214+
215+
echo "PHP ${OLD_VER} has been removed."
216+
done
202217

203218
# Cleanup
204219
/usr/local/bin/enginescript/scripts/functions/php-clean.sh 2>> /tmp/enginescript_install_errors.log

0 commit comments

Comments
 (0)