403Webshell
Server IP : 202.61.199.114  /  Your IP : 216.73.217.139
Web Server : nginx/1.22.1
System : Linux de.arni-solutions.de 6.1.0-49-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.174-1 (2026-05-26) x86_64
User : web20 ( 1018)
PHP Version : 8.4.23
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /var/www/clients/client2/web32/web/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/clients/client2/web32/web/start-local.sh
#!/usr/bin/env bash
# ============================================================
# taschenmuschi-kaufen.de — Local Dev Server Manager
# ============================================================
# Startet einen lokalen PHP-Server aus dem WordPress-Root.
# Standard-Port: 8090
# PID-Datei:     .local-server.pid
# Log-Datei:     .local-server.log
#
# Usage:
#   ./start-local.sh           — interaktives Menü
#   ./start-local.sh start     — Server starten (Port 8090)
#   ./start-local.sh start 8123— Server starten auf Port 8123
#   ./start-local.sh stop      — Server stoppen
#   ./start-local.sh status    — Status anzeigen
#   ./start-local.sh logs      — Letzte Logs anzeigen
#   ./start-local.sh open      — Browser öffnen
# ============================================================

set -u

ROOT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
cd "$ROOT_DIR" || exit 1

PID_FILE="$ROOT_DIR/.local-server.pid"
LOG_FILE="$ROOT_DIR/.local-server.log"
DEFAULT_PORT=8090
HOST="localhost"
ROUTER="$ROOT_DIR/router.php"

# --- Farben ---
if [[ -t 1 ]]; then
    C_BOLD="\033[1m"
    C_DIM="\033[2m"
    C_RED="\033[31m"
    C_GREEN="\033[32m"
    C_YELLOW="\033[33m"
    C_BLUE="\033[34m"
    C_MAGENTA="\033[35m"
    C_CYAN="\033[36m"
    C_RESET="\033[0m"
else
    C_BOLD=""; C_DIM=""; C_RED=""; C_GREEN=""; C_YELLOW=""; C_BLUE=""; C_MAGENTA=""; C_CYAN=""; C_RESET=""
fi

print_header() {
    printf "\n${C_BOLD}${C_MAGENTA}╭──────────────────────────────────────────────────────╮${C_RESET}\n"
    printf "${C_BOLD}${C_MAGENTA}│${C_RESET}  ${C_BOLD}taschenmuschi-kaufen.de${C_RESET}  ·  Local Dev Server  ${C_BOLD}${C_MAGENTA}│${C_RESET}\n"
    printf "${C_BOLD}${C_MAGENTA}╰──────────────────────────────────────────────────────╯${C_RESET}\n"
}

info()  { printf "${C_CYAN}ℹ${C_RESET}  %s\n" "$1"; }
ok()    { printf "${C_GREEN}✔${C_RESET}  %s\n" "$1"; }
warn()  { printf "${C_YELLOW}⚠${C_RESET}  %s\n" "$1"; }
err()   { printf "${C_RED}✖${C_RESET}  %s\n" "$1"; }

# --- Helpers ---

is_port_in_use() {
    local port=$1
    if command -v ss >/dev/null 2>&1; then
        ss -ltn "( sport = :$port )" 2>/dev/null | grep -q ":$port"
    elif command -v lsof >/dev/null 2>&1; then
        lsof -iTCP:"$port" -sTCP:LISTEN >/dev/null 2>&1
    elif command -v netstat >/dev/null 2>&1; then
        netstat -ltn 2>/dev/null | grep -q ":$port "
    else
        return 1
    fi
}

is_server_running() {
    [[ -f "$PID_FILE" ]] || return 1
    local pid
    pid=$(<"$PID_FILE")
    [[ -n "$pid" ]] && kill -0 "$pid" 2>/dev/null
}

current_port_from_log() {
    if [[ -f "$LOG_FILE" ]]; then
        grep -oE "Development Server.*started" "$LOG_FILE" 2>/dev/null | tail -1 >/dev/null
        grep -oE "$HOST:[0-9]+" "$LOG_FILE" 2>/dev/null | head -1 | cut -d: -f2
    fi
}

ensure_php() {
    if ! command -v php >/dev/null 2>&1; then
        err "PHP ist nicht installiert. Bitte zuerst PHP installieren."
        return 1
    fi
}

# --- Aktionen ---

start_server() {
    local port=${1:-$DEFAULT_PORT}

    ensure_php || return 1

    if is_server_running; then
        warn "Server läuft bereits (PID $(<"$PID_FILE")). Stoppe ihn zuerst."
        return 1
    fi

    if is_port_in_use "$port"; then
        err "Port $port ist bereits belegt. Wähle einen anderen Port."
        return 1
    fi

    # Eigener Router (router.php): liefert statische Assets + wp-admin/index.php direkt aus
    # und reicht alle übrigen Requests an WordPress' index.php weiter (Pretty Permalinks).
    #
    # PHP_CLI_SERVER_WORKERS (PHP ≥ 7.4): forkt N Worker-Prozesse, sodass langlaufende
    # Requests (z.B. AJAX-Import) nicht den gesamten Server blockieren. 4 Worker reichen
    # für typisches lokales Browsen + parallelen Hintergrund-Job.
    local workers=${PHP_CLI_SERVER_WORKERS:-4}
    info "Starte PHP-Server auf ${C_BOLD}http://$HOST:$port${C_RESET} (Workers=$workers) …"
    PHP_CLI_SERVER_WORKERS="$workers" nohup php -S "$HOST:$port" -t "$ROOT_DIR" "$ROUTER" \
        > "$LOG_FILE" 2>&1 &
    local pid=$!
    echo "$pid" > "$PID_FILE"

    sleep 0.6
    if is_server_running; then
        ok "Server läuft. PID=$pid"
        ok "Adresse: ${C_BOLD}http://$HOST:$port${C_RESET}"
        ok "Logs:    $LOG_FILE"
    else
        err "Server konnte nicht gestartet werden. Siehe Log:"
        tail -n 20 "$LOG_FILE" 2>/dev/null
        rm -f "$PID_FILE"
        return 1
    fi
}

