xml-update-controle

Gesponsorde koppelingen

PHP script bestanden

  1. xml-update-controle

« Lees de omschrijving en reacties

update.php

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
<?php
/*-----------------------------------------/
   Ubiware Update parser.
   ----------------------
  
   Dit script werkt op een xml bestand
   waarin alle updates die ooit uitgebracht
   zijn staan. Hij zoekt uit deze updates
   de nieuwste die bij dit product past.
  
   ----------------------
   Copyright Ubiware. (mijn kleine bedrijfje)
   Gemaakt door Niels Janssen.
/-----------------------------------------*/

// Dit script heeft geen globale variabelen nodig dus verwijder ze. Dit gaat hacken tegen. Dit verwijderd niet de data in $_GET en de andere superglobals. Als je dit wel nodig hebt haal deze regel dan weg.

unset($GLOBALS);

// Functie om een multi demensionala array aflopend te sorteren op een key die zich in 1 van de sub arrays bevind.
function array_sort($array, $key)
{

   for( $i = 0; $i < sizeof( $array ); $i++ )
   {

      $sort_values[$i] = $array[$i][$key];
   }

  
   asort ($sort_values);
   reset ($sort_values);
  
   while (list ($arr_key, $arr_val) = each ($sort_values))
   {

      $sorted_arr[] = $array[$arr_key];
   }

  
   return array_reverse( $sorted_arr );
}


$update_file = 'update.xml'; // Het xml bestand waar de updates in staan.

// De volgende data kan ook uit een database gehaald worden.
// ----

$product_code = 'PRODUCT_1'; // De product code van het script waarvoor je updates zoekt, voor het geval je updates voor meerdere scripts in 1 bestand hebt.
$curr_version = '1.2.0'; // De versie van het huidige script.
$release_state = 'beta1'; // De release state waar het huidige script zich in bevind.

$attributes = array( 'product_code', 'product_name', 'version', 'release_state', 'release_timestamp' ); // De tags die tussen de update tags staan.
      
$i = 0;

$state_level = array( // De array waarin de rang van release states word aangegeven, hoe verder naar beneden, hoe hoger de rang.
   '' => $i++, // Een state word als de onderste rang gezien.
   'dev' => $i++, // De eerste fase van ontwikkeling.
   'beta' => $i, // beta is gelijk in rang als beta1, welke je kiest hangt af van je voorkeur.
   'beta1' => $i++,
   'beta2' => $i++,
   'beta3' => $i++,
   'beta4' => $i++,
   'beta5' => $i++,
   'rc1' => $i++, // RC staat voor release candidate.
   'rc2' => $i++,
   'rc3' => $i++,
   'rc4' => $i++,
   'rtm' => $i++ // RTM staat voor Release To Manufacture
);

if( is_file( $update_file ) && file_exists( $update_file )  )
{

   if( $f = @fopen( $update_file, 'r' ) ) // Open het update bestand om te gaan lezen.
   {
      $update_data = '';
      
      while( !feof( $f ) ) // Verzamel de inhoud van het bestand.
      {
         $update_data .= fgets( $f, 4096 );
      }

      
      fclose( $f );
      
      if( strlen( $update_data ) > 0 ) // Als het bestand niet leeg is en er dus updates zijn, verder gaan.
      {
         preg_match( "'<update_xml>(.*?)</update_xml>'si", $update_data, $update_xml );
         preg_match_all ( "'<update>(.*?)</update>'si", $update_xml[1], $raw_data ); // Verzamel alle update tags.
  
         $update_data = $raw_data[1]; // Hernoem de variabele voor het gemak.
         $attr = array();
         $result = array();
         $update_tag_count = 0;
        
         foreach( $update_data as $data ) // Doorloop alle update tags die gevonden zijn en parse de bekende attributes die in de $attributes array staan. Alles word hier omgezet naar een variabele waarvan de keys de namen van de attributen zijn.
         {
            $update_tag_count++;
            
            foreach( $attributes as $tag )
            {

               preg_match( "'<" . $tag . ">(.*?)</" . $tag . ">'si", $data, $output );
               $attr[$tag] = $output[1];
              
               if( !( strlen( $attr[$tag] ) > 0 ) ) // Alle waarden moeten er zijn en moeten een waarde hebben dus als dat niet zo is, laat de gebruiker dat weten dmv een notice.
               {
                  trigger_error('De ' . $tag . ' tag uit update tag ' . $update_tag_count . ' was niet gevonden of had geen waarde.', E_USER_NOTICE);
               }
            }

            
            $result[] = $attr;  
         }

        
         $parsed_data = array_sort( $result, 'release_timestamp' ); // Sorteer het resultaat aflopend op de datum wanneer het gepubliceerd is.
        
         foreach( $parsed_data as $update ) // Doorloop de array op zoek naar de eerste update tag die de goede product code heeft.
         {
            if( $update['product_code'] == $product_code )
            {

               $last_update = $update;
               break;
            }
         }

  
         if( $last_update['version'] > $curr_version || ( ( $last_update['version'] == $curr_version ) && ( $state_level[$last_update['release_state']] > $state_level[$release_state] ) ) ) // De versie controle vind hier plaats.
         {
            // Er is een nieuwe update gevonden. Plaats hier wat je dan wil doen.
            echo 'Nieuwe update';
         }

         else
         {
            // Er is geen nieuwe update gevonden. Plaats hier wat je dan wil doen.
            echo 'Geen nieuwe update.';
         }      
      }
   }

   else
   {
      // Het bestand kon niet geopend worden om er uit te lezen.
      echo '\'' . $update_file . '\' kon niet geopend worden. Controleer of de CMOD instellingen goed staan.';
   }
}

else
{
   // Als we hier komen is het updates bestand niet gevonden, wat dus betekend dat het niet bestaat. Je kan zelf beslissen of er een foutmelding word gegeven of niet.
   echo 'Er kon niet naar updates gezocht worden, omdat \'' . $update_file . '\' niet is gevonden. Sorry voor het ongemak.';
}

?>


update.xml
Voorbeeld van hoe een update.xml bestand er uit kan zien.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<update_xml>

   <update>
      <product_code>PRODUCT_1</product_code>
      <product_name>Product 1</product_name>
      <version>1.0.0</version>
      <release_state>dev</release_state>
      <release_timestamp>30000</release_timestamp>
   </update>
  
   <update>
      <product_code>PRODUCT_2</product_code>
      <product_name>Product 2</product_name>
      <version>1.0.1</version>
      <release_state>rtm</release_state>
      <release_timestamp>50</release_timestamp>
   </update>
  
   <update>
      <product_code>PRODUCT_1</product_code>
      <product_name>Product 1</product_name>
      <version>1.2.0</version>
      <release_state>beta2</release_state>
      <release_timestamp>2892798</release_timestamp>
   </update>
  
   <update>
      <product_code>PRODUCT_1</product_code>
      <product_name>Product 1</product_name>
      <version>1.9.0</version>
      <release_state>dev</release_state>
      <release_timestamp>2892899</release_timestamp>
   </update>
  
</update_xml>

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.