Intern:Hauptseite/Bplaced/PHP-ini-Konfiguration: Unterschied zwischen den Versionen
Aus ArtisanCommerce Dokumentation
Admin (Diskussion | Beiträge) Die Seite wurde neu angelegt: „= PHP-CGI Wrapper & PHP-ini-Konfiguration auf bplaced = == Übersicht == Dieses Skript dient als Wrapper für PHP-CGI auf Shared-Hosting-Systemen wie bplaced. Ziele: * Automatische PHP-Versionserkennung * Dynamische Pfad- und Modulkonfiguration * OpenBaseDir-Management * Integration von Composer-, Mailparse- und IMAP-Pfaden * Logging & Debugging == Aufbau des Wrappers == === 1. Debug-Flag & Argumente === <syntaxhighlight lang="bash"> DEBUG=0 for ARG…“ |
Admin (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
| Zeile 136: | Zeile 136: | ||
* PHP-Version → Module/Pfade unterschiedlich | * PHP-Version → Module/Pfade unterschiedlich | ||
* Debug/Logging → CGI-Output zerstörbar | * Debug/Logging → CGI-Output zerstörbar | ||
== Code-Uebersicht == | |||
<syntaxhighlight lang="bash" line> | |||
#!/bin/bash | |||
############################################################################### | |||
# PHP CGI WRAPPER | |||
# | |||
# Logik: | |||
# 1. Debug-Modus & Pfad-Initialisierung | |||
# 2. Fehlerbehandlung & Umgebungsvariablen | |||
# 3. Dynamische PHP-Versionserkennung (.php-version oder Projektpfad) | |||
# 4. Konfiguration von PHP_INI_SCAN_DIR & Open_Basedir (OB) | |||
# 5. Modul-Check (IonCube, Mailparse, IMAP) | |||
# 6. Finaler PHP-CGI Call | |||
############################################################################### | |||
# --- 1. DEBUG-FLAG AUS ARGUMENTEN --- | |||
# Prüft, ob -vv übergeben wurde, um zusätzliche Infos auszugeben. | |||
DEBUG=0 | |||
for ARG in "$@"; do | |||
if [ "$ARG" = "-vv" ]; then | |||
DEBUG=1 | |||
break | |||
fi | |||
done | |||
# --- 2. SYSTEM PATH FIX --- | |||
# Priorisiert die bplaced-spezifischen Binaries in der PATH-Variable. | |||
ORIGINAL_PATH="$PATH" | |||
export PATH="/usr/share/7.4/ext/bin:/usr/share/8.2/ext/bin:/usr/share/8.3/ext/bin:$ORIGINAL_PATH" | |||
# --- 3. WRAPPER-SIGNAL --- | |||
# Signalisiert den Start des Wrappers bei aktivem Debugging. | |||
[[ "$DEBUG" -eq 1 ]] && echo "PHPWRAPPER_CALL" | |||
# --- 4. OUTPUT-KONTROLLE --- | |||
# Sichert die Standard-Descriptoren für spätere Verwendung. | |||
exec 3>&1 4>&2 | |||
# --- 5. FEHLERBEHANDLUNG --- | |||
# Einfacher Trap, um Fehlerzeilen im Debug-Modus auszugeben. | |||
handle_error() { | |||
[[ "$DEBUG" -eq 1 ]] && echo "Error on line $1" | |||
} | |||
trap 'handle_error $LINENO' ERR | |||
# --- 6. LAUFZEIT- & KONTEXTDATEN --- | |||
datetime=$(date +"%Y-%m-%d %H:%M:%S") | |||
calling_process_info=$(ps -p $$ | tail -n 1) | |||
current_directory=$(pwd) | |||
script_name="$0" | |||
# --- 7. USER- & HOST-KONTEXT --- | |||
USERNAME='peterpatoschka' | |||
HOST='server6.bplaced.net' | |||
source /users/_core/${USERNAME}/env | |||
# --- 8. PHP-VERSION ERKENNUNG --- | |||
# Ermittelt die PHP-Version basierend auf Verzeichnissen oder .php-version Dateien. | |||
PV="7.4" # Initialer Default | |||
detect_php_version_file() { | |||
local dir="$current_directory" | |||
local BASE_PATH_LOCAL="/users/${USERNAME}/www" | |||
# Sonderregel für Support-Projekt | |||
if [[ "$dir" == "$BASE_PATH_LOCAL/support"* ]]; then | |||
PV="8.3" | |||
[[ "$DEBUG" -eq 1 ]] && echo "Forced PHP 8.3 for support project" | |||
return | |||
fi | |||
# Rekursive Suche nach .php-version Datei nach oben bis zum Root | |||
while [[ "$dir" != "/" && "$dir" == "$BASE_PATH_LOCAL"* ]]; do | |||
if [[ -f "$dir/.php-version" ]]; then | |||
local version | |||
version=$(tr -d '[:space:]' < "$dir/.php-version") | |||
if [[ "$version" =~ ^8\.[2-3]$ ]]; then | |||
PV="$version" | |||
return | |||
fi | |||
fi | |||
dir=$(dirname "$dir") | |||
done | |||
} | |||
detect_php_version_file | |||
# Wenn PHP 8.x genutzt wird, erzwinge /ext Variante | |||
if [[ "$PV" =~ ^8\. ]]; then | |||
PR="/ext" | |||
fi | |||
# --- 9. PHP BASIS KONFIGURATION --- | |||
# Setzt die Pfade für die INI-Dateien basierend auf der erkannten Version. | |||
export PHP_INI_SCAN_DIR="/users/${USERNAME}/etc/php/${PV}" | |||
export PHPRC="${PHP_INI_SCAN_DIR}/php.ini" | |||
# --- 10. PFADDEFINITIONEN --- | |||
BASE_PATH="/users/${USERNAME}/www" | |||
TEMP_PATH="/users/_temp/${USERNAME}" | |||
COMPOSER_CONFIG_PATH="/users/${USERNAME}/.config/composer/" | |||
COMPOSER_CACHE_PATH="/users/${USERNAME}/.cache/composer/" | |||
COMPOSER_SHARE_PATH="/users/${USERNAME}/.local/share/composer/" | |||
PHP_BASE_PATH="/usr/share/7.4/ext/bin/php" | |||
DIRTYFIX_PATH="/users/${USERNAME}/www/shopwareshow/release/vendor/" | |||
# --- 11. OPEN_BASEDIR (OB) - BASIS --- | |||
PHP_CONFIG_PATH="/users/${USERNAME}/etc/php/" | |||
# Grundberechtigung für User, Temp und SSL-Zertifikate | |||
OB="/users/${USERNAME}/:/users/_temp/${USERNAME}:/etc/ssl/certs/:/etc/ca-certificates/" | |||
# Composer-Pfade hinzufügen | |||
OB="${OB}:${COMPOSER_CONFIG_PATH}:${COMPOSER_CACHE_PATH}:${COMPOSER_SHARE_PATH}" | |||
# DIRTYFIX hinzufügen | |||
OB="${OB}:${DIRTYFIX_PATH}" | |||
# --- 12. PROJEKT / RELEASE ERKENNUNG (OB ERWEITERUNG) --- | |||
# Durchsucht www-Verzeichnis nach Projekten und deren Releases (für Vendor-Zugriff). | |||
PROJECT_PATHS=() | |||
for dir in "${BASE_PATH}"/*; do | |||
[[ -d "$dir" ]] && PROJECT_PATHS+=("$dir") | |||
done | |||
RELEASE_PATHS=() | |||
for PROJECT_PATH in "${PROJECT_PATHS[@]}"; do | |||
if [[ -d "${PROJECT_PATH}/app/releases" ]]; then | |||
for dir in "${PROJECT_PATH}/app/releases/"*; do | |||
[[ -d "$dir" ]] && RELEASE_PATHS+=("$dir") | |||
done | |||
fi | |||
done | |||
for RELEASE_PATH in "${RELEASE_PATHS[@]}"; do | |||
OB="${OB}:${RELEASE_PATH}/vendor/" | |||
OB="${OB}:${RELEASE_PATH}/vendor/autoload.php" | |||
done | |||
[[ "$DEBUG" -eq 1 ]] && echo "Generated OB: \"$OB\"" | |||
# --- 13. HTTP-/CGI-VARIABLEN INITIALISIERUNG --- | |||
IC='' # IonCube | |||
MP='' # Mailparse | |||
IMAP='' # IMAP | |||
# --- 14. PHP MODUL LOGIK (IONCUBE) --- | |||
[[ "$HTTP_IC" == "1" ]] && IC="-d zend_extension=/etc/bplaced/php/${PV}/ioncube_loader_lin_${PV}.so" | |||
# --- 15. PHP MODUL LOGIK (MAILPARSE - NUR PHP 8.3) --- | |||
MAILPARSE_SO="/etc/bplaced/php/8.3/mailparse.so" | |||
if [[ "$PV" == "8.3" && -f "$MAILPARSE_SO" ]]; then | |||
MP="-d extension=${MAILPARSE_SO}" | |||
[[ "$DEBUG" -eq 1 ]] && echo "Loaded mailparse for PHP 8.3" | |||
fi | |||
# --- 16. PHP MODUL LOGIK (IMAP - NUR PHP 8.3) --- | |||
IMAP_SO="/etc/bplaced/php/8.3/imap.so" | |||
if [[ "$PV" == "8.3" && -f "$IMAP_SO" ]]; then | |||
IMAP="-d extension=${IMAP_SO}" | |||
[[ "$DEBUG" -eq 1 ]] && echo "Loaded IMAP for PHP 8.3" | |||
fi | |||
# --- 17. PHP CGI KOMMANDO DEFINITION --- | |||
CGI=( | |||
/usr/share/${PV}${PR}/bin/php | |||
-c /users/${USERNAME}/etc/php/${PV}${PR}/php.ini | |||
$IC | |||
$MP | |||
$IMAP | |||
-d curl.cainfo=/etc/ssl/certs/ca-certificates.crt | |||
-d memory_limit=${MM:=256}M | |||
-d max_execution_time=${ET:=480} | |||
-d open_basedir="${OB}" | |||
-d upload_tmp_dir="${TEMP_PATH}/" | |||
-d session.save_path="${TEMP_PATH}/" | |||
-d soap.wsdl_cache_dir="${TEMP_PATH}/" | |||
-d sys_temp_dir="${TEMP_PATH}/" | |||
-d sendmail_path="/usr/bin/msmtp -t -i --from='${USERNAME}@${HOST}'" | |||
) | |||
# --- 18. LOGGING --- | |||
# Schreibt den Aufruf in das zentrale Logfile des Users. | |||
echo -e "${datetime}\t${calling_process_info}, ${current_directory}, ${script_name}, ${PV}" \ | |||
>> "/users/${USERNAME}/php_access_logfile" | |||
# --- 19. CLEANUP --- | |||
# Entfernt genutzte Variablen aus der Umgebung vor dem exec. | |||
unset HTTP_ET HTTP_IC HTTP_MM HTTP_PV HTTP_PR HTTP_SA | |||
unset ET IC MM PR SA MP IMAP | |||
# --- 20. OUTPUT WIEDER AKTIVIEREN --- | |||
exec >&3 2>&4 | |||
exec 3>&- 4>&- | |||
# --- 21. PHP AUSFÜHREN --- | |||
# Finaler Aufruf der PHP-Binary mit allen Argumenten. | |||
[[ "$DEBUG" -eq 1 ]] && echo "${CGI[@]}" | |||
exec "${CGI[@]}" "$@" | |||
</syntaxhighlight> | |||
Aktuelle Version vom 25. Februar 2026, 21:49 Uhr
PHP-CGI Wrapper & PHP-ini-Konfiguration auf bplaced
Übersicht
Dieses Skript dient als Wrapper für PHP-CGI auf Shared-Hosting-Systemen wie bplaced. Ziele:
- Automatische PHP-Versionserkennung
- Dynamische Pfad- und Modulkonfiguration
- OpenBaseDir-Management
- Integration von Composer-, Mailparse- und IMAP-Pfaden
- Logging & Debugging
Aufbau des Wrappers
1. Debug-Flag & Argumente
DEBUG=0
for ARG in "$@"; do
if [ "$ARG" = "-vv" ]; then
DEBUG=1
break
fi
done
- Prüft, ob `-vv` übergeben wird, um Debug-Ausgaben zu aktivieren.
- Fallstrick: Zu viele Debug-Ausgaben können CGI-Output zerstören.
2. System-Pfad Fix
ORIGINAL_PATH="$PATH"
export PATH="/usr/share/7.4/ext/bin:/usr/share/8.2/ext/bin:/usr/share/8.3/ext/bin:$ORIGINAL_PATH"
- Priorisiert bplaced-spezifische PHP-Binaries.
- Fallstrick: Fehlende Binaries verhindern Script-Ausführung.
3. Wrapper-Signal
[[ "$DEBUG" -eq 1 ]] && echo "PHPWRAPPER_CALL"
- Signalisiert den Start des Wrappers bei Debug-Modus.
4. Output-Kontrolle
exec 3>&1 4>&2
- Speichert stdout & stderr für spätere Wiederherstellung.
- Fallstrick: Falsches Zurücksetzen unterdrückt Ausgabe.
5. Fehlerbehandlung
handle_error() {
[[ "$DEBUG" -eq 1 ]] && echo "Error on line $1"
}
trap 'handle_error $LINENO' ERR
- Fängt Script-Fehler ab.
- Fallstrick: Subshell-Fehler werden nicht immer erfasst.
6. Laufzeit- & Kontextdaten
datetime=$(date +"%Y-%m-%d %H:%M:%S")
calling_process_info=$(ps -p $$ | tail -n 1)
current_directory=$(pwd)
script_name="$0"
- Nützliche Metadaten für Logging.
7. User- & Host-Kontext
USERNAME='peterpatoschka'
HOST='server6.bplaced.net'
source /users/_core/${USERNAME}/env
- Lädt Benutzer-Umgebungsvariablen.
- Fallstrick: `env` muss lesbar sein.
8. PHP-Versionserkennung
- Erkennung via `.php-version` oder Verzeichnisregel für Support-Projekte.
- Fallstrick: Leerzeichen in `.php-version` oder fehlende Datei verhindern korrekte Erkennung.
9. PHP Basis-Konfiguration
export PHP_INI_SCAN_DIR="/users/${USERNAME}/etc/php/${PV}"
export PHPRC="${PHP_INI_SCAN_DIR}/php.ini"
- Bestimmt benutzerdefinierte PHP-INIs.
- Fallstrick: Falsche Pfade verhindern Modul-Laden.
10. Pfaddefinitionen
- BASE_PATH, TEMP_PATH, Composer-Pfade, Vendor-Pfade.
- Fallstrick: Schreibrechte prüfen.
11. OpenBaseDir
OB="/users/${USERNAME}/:/users/_temp/${USERNAME}:/etc/ssl/certs/:/etc/ca-certificates/"
OB="${OB}:${COMPOSER_CONFIG_PATH}:${COMPOSER_CACHE_PATH}:${COMPOSER_SHARE_PATH}"
OB="${OB}:${DIRTYFIX_PATH}"
- Limitiert Dateizugriffe auf sichere Pfade.
- Fallstrick: Fehlerhafte OB-Pfade blockieren Zugriff auf Temp, Composer, SSL.
12. Projekt- / Release-Erkennung
- Fügt Vendor-Pfade dynamisch zu OB hinzu.
- Fallstrick: Einzelne Dateien als OB-Pfad können fehlschlagen.
13. PHP-Module
- IonCube, Mailparse, IMAP werden nur geladen, wenn vorhanden.
- Fallstrick: Fehlende `.so` Dateien verhindern PHP-Start.
14. PHP-CGI Kommando
CGI=(
/usr/share/${PV}${PR}/bin/php
-c /users/${USERNAME}/etc/php/${PV}${PR}/php.ini
$IC $MP $IMAP
-d curl.cainfo=/etc/ssl/certs/ca-certificates.crt
-d memory_limit=${MM:=256}M
-d open_basedir="${OB}"
-d upload_tmp_dir="${TEMP_PATH}/"
-d session.save_path="${TEMP_PATH}/"
)
- Fallstricke: curl-Zertifikate, Memory-Limit, Schreibrechte beachten.
15. Logging
- Aufruf wird in zentralem Logfile protokolliert.
- Fallstrick: Logfile muss beschreibbar sein.
16. Cleanup & Ausführung
- Temporäre Variablen löschen und PHP-CGI ausführen.
Zusammenfassung Fallstränge
- OpenBaseDir → Zugriff auf Temp, Composer, SSL
- PHP-Module → IonCube, Mailparse, IMAP
- SSL → curl.cainfo
- Schreibrechte → Temp-Ordner, Logfile
- PHP-Version → Module/Pfade unterschiedlich
- Debug/Logging → CGI-Output zerstörbar
Code-Uebersicht
#!/bin/bash
###############################################################################
# PHP CGI WRAPPER
#
# Logik:
# 1. Debug-Modus & Pfad-Initialisierung
# 2. Fehlerbehandlung & Umgebungsvariablen
# 3. Dynamische PHP-Versionserkennung (.php-version oder Projektpfad)
# 4. Konfiguration von PHP_INI_SCAN_DIR & Open_Basedir (OB)
# 5. Modul-Check (IonCube, Mailparse, IMAP)
# 6. Finaler PHP-CGI Call
###############################################################################
# --- 1. DEBUG-FLAG AUS ARGUMENTEN ---
# Prüft, ob -vv übergeben wurde, um zusätzliche Infos auszugeben.
DEBUG=0
for ARG in "$@"; do
if [ "$ARG" = "-vv" ]; then
DEBUG=1
break
fi
done
# --- 2. SYSTEM PATH FIX ---
# Priorisiert die bplaced-spezifischen Binaries in der PATH-Variable.
ORIGINAL_PATH="$PATH"
export PATH="/usr/share/7.4/ext/bin:/usr/share/8.2/ext/bin:/usr/share/8.3/ext/bin:$ORIGINAL_PATH"
# --- 3. WRAPPER-SIGNAL ---
# Signalisiert den Start des Wrappers bei aktivem Debugging.
[[ "$DEBUG" -eq 1 ]] && echo "PHPWRAPPER_CALL"
# --- 4. OUTPUT-KONTROLLE ---
# Sichert die Standard-Descriptoren für spätere Verwendung.
exec 3>&1 4>&2
# --- 5. FEHLERBEHANDLUNG ---
# Einfacher Trap, um Fehlerzeilen im Debug-Modus auszugeben.
handle_error() {
[[ "$DEBUG" -eq 1 ]] && echo "Error on line $1"
}
trap 'handle_error $LINENO' ERR
# --- 6. LAUFZEIT- & KONTEXTDATEN ---
datetime=$(date +"%Y-%m-%d %H:%M:%S")
calling_process_info=$(ps -p $$ | tail -n 1)
current_directory=$(pwd)
script_name="$0"
# --- 7. USER- & HOST-KONTEXT ---
USERNAME='peterpatoschka'
HOST='server6.bplaced.net'
source /users/_core/${USERNAME}/env
# --- 8. PHP-VERSION ERKENNUNG ---
# Ermittelt die PHP-Version basierend auf Verzeichnissen oder .php-version Dateien.
PV="7.4" # Initialer Default
detect_php_version_file() {
local dir="$current_directory"
local BASE_PATH_LOCAL="/users/${USERNAME}/www"
# Sonderregel für Support-Projekt
if [[ "$dir" == "$BASE_PATH_LOCAL/support"* ]]; then
PV="8.3"
[[ "$DEBUG" -eq 1 ]] && echo "Forced PHP 8.3 for support project"
return
fi
# Rekursive Suche nach .php-version Datei nach oben bis zum Root
while [[ "$dir" != "/" && "$dir" == "$BASE_PATH_LOCAL"* ]]; do
if [[ -f "$dir/.php-version" ]]; then
local version
version=$(tr -d '[:space:]' < "$dir/.php-version")
if [[ "$version" =~ ^8\.[2-3]$ ]]; then
PV="$version"
return
fi
fi
dir=$(dirname "$dir")
done
}
detect_php_version_file
# Wenn PHP 8.x genutzt wird, erzwinge /ext Variante
if [[ "$PV" =~ ^8\. ]]; then
PR="/ext"
fi
# --- 9. PHP BASIS KONFIGURATION ---
# Setzt die Pfade für die INI-Dateien basierend auf der erkannten Version.
export PHP_INI_SCAN_DIR="/users/${USERNAME}/etc/php/${PV}"
export PHPRC="${PHP_INI_SCAN_DIR}/php.ini"
# --- 10. PFADDEFINITIONEN ---
BASE_PATH="/users/${USERNAME}/www"
TEMP_PATH="/users/_temp/${USERNAME}"
COMPOSER_CONFIG_PATH="/users/${USERNAME}/.config/composer/"
COMPOSER_CACHE_PATH="/users/${USERNAME}/.cache/composer/"
COMPOSER_SHARE_PATH="/users/${USERNAME}/.local/share/composer/"
PHP_BASE_PATH="/usr/share/7.4/ext/bin/php"
DIRTYFIX_PATH="/users/${USERNAME}/www/shopwareshow/release/vendor/"
# --- 11. OPEN_BASEDIR (OB) - BASIS ---
PHP_CONFIG_PATH="/users/${USERNAME}/etc/php/"
# Grundberechtigung für User, Temp und SSL-Zertifikate
OB="/users/${USERNAME}/:/users/_temp/${USERNAME}:/etc/ssl/certs/:/etc/ca-certificates/"
# Composer-Pfade hinzufügen
OB="${OB}:${COMPOSER_CONFIG_PATH}:${COMPOSER_CACHE_PATH}:${COMPOSER_SHARE_PATH}"
# DIRTYFIX hinzufügen
OB="${OB}:${DIRTYFIX_PATH}"
# --- 12. PROJEKT / RELEASE ERKENNUNG (OB ERWEITERUNG) ---
# Durchsucht www-Verzeichnis nach Projekten und deren Releases (für Vendor-Zugriff).
PROJECT_PATHS=()
for dir in "${BASE_PATH}"/*; do
[[ -d "$dir" ]] && PROJECT_PATHS+=("$dir")
done
RELEASE_PATHS=()
for PROJECT_PATH in "${PROJECT_PATHS[@]}"; do
if [[ -d "${PROJECT_PATH}/app/releases" ]]; then
for dir in "${PROJECT_PATH}/app/releases/"*; do
[[ -d "$dir" ]] && RELEASE_PATHS+=("$dir")
done
fi
done
for RELEASE_PATH in "${RELEASE_PATHS[@]}"; do
OB="${OB}:${RELEASE_PATH}/vendor/"
OB="${OB}:${RELEASE_PATH}/vendor/autoload.php"
done
[[ "$DEBUG" -eq 1 ]] && echo "Generated OB: \"$OB\""
# --- 13. HTTP-/CGI-VARIABLEN INITIALISIERUNG ---
IC='' # IonCube
MP='' # Mailparse
IMAP='' # IMAP
# --- 14. PHP MODUL LOGIK (IONCUBE) ---
[[ "$HTTP_IC" == "1" ]] && IC="-d zend_extension=/etc/bplaced/php/${PV}/ioncube_loader_lin_${PV}.so"
# --- 15. PHP MODUL LOGIK (MAILPARSE - NUR PHP 8.3) ---
MAILPARSE_SO="/etc/bplaced/php/8.3/mailparse.so"
if [[ "$PV" == "8.3" && -f "$MAILPARSE_SO" ]]; then
MP="-d extension=${MAILPARSE_SO}"
[[ "$DEBUG" -eq 1 ]] && echo "Loaded mailparse for PHP 8.3"
fi
# --- 16. PHP MODUL LOGIK (IMAP - NUR PHP 8.3) ---
IMAP_SO="/etc/bplaced/php/8.3/imap.so"
if [[ "$PV" == "8.3" && -f "$IMAP_SO" ]]; then
IMAP="-d extension=${IMAP_SO}"
[[ "$DEBUG" -eq 1 ]] && echo "Loaded IMAP for PHP 8.3"
fi
# --- 17. PHP CGI KOMMANDO DEFINITION ---
CGI=(
/usr/share/${PV}${PR}/bin/php
-c /users/${USERNAME}/etc/php/${PV}${PR}/php.ini
$IC
$MP
$IMAP
-d curl.cainfo=/etc/ssl/certs/ca-certificates.crt
-d memory_limit=${MM:=256}M
-d max_execution_time=${ET:=480}
-d open_basedir="${OB}"
-d upload_tmp_dir="${TEMP_PATH}/"
-d session.save_path="${TEMP_PATH}/"
-d soap.wsdl_cache_dir="${TEMP_PATH}/"
-d sys_temp_dir="${TEMP_PATH}/"
-d sendmail_path="/usr/bin/msmtp -t -i --from='${USERNAME}@${HOST}'"
)
# --- 18. LOGGING ---
# Schreibt den Aufruf in das zentrale Logfile des Users.
echo -e "${datetime}\t${calling_process_info}, ${current_directory}, ${script_name}, ${PV}" \
>> "/users/${USERNAME}/php_access_logfile"
# --- 19. CLEANUP ---
# Entfernt genutzte Variablen aus der Umgebung vor dem exec.
unset HTTP_ET HTTP_IC HTTP_MM HTTP_PV HTTP_PR HTTP_SA
unset ET IC MM PR SA MP IMAP
# --- 20. OUTPUT WIEDER AKTIVIEREN ---
exec >&3 2>&4
exec 3>&- 4>&-
# --- 21. PHP AUSFÜHREN ---
# Finaler Aufruf der PHP-Binary mit allen Argumenten.
[[ "$DEBUG" -eq 1 ]] && echo "${CGI[@]}"
exec "${CGI[@]}" "$@"
