Um eine kleine Intranetanwendung auf CD bereitstellen zu können, habe ich ein kleines Shell-Script geschrieben, das mir die Webseiten als Offline-Version speichert. Die Anwendung ist in PHP geschrieben und gibt lediglich ein paar Inhalte als HTML aus, erwartet also keine Benutzereingaben usw.
Als erstes habe ich PHP so konfiguriert, dass auch HTML-Dateien geparst werden. Dadurch benötige ich nicht php als Dateiendung und kann somit Links usw. auf die HTML-Seiten setzen, da PHP-Dateien offline nicht funktionieren würden. Dazu habe ich einfach die folgende Zeile in die entsprechende VirtualHost-Datei des Apache-Servers eingetragen:
AddType application/x-httpd-php .php .html
Das Script ist nun eigentlich recht einfach. Ich definiere die Seiten, die es speichern soll, und lade diese mit lynx herunter. Danach lasse ich direkt tidy drüberlaufen, um den Quelltext zu formatieren. Fertig 🙂 Mein Script enthält dann noch ein paar simple cp-Befehle um einige benötigte Dateien und Ordner zu kopieren und (da diese mit Subversion versioniert werden) alle .svn-Ordner zu entfernen.
#!/bin/bash
#
HTMLDATEIEN="Seite1 Seite2 Seite3"
PDFORDNER="Ordner1 Ordner2 Ordner3"
# hier liegen die PHP-Dateien auf dem Webserver
WEBPATH="/srv/www/offlinecd/"
# hier wird die Offline-Version erzeugt
CDPATH=${WEBPATH}"CD/"
# hier liegen die zu kopierenden Ordner
PDFPATH=${WEBPATH}"PDF/"
# das ist die URL der Website
URL="http://ganz.tolle.anwendung.de/"
# tidy-Befehl, der über die HTML-Quellen läuft
TIDYCMD="/usr/bin/tidy -i --quiet true --tidy-mark true -wrap 0 -raw --output-xhtml true --indent auto --indent-spaces 4 --break-before-br false --vertical-space no --char-encoding utf8 --fix-uri no"
#
if [ -e ${CDPATH} ]
then
echo "Verzeichnis wird geloescht: " $CDPATH
rm ${CDPATH} -R
fi
if [ ! -e ${CDPATH} ]
then
echo "Verzeichnis wird angelegt: " $CDPATH
mkdir -p ${CDPATH}
fi
#
for HTMLDATEI in $HTMLDATEIEN
do
echo "Speichere HTML-Datei: " $HTMLDATEI
lynx -source ${URL}${HTMLDATEI}".html" | ${TIDYCMD} > ${CDPATH}${HTMLDATEI}".html"
done
#
for ORDNER in $PDFORDNER
do
echo "Kopiere Ordner: " $ORDNER
cp ${PDFPATH}${ORDNER} ${CDPATH} -R
done
#
cp ${WEBPATH}*.gif ${CDPATH}
cp ${WEBPATH}*.jpg ${CDPATH}
echo "Kopiere CSS-Dateien..."
cp ${WEBPATH}*.css ${CDPATH}
#
echo "Entferne .svn-Ordner..."
find ${CDPATH} -name .svn -print0 | xargs -0 rm -R
Hey,
wie wär’s denn einfach mit httrack?
(http://www.httrack.com/)
Damit kannst du von jeder beliebigen Seite einen offline Mirror erstellen.
Und es wird sogar die Linkstruktur angepasst. Sprich Verknüpfungen, Links etc. zeigen auch wirklich auf den lokalen Mirror.
Ja, das kenne ich auch. Aber ich wollte direkt tidy drüberlaufen lassen und muss außerdem noch einige Sachen durchführen, die im obigen Script nicht gezeigt sind. Und da dache ich mir, bevor ich an zwei Stellen bastel, baue ich das Erstellen der Offline-Version gleich mit ins Script ein. Geht ja ganz fix 🙂