Intern:Hauptseite/Bplaced/PHP-ini-Konfiguration
Aus ArtisanCommerce Dokumentation
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
