Arbeiten unter Windows für Dummies
Die Arbeit mit einem Markdown-Editor im Dateisystem ist auch für Menschen mit durchschnittlichen EDV-Kenntnissen noch gut vermittelbar, insbesondere, wenn man einen komfortablen Editor wie z.B. Typora verwendet.
Was dagegen anspruchsvoller sein kann, ist das Publizieren von Inhalten und eine lokale Preview der Website. Ich stelle hier einen Ansatz vor, der komplett ohne eine manuelle Nutzung des Command Processors (cmd) und eines FTP-Programms auskommt, sondern sowohl einen lokalen Preview-Server und ein Sync mit dem Webserver buchstäblich per Mausklick ermöglicht und keine Installation und Konfiguration von Software benötigt.
Wir gehen von folgender Dateistruktur aus, die dem unter Microsoft Windows arbeitenden Redakteur komplett zur Verfügung gestellt wird:
projekt/ → Project root directory
├── website/ → Lowmark site (content, templates, assets)
│ └── ...
├── tools/ → Auxiliary Windows tools (self-contained)
│ ├── php/ → Standalone PHP runtime for local preview
│ │ ├── ext/ → PHP extensions
│ │ │ └── ...
│ │ └── ...
│ └── publish/ → WinSCP binaries for deployment
│ │ ├── ftp-account.cfg → FTP access data
│ │ ├── WinSCP.com
│ │ └── WinSCP.exe
├── fetch.cmd → Download current state from remote server
├── publish.cmd → Synchronize local website/ folder to remote server
└── server.cmd → Start local PHP preview server
Der Kunde kann dann per Doppelklick auf publish.cmd seine Aktualisierungen auf den Webserver übertragen. Dabei werden nur die Änderungen übertragen und nötigenfalls auch Dateien gelöscht. Außerdem wird der Index-Cache gelöscht, so dass Änderungen sofort berücksichtigt werden.
Mit einem Doppelklick auf server.cmd startet ein lokaler Preview-Webserver. Der Browser wird automatisch gestartet und zeigt die Website an. So kann der Kunde lokal seine Arbeit kontrollieren, bevor er sie publiziert.
In beiden Fällen wird automatisch ein Terminal gestartet. Das entsprechende Fenster kann einfach wieder geschlossen werden, wenn es nicht mehr benötigt wird.
Folgende Bestandteile müssen dafür zusammengestellt werden:
Windows tools
PHP
-
Download: https://www.php.net/downloads.php
Use: Web Development
I work with Windows/ZIP Downloads/version 8.5
Download: x64 / Thread Safe / ZIP
z.B. https://downloads.php.net/~windows/releases/archives/php-8.5.4-nts-Win32-vs17-x64.zip -
folgende Dateien übernehmen:
-
php.exe
-
*.dll
-
php.ini-production → php.ini (umbenennen)
Extensions aktivieren (";" entfernen):
extension_dir = "ext"
extension=mbstring
extension=curl
extension=intl
extension=gd
extension=exif
extension=fileinfoMemory limit erhöhen – z.B. memory_limit = 512M
-
Das Verzeichnis "ext" ebenfalls übernehmen. Wir brauchen aber nur:
php_curl.dll
php_exif.dll
php_fileinfo.dll
php_gd.dll
php_intl.dll
php_mbstring.dll
-
!!! Wenn die Visual C++-Runtime-Bibliotheken noch nicht installiert wurden (ist Bestandteil von vielen Programmen), gibt es beim Start von PHP eine entsprechende Fehlermeldung. Dann muss der Kunde noch die Visual C++ Redistributable auf seinem PC installieren:
https://learn.microsoft.com/de-de/cpp/windows/latest-supported-vc-redist
Und zwar die "neueste unterstützte weiterverteilbare Version" X64. Zur Zeit ist das:
https://aka.ms/vc14/vc_redist.x64.exe
Publish (WinSCP)
- https://winscp.net/eng/downloads.php
Wir brauchen die "Portable executables". Z.B.:
https://winscp.net/download/WinSCP-6.5.6-Portable.zip/download (oder aktueller) - Daraus brauchen wir beide Binaries (
WinSCP.comundWinSCP.exe) → in Verzeichnispublish/kopieren.
Skripte
ftp-account.cfg
!!! Diese Datei enthält die FTP-Zugangsdaten im Klartext und darf nicht an unbefugte Dritte weitergegeben werden!
Je nach Provider ist der REMOTE_ROOT entweder bezogen auf das Server-Root-Verzeichnis oder auf das Kunden-Home-Verzeichnis. Zweiteres ist m. E. wahrscheinlicher.
HOST=**********
USER=**********
PASSWORD=**********
REMOTE_ROOT=/
PROTOCOL=sftp
PORT=22
publish.cmd
Überträgt die lokale Fassung auf den Webserver.
- Das Skript überträgt den lokalen Ordner
website/(Quelle) auf den Webserver (Ziel). Dabei werden auch Dateien vom Server gelöscht. - Der Index-Cache und der Image-Cache werden nicht übertragen. Zusätzlich wird der Index-Cache nach der Synchronisierung gelöscht, damit die Änderungen sofort wirksam werden.
@echo off
setlocal
REM ==========================
REM PATHS
REM ==========================
set "PROJECT_ROOT=%~dp0"
if "%PROJECT_ROOT:~-1%"=="\" set PROJECT_ROOT=%PROJECT_ROOT:~0,-1%
cd /d "%PROJECT_ROOT%"
set "LOCAL_PATH=%PROJECT_ROOT%\website"
REM ==========================
REM LOAD CONFIG
REM ==========================
set "CONFIG_FILE=%PROJECT_ROOT%\tools\publish\ftp-account.cfg"
if not exist "%CONFIG_FILE%" (
echo Fehler: Konfigurationsdatei nicht gefunden: %CONFIG_FILE%
pause
exit /b 1
)
for /f "usebackq tokens=1,* delims==" %%A in ("%CONFIG_FILE%") do (
set "%%A=%%B"
)
REM ==========================
REM PUBLISHING and CLEAR CACHE
REM ==========================
echo.
echo Publishing lowmark project to %HOST%%REMOTE_ROOT% ...
echo.
"%PROJECT_ROOT%\tools\publish\WinSCP.com" ^
/command ^
"option batch abort" ^
"option confirm off" ^
"open %PROTOCOL%://%USER%:%PASSWORD%@%HOST%:%PORT%/" ^
"lcd ""%LOCAL_PATH%""" ^
"synchronize remote . %REMOTE_ROOT% -criteria=time -delete -filemask=""|cache/;image-cache/""" ^
"rmdir ""%REMOTE_ROOT%cache/""" ^
"exit"
echo.
echo Done.
pause
fetch.cmd
Holt die Website vom Webserver.
- Das Skript synchronisiert den Ordner
website/(Ziel) mit dem Webserver (Quelle). Dabei werden auch Dateien gelöscht. - Der Index-Cache und der Image-Cache werden nicht übertragen. Sofern die Website vorher schon mit server.cmd lokal betrieben wurde, muss der Index-Cache (
/cache) manuell gelöscht werden oder die Website muss mit dem Parameter?clearcacheaufgerufen werden.
@echo off
setlocal
REM ==========================
REM PATHS
REM ==========================
set "PROJECT_ROOT=%~dp0"
if "%PROJECT_ROOT:~-1%"=="\" set PROJECT_ROOT=%PROJECT_ROOT:~0,-1%
cd /d "%PROJECT_ROOT%"
set "LOCAL_PATH=%PROJECT_ROOT%\website"
REM ==========================
REM LOAD CONFIG
REM ==========================
set "CONFIG_FILE=%PROJECT_ROOT%\tools\publish\ftp-account.cfg"
if not exist "%CONFIG_FILE%" (
echo Fehler: Konfigurationsdatei nicht gefunden: %CONFIG_FILE%
pause
exit /b 1
)
for /f "usebackq tokens=1,* delims==" %%A in ("%CONFIG_FILE%") do (
set "%%A=%%B"
)
REM ==========================
REM CONFIRMATION
REM ==========================
echo.
echo Webserver : %HOST%%REMOTE_ROOT%
echo ... kopiert auf ...
echo lokales Verzeichnis : %LOCAL_PATH%
echo.
choice /c JN /m "Lokale Aenderungen werden ueberschrieben. Fortfahren?"
if errorlevel 2 (
echo Abgebrochen.
exit /b 0
)
REM ==========================
REM FETCHING DATA
REM ==========================
echo.
echo Fetching lowmark project from server %HOST%%REMOTE_ROOT% ...
echo.
"%PROJECT_ROOT%\tools\publish\WinSCP.com" ^
/command ^
"option batch abort" ^
"option confirm off" ^
"open %PROTOCOL%://%USER%@%HOST%:%PORT%/ -password=""%PASSWORD%"""^
"lcd ""%LOCAL_PATH%""" ^
"synchronize local . %REMOTE_ROOT% -criteria=time -delete -filemask=""|cache/;image-cache/""" ^
"exit"
echo.
echo Done.
pause
server.cmd
Startet unter http://localhost:8000 einen Preview-Server.
@echo off
REM Browser öffnen
start http://localhost:8000
REM Projektverzeichnis = Ordner dieser Datei
set "PROJECT_ROOT=%~dp0"
cd /d "%PROJECT_ROOT%"
echo Starte lokalen Preview-Server...
echo Projekt: %PROJECT_ROOT%
echo http://localhost:8000
echo.
tools\php\php.exe ^
-c "tools\php\php.ini" ^
-S localhost:8000 ^
-t "%PROJECT_ROOT%website" ^
"%PROJECT_ROOT%website\local\router.php"
pause
Tipps
CMD-Skript an Taskleiste anheften
- Verknüpfung erstellen: Klicke mit der rechten Maustaste auf deine Desktop-Oberfläche (oder in den Ordner deiner Datei) und wähle Neu > Verknüpfung.
- Pfad eingeben: Gib im Feld für den Speicherort Folgendes ein:
cmd /c "C:\Pfad\zu\deinem\Skript.cmd" - Benennen: Klicke auf "Weiter" und gib der Verknüpfung den Namen, den du später in der Taskleiste sehen willst.
- Symbol ändern (Optional): Da die Verknüpfung jetzt das schwarze CMD-Icon hat, kannst du per Rechtsklick auf die neue Verknüpfung > Eigenschaften > Anderes Symbol... ein schöneres Icon wählen.
- Anheften: Klicke die fertige Verknüpfung nun mit der rechten Maustaste an und wähle An Taskleiste anheften.