Offline-Version einer (kleinen) Website erstellen

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.

  1. #!/bin/bash
  2. #
  3. HTMLDATEIEN="Seite1 Seite2 Seite3"
  4. PDFORDNER="Ordner1 Ordner2 Ordner3"
  5. # hier liegen die PHP-Dateien auf dem Webserver
  6. WEBPATH="/srv/www/offlinecd/"
  7. # hier wird die Offline-Version erzeugt
  8. CDPATH=${WEBPATH}"CD/"
  9. # hier liegen die zu kopierenden Ordner
  10. PDFPATH=${WEBPATH}"PDF/"
  11. # das ist die URL der Website
  12. URL="http://ganz.tolle.anwendung.de/"
  13. # tidy-Befehl, der über die HTML-Quellen läuft
  14. 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"
  15. #
  16. if [ -e ${CDPATH} ]
  17. then
  18.   echo "Verzeichnis wird geloescht: " $CDPATH
  19.   rm ${CDPATH} -R
  20. fi
  21. if [ ! -e ${CDPATH} ]
  22. then
  23.   echo "Verzeichnis wird angelegt: " $CDPATH
  24.   mkdir -p ${CDPATH}
  25. fi
  26. #
  27. for HTMLDATEI in $HTMLDATEIEN
  28. do
  29.   echo "Speichere HTML-Datei: " $HTMLDATEI
  30.   lynx -source ${URL}${HTMLDATEI}".html" | ${TIDYCMD} > ${CDPATH}${HTMLDATEI}".html"
  31. done
  32. #
  33. for ORDNER in $PDFORDNER
  34. do
  35.   echo "Kopiere Ordner: " $ORDNER
  36.   cp ${PDFPATH}${ORDNER} ${CDPATH} -R
  37. done
  38. #
  39. cp ${WEBPATH}*.gif ${CDPATH}
  40. cp ${WEBPATH}*.jpg ${CDPATH}
  41. echo "Kopiere CSS-Dateien…"
  42. cp ${WEBPATH}*.css ${CDPATH}
  43. #
  44. echo "Entferne .svn-Ordner…"
  45. find ${CDPATH} -name .svn -print0 | xargs -0 rm -R

Über uns Stefan

Polyglot Clean Code Developer

2 Kommentare

  1. 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.

  2. 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 🙂

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax