login  Naam:   Wachtwoord: 
Registreer je!
 Scripts:

Scripts > PHP > Overige scripts > Update controle

Update controle

Auteur: Onbekend - 09 mei 2008 - 11:31 - Gekeurd door: Stijn - Hits: 3738 - Aantal punten: 4.33 (3 stemmen)




Beste sima's,

Hierbij mijn eerste script op Sitemasters.be. Het is een script om een versiecontrole uit te voeren. Hiermee kun je je eigen systemen laten controleren op updates. het script kent 3 bestanden:

-local.txt, een bestand dat de huidige informatie bevat van het script, dus de huidige versie en een omschrijving van de huidige versie
-remote.txt, een extern controlebestand. Dit bevat de info van de laatste versie, dus het laatste versienummer, de url om de laatste versie te downloaden en een omschrijving van de laatste versie.
-index.php, het script dat bovenstaande bestanden verwerkt.

Mijn script kent 3 modi, zodat het op praktisch elke server werkt:

-direct1, een modus dat remote.txt oproept met file_get_contents()
-direct2, een modus dat remote.txt oproept met http sockets
-ftp, een modus dat remote.txt aanroept dat op een ftp server staat

Installatie:
Plaats index.php en local.txt. Ze moeten allebei leesrechten hebben.
Kies een modus die je wilt gebruiken om remote.txt op te roepen. kies je voor direct1/2, plaats dan remote.txt op een webserver. Het bestand moet leesrechten hebben. Kies je voor ftp, plaats het bestand dan op een ftp server en zoek de inloggegevens van de ftp server op.

Hieronder volgt de code+voorbeelden

Code:
index.php:
  1. function updatecheck($mode,$filehost=null,$filename,$ftphost=null,$ftpusername=null,$ftppassword=null,$ftpport=21,$ftptimeout=10) {
  2.  
  3. /*Update checker, created by Sander Pientka 09-05-2008 */
  4.  
  5. if (!isset($mode) or empty($mode)) {
  6.  
  7. echo "Modus niet opgegeven.";
  8. return false;
  9. }
  10.  
  11. switch ($mode) {
  12.  
  13. case "direct1":
  14.  
  15. if (isset($filename) and !empty($filename) ) {
  16.  
  17. $updatefile=file_get_contents($filename);
  18. global $updatedataremote, $updatedatalocal;
  19. $updatedata=explode("\n", $updatefile);
  20.  
  21. if (count($updatedata)!=3) {
  22.  
  23. echo "Er is wat mis met het controlebestand.";
  24. return false;
  25.  
  26. }
  27.  
  28. $updatedataremote['lastversion']=$updatedata[0];
  29. $updatedataremote['downloadurl']=$updatedata[1];
  30. $updatedataremote['description']=$updatedata[2];
  31.  
  32. if (!include_once("local.txt")) {
  33.  
  34. echo "Er is wat mis met het lokale bestand.";
  35. return false;
  36.  
  37. }
  38.  
  39. return true;
  40.  
  41. } else {
  42.  
  43. echo "Het controlebestand bestaat niet.";
  44. return false;
  45.  
  46. }
  47.  
  48. break;
  49.  
  50. case "direct2":
  51.  
  52. if (isset($filehost) and isset($filename)) {
  53.  
  54. global $updatedataremote, $updatedatalocal;
  55. $errno=0;
  56. $errstr="";
  57. $filehost=str_replace("http://", "", $filehost);
  58. $socket=fsockopen($filehost, 80, $errno, $errstr,10);
  59.  
  60. if (!$socket==true) {
  61.  
  62. echo "De socket kon niet worden geopend. ".$errno.": ".$errstr;
  63. return false;
  64.  
  65. }
  66.  
  67. $out = "GET ".$filename." HTTP/1.1\r\n";
  68. $out .= "Host: ".$filehost."\r\n";
  69. $out .= "Connection: close\r\n\r\n";
  70. fwrite($socket, $out);
  71.  
  72. global $tempdata;
  73.  
  74. while (!feof($socket)) {
  75.  
  76. $tempdata .= fgets($socket, 128);
  77.  
  78. }
  79.  
  80. $updatedata=explode("\n",$tempdata);
  81.  
  82. for ($i=0;$i<10;$i++) {
  83.  
  84. unset($updatedata[$i]);
  85.  
  86. }
  87.  
  88. if (count($updatedata)!=3) {
  89.  
  90. echo "Er is wat mis met het controlebestand.";
  91. return false;
  92.  
  93. }
  94.  
  95. $updatedataremote['lastversion']=$updatedata[10];
  96. $updatedataremote['downloadurl']=$updatedata[11];
  97. $updatedataremote['description']=$updatedata[12];
  98. unset($updatedata);
  99.  
  100. fclose($socket);
  101.  
  102. if (!include_once("local.txt")) {
  103.  
  104. echo "Er is wat mis met het lokale bestand.";
  105. return false;
  106.  
  107. }
  108.  
  109. } else {
  110.  
  111. echo "De gegevens zijn niet correct ingevuld.";
  112. return false;
  113.  
  114. }
  115.  
  116. break;
  117.  
  118. case "ftp":
  119.  
  120. if ((isset($ftphost) and !empty($ftphost)) and (isset($filename) and !empty($filename)) and (isset($ftpusername) and !empty($ftpusername)) and (isset($ftppassword) and !empty($ftppassword))) {
  121.  
  122. $ftpconnection=ftp_connect($ftphost,$ftpport,$ftptimeout);
  123.  
  124. if ($ftpconnection==false) {
  125.  
  126. echo "FTP verbinding mislukt.";
  127. return false;
  128.  
  129. }
  130.  
  131. $ftplogin=ftp_login($ftpconnection,$ftpusername,$ftppassword);
  132.  
  133. if ($ftplogin==false) {
  134.  
  135. echo "FTP login mislukt.";
  136. return false;
  137.  
  138. }
  139.  
  140. $ftpget=ftp_get($ftpconnection,"temp.txt",$filename,FTP_ASCII);
  141.  
  142. if ($ftpget==false) {
  143.  
  144. echo "FTP bestand ophalen mislukt.";
  145. return false;
  146.  
  147. }
  148.  
  149. global $updatedataremote, $updatedatalocal;
  150. $updatefile=file_get_contents("temp.txt");
  151. $updatedata=explode("\n",$updatefile);
  152.  
  153. if (count($updatedata)!=3) {
  154.  
  155. echo "Er is wat mis met het controlebestand.";
  156. return false;
  157.  
  158. }
  159.  
  160. $updatedataremote['lastversion']=$updatedata[0];
  161. $updatedataremote['downloadurl']=$updatedata[1];
  162. $updatedataremote['description']=$updatedata[2];
  163.  
  164. @unlink("temp.txt");
  165.  
  166. if (!include_once("local.txt")) {
  167.  
  168. echo "Er is wat mis met het lokale bestand.";
  169. return false;
  170.  
  171. }
  172.  
  173. } else {
  174.  
  175. echo "De gegevens zijn niet correct ingevuld.";
  176. return false;
  177.  
  178. }
  179.  
  180. ftp_close($ftpconnection);
  181.  
  182. break;
  183.  
  184. default:
  185.  
  186. echo "Onbekende modus.";
  187. return false;
  188.  
  189. }
  190.  
  191. }


