> ## Content Index
> Fetch the complete content index at: https://ostreff.info/llms.txt
> Use this file to discover other available public pages before exploring further.

# Change php version on FreeBSD
- URL: https://ostreff.info/change-php-version-on-freebsd/
- Published: 2026-01-12T12:00:24.000Z
- Updated: 2026-01-12T12:00:24.000Z
- Description: Simplify changing of php version on FreeBSD
- Author: Jordan Ostreff
- Tags: #PHP, FreeBSD

Here is my script which helps me to change to different [PHP](https://www.php.net/releases/8.5/en.php?ref=ostreff.info#features) version on [FreeBSD](https://www.freebsd.org/?ref=ostreff.info):

```bash
#!/usr/local/bin/bash

# 1. Автоматично откриване на текущата версия
# Търсим пакет, чийто Origin е lang/phpXX
OLD_V_FULL=$(pkg query -e '%o ~ lang/php*' '%v' | head -n 1)
OLD_V_SHORT=$(pkg query -e '%o ~ lang/php*' '%n' | sed 's/php//' | head -n 1)

if [ -z "$OLD_V_SHORT" ]; then
    echo "Грешка: Не беше открита инсталирана PHP версия през pkg."
    exit 1
fi

# 2. Проверка за подаден аргумент за нова версия
if [ "$#" -ne 1 ]; then
    echo "Текуща версия: $OLD_V_SHORT ($OLD_V_FULL)"
    echo "Употреба: $0 <нова_версия>"
    echo "Пример: $0 85"
    exit 1
fi

NEW_V=$1

# 3. Валидация на версиите (само 82, 83, 84, 85)
PATTERN="^(82|83|84|85)$"
if [[ ! $OLD_V_SHORT =~ $PATTERN ]] || [[ ! $NEW_V =~ $PATTERN ]]; then
    echo "Грешка: Версиите трябва да бъдат една от следните: 82, 83, 84, 85"
    echo "Открита текуща версия: $OLD_V_SHORT"
    exit 1
fi

if [ "$OLD_V_SHORT" == "$NEW_V" ]; then
    echo "Текущата версия вече е $NEW_V. Няма нужда от ъпгрейд."
    exit 0
fi

LIST_DEL=""
LIST_INS=""
MAIN_PHP="lang/php$NEW_V"

# 4. Генериране на списъци за замяна
for FILE in $(pkg info | grep "php$OLD_V_SHORT" | cut -f1 -d' ') ; do
    PKGNAME=$(pkg info "$FILE" | grep 'Origin    ' | cut -f2 -d':' | xargs) ;
    NEWPKGNAME="${PKGNAME//php$OLD_V_SHORT/php$NEW_V}" ;
    
    LIST_DEL="$LIST_DEL $FILE";
    
    if [ "$NEWPKGNAME" != "$MAIN_PHP" ]; then
        LIST_INS="$LIST_INS $NEWPKGNAME";
    fi
done

echo "### ОТКРИТА ВЕРСИЯ: $OLD_V_SHORT -> ЦЕЛЕВА ВЕРСИЯ: $NEW_V ###"
echo "pkg delete -f $LIST_DEL"
echo "portmaster $MAIN_PHP && portmaster $LIST_INS"
```