Typo3 - Update - Download

Seit nun mehreren Jahren pflege ich einen Server, wo ich im kleinen Rahmen, für Freunde und Bekannte mehrere Typo3-Instancen hoste.

Auch deren Typo3-Bibliotheken müssen immer auf dem aktuellen Stand sein. Um das zu garantieren könnte ich mich in eine Typo3-Mailingliste eintragen und fleißig mitlesen oder jeden Tag auf der Typo3-Seite nachschauen, welche Version, denn gerade aktuell ist.

Wurde dann eine neue Version veröffentlicht, muss ich zu den Sourceforge-Seiten gehen, mir den Link kopieren, das tar-gz-File auf dem Server herrunterladen und auspacken. Das ist langweilig und macht keinen Spaß. Also hab ich dieses kleine Skript geschrieben, was so ziemlich genau das macht, was sonst so tue.

Funktionsweise: Das Skipt prüft auf der Seite http://typo3.org/download/packages/, ob eine neue Version existiert. Dann werden die neuen Versionen vom SourceForge-Projekt heruntergeladen und im angebenen Verzeichnis ausgepackt. Über neue Versionen wird man dann via Mail informiert. 

Verwendungszweck: Am einfachsten ist es, wenn man das Script via CronJob einbindet.

Voraussetzungen: PHP (CLI), Zugriff auf die (Linux-) Befehle: wget, tar, mv

Anmerkung: Vorher sollte man die wichtigen Parameter (Verzeichnisse und geüwünschte Versionen) im Skript (ganz oben) angeben.

Bei Wünschen oder Anregungen: Einfach mir eine Nachricht zukommen lassen.

Direktdownload

t3updateCheck.tar.gz

Source-Code

  1. #!/usr/bin/php
  2. <?
  3.  
  4. ### ###
  5. # Name : Typo3-Version-Checker&Downloader #
  6. # Author : Clemens Gogolin (2011-12, Hanover Germany) #
  7. # Lizenz : GNU General Public License - Version 3 #
  8. # Version: 1.0d #
  9. ### ###
  10.  
  11.  
  12. define(DEBUG, false);
  13.  
  14.  
  15. $url = 'http://typo3.org/download/packages/';
  16. $dir = '/var/lib/typo3/';
  17. $usedVersions = array ( '4.5','4.4' );
  18.  
  19. $archiv = $dir.'archiv/';
  20. $receipt = 'webmaster@cylancer.net';
  21.  
  22. init($dir, $archiv);
  23.  
  24. $versions = getVersions($url, $usedVersions);
  25. debug($versions);
  26. $downloads = getDownloads($versions, $dir);
  27.  
  28. if(count($downloads) > 0) {
  29. debug( $downloads );
  30. foreach ($downloads as $version)
  31. sfget($version, $dir, $archiv);
  32. sendInfoMail($downloads, $receipt);
  33. }
  34.  
  35. # ---------------------------------------------------------
  36.  
  37. function init($dir, $archiv) {
  38. $dirs = array();
  39. $dirs[] = $dir;
  40. $dirs[] = $archiv;
  41.  
  42. foreach( $dirs as $value){
  43. debug($value);
  44. if( !file_exists( $value ) ) {
  45. if( !mkdir( $value , 0755 , true ) ) {
  46. die( "Erstellung des Verzeichnis $value schlug fehl...");
  47. }
  48. } else {
  49. if( !is_Dir( $value ) ) {
  50. die("$value - Verzeichnis ist ungültig (kein Verzeichnis)");
  51. }
  52. }
  53. }
  54. }
  55.  
  56. function getVersions($url, $usedVersions) {
  57. $packagesHtml=file_get_contents($url);
  58. $packagesHtml=str_replace ( "\n", "", $packagesHtml );
  59. $matches = array();
  60. preg_match ( '/>Latest<\/td>(.+)>PHP version<\/td>/', $packagesHtml , &$matches );
  61. $part = $matches[0];
  62. $versions = array();
  63. preg_match_all ( '/([0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,2})/', $part , &$versions );
  64.  
  65. $return = array();
  66. foreach ( $versions[0] as $version ){
  67. foreach ( $usedVersions as $allowedVersion ){
  68. if( !(strpos( trim($version), trim($allowedVersion)) === false )) {
  69. $return[] = $version;
  70. }
  71. }
  72. }
  73. return array_unique($return) ;
  74. }
  75.  
  76. function getDownloads($versions, $dir) {
  77. $download = array();
  78. foreach ($versions as $value){
  79. $path = $dir.'typo3_src-'.$value;
  80. if(!file_exists($path)) {
  81. $downloads[] = $value;
  82. debug( $path.' not exists '."\n" );
  83. } else {
  84. debug( $path.' exists '."\n" );
  85. }
  86. }
  87. return $downloads;
  88. }
  89.  
  90. function sfget($version, $dir, $archiv){
  91. $url = 'http://sourceforge.net/projects/typo3/files/TYPO3%20Source%20and%20Dummy/TYPO3%20'.$version.'/typo3_src-'.$version.'.tar.gz/download';
  92. $file = 'typo3_src-'.$version.'.tar.gz';
  93. $target = $dir.$file;
  94. $command = "wget '$url' -q -O $target; tar -xzf $target -C $dir; mv $target $archiv ";
  95. debug($command);
  96. $out = array();
  97. exec($command, $out );
  98. debug($out);
  99. }
  100.  
  101. function sendInfoMail($downloads, $receipt){
  102. $subject = 'Neue Typo3-Version verfügbar';
  103. $message = 'Folgende Versionen wurden heruntergeladen: '."\r\n" .
  104. implode(', ', $downloads) . "\r\n";
  105. $header = 'X-Mailer: PHP/' . phpversion();
  106. mail($receipt, $subject, $message, $header);
  107. debug ($message);
  108. }
  109.  
  110. function debug($out){
  111. if(DEBUG && !is_null($out)) {
  112. if(is_array($out))
  113. print_r( $out );
  114. else
  115. echo $out;
  116. }
  117. }
  118.  
  119. ?>
  120.