Local.txt (uiteraard zelf aan te passen):

  1. <?php
  2. $updatedatalocal['currentversion']=1;
  3. $updatedatalocal['description']="Dit is versie 1.";
  4. ?>


Remote.txt (uiteraard zelf aan te passen):

  1. 2
  2. http://www.myproduct.com/update
  3. Dit is versie 2, de laatste versie met veel nieuwe functies!



Voorbeelden:

In alle modi kun je de output van de functie als volgt gebruiken:

  1. echo $updatedatalocal['currentversion']; //laat het huidige versienummer zien
  2. echo $updatedatalocal['description']; //laat een omschrijving van de huidige versie zien
  3. echo $updatedataremote['lastversion']; //laat het versienummer van de laatste versie zien
  4. echo $updatedataremote['downloadurl']; //laat het adres zien waar de laatste versie te downloaden is
  5. echo $updatedataremote['description']; //laat een omschrijving van de laatste versie zien

de bovengenoemde variabelen zijn pas te gebruiken, nadat de functie is uitgevoerd op een correcte manier. Je kunt nu zelf de versies controleren en de variablen weergeven. is er een update beschikbaar voor je software, dan zet je in die update een nieuwe local.txt met de nieuwste data daarin. Hoe je de functie uitvoert lees je hieronder:

-direct1:

  1. updatecheck("direct1","","pad/naar/remote.txt"); //belangrijk: laat het tweede argument leeg


-direct2:

  1. updatecheck("direct2","hostname","pad/naar/remote.txt");


-ftp:

  1. updatecheck("ftp","","/pad/naar/remote.txt","ftpserver","username","password"); //belangrijk: laat het tweede argument leeg


Met dank aan timmie_loots voor uitleg over sockets.Download code! Download code (.txt)

 Stemmen
Niet ingelogd.

 Reacties
Post een reactie
Lees de reacties (6)
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.083s