stop_server() {
    if ! is_server_running; then
        warn "Es läuft kein Server (PID-Datei fehlt oder Prozess tot)."
        rm -f "$PID_FILE"
        return 0
    fi
    local pid
    pid=$(<"$PID_FILE")
    info "Stoppe Server (PID $pid) …"
    kill "$pid" 2>/dev/null
    sleep 0.4
    if kill -0 "$pid" 2>/dev/null; then
        warn "Sanftes Stoppen fehlgeschlagen — sende SIGKILL."
        kill -9 "$pid" 2>/dev/null || true
        sleep 0.2
    fi
    rm -f "$PID_FILE"
    ok "Server gestoppt."
}

server_status() {
    if is_server_running; then
        local pid port
        pid=$(<"$PID_FILE")
        port=$(current_port_from_log)
        port=${port:-$DEFAULT_PORT}
        ok "Server läuft. PID=$pid · http://$HOST:$port"
    else
        info "Kein Server aktiv."
    fi
}

show_logs() {
    if [[ ! -f "$LOG_FILE" ]]; then
        warn "Keine Logs vorhanden."
        return 0
    fi
    info "Letzte 30 Zeilen aus $LOG_FILE :"
    printf "${C_DIM}"
    tail -n 30 "$LOG_FILE"
    printf "${C_RESET}\n"
}

open_browser() {
    local port
    port=$(current_port_from_log)
    port=${port:-$DEFAULT_PORT}
    local url="http://$HOST:$port"

    if ! is_server_running; then
        warn "Server läuft nicht. Bitte zuerst starten."
        return 1
    fi

    info "Öffne $url im Browser …"
    if command -v xdg-open >/dev/null 2>&1; then
        xdg-open "$url" >/dev/null 2>&1 &
    elif command -v open >/dev/null 2>&1; then
        open "$url"
    elif command -v gio >/dev/null 2>&1; then
        gio open "$url" >/dev/null 2>&1 &
    else
        warn "Kein Browser-Opener gefunden. Öffne manuell: $url"
    fi
}

# --- Interaktives Menü ---

ask_port() {
    local port
    read -r -p "Port (default 8090): " port
    port=${port:-8090}
    if ! [[ "$port" =~ ^[0-9]+$ ]] || (( port < 1 || port > 65535 )); then
        err "Ungültiger Port."
        return 1
    fi
    start_server "$port"
}

interactive_menu() {
    while true; do
        print_header
        server_status
        echo
        printf "  ${C_BOLD}1${C_RESET}  Server starten auf Port ${C_BOLD}$DEFAULT_PORT${C_RESET}\n"
        printf "  ${C_BOLD}2${C_RESET}  Anderen Port wählen\n"
        printf "  ${C_BOLD}3${C_RESET}  Server stoppen\n"
        printf "  ${C_BOLD}4${C_RESET}  Status anzeigen\n"
        printf "  ${C_BOLD}5${C_RESET}  Logs anzeigen\n"
        printf "  ${C_BOLD}6${C_RESET}  Browser öffnen\n"
        printf "  ${C_BOLD}0${C_RESET}  Beenden\n"
        echo
        read -r -p "Auswahl: " choice
        echo
        case "$choice" in
            1) start_server "$DEFAULT_PORT" ;;
            2) ask_port ;;
            3) stop_server ;;
            4) server_status ;;
            5) show_logs ;;
            6) open_browser ;;
            0) info "Bye"; exit 0 ;;
            *) warn "Ungültige Auswahl." ;;
        esac
        echo
        read -r -p "Enter drücken, um zum Menü zurückzukehren …" _
    done
}

# --- CLI Dispatcher ---

main() {
    if [[ $# -eq 0 ]]; then
        interactive_menu
        return
    fi

    case "$1" in
        start)   shift; start_server "${1:-$DEFAULT_PORT}" ;;
        stop)    stop_server ;;
        status)  server_status ;;
        logs)    show_logs ;;
        open)    open_browser ;;
        restart) stop_server; start_server "${2:-$DEFAULT_PORT}" ;;
        -h|--help|help)
            cat <<USAGE
Usage:
  $0                — interaktives Menü
  $0 start [PORT]   — Server starten (Default 8090)
  $0 stop           — Server stoppen
  $0 status         — Status anzeigen
  $0 logs           — Logs anzeigen
  $0 open           — Browser öffnen
  $0 restart [PORT] — Neustart
USAGE
            ;;
        *)
            err "Unbekannter Befehl: $1"
            "$0" --help
            exit 1
            ;;
    esac
}

main "$@"

Youez - 2016 - github.com/yon3zu
LinuXploit