Update controle
Auteur: Onbekend - 09 mei 2008 - 11:31 - Gekeurd door: Stijn - Hits: 3805 - 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:
function updatecheck($mode,$filehost=null,$filename,$ftphost=null,$ftpusername=null,$ftppassword=null,$ftpport=21,$ftptimeout=10) {
/*Update checker, created by Sander Pientka 09-05-2008 */
if (!isset($mode) or empty($mode)) {
echo "Modus niet opgegeven.";
return false;
}
switch ($mode) {
case "direct1":
if (isset($filename) and !empty($filename) ) {
$updatefile=file_get_contents($filename);
global $updatedataremote, $updatedatalocal;
$updatedata=explode("\n", $updatefile);
if (count($updatedata)!=3) {
echo "Er is wat mis met het controlebestand.";
return false;
}
$updatedataremote['lastversion']=$updatedata[0];
$updatedataremote['downloadurl']=$updatedata[1];
$updatedataremote['description']=$updatedata[2];
if (!include_once("local.txt")) {
echo "Er is wat mis met het lokale bestand.";
return false;
}
return true;
} else {
echo "Het controlebestand bestaat niet.";
return false;
}
break;
case "direct2":
if (isset($filehost) and isset($filename)) {
global $updatedataremote, $updatedatalocal;
$errno=0;
$errstr="";
$filehost=str_replace("http://", "", $filehost);
$socket=fsockopen($filehost, 80, $errno, $errstr,10);
if (!$socket==true) {
echo "De socket kon niet worden geopend. ".$errno.": ".$errstr;
return false;
}
$out = "GET ".$filename." HTTP/1.1\r\n";
$out .= "Host: ".$filehost."\r\n";
$out .= "Connection: close\r\n\r\n";
fwrite($socket, $out);
global $tempdata;
while (!feof($socket)) {
$tempdata .= fgets($socket, 128);
}
$updatedata=explode("\n",$tempdata);
for ($i=0;$i<10;$i++) {
unset($updatedata[$i]);
}
if (count($updatedata)!=3) {
echo "Er is wat mis met het controlebestand.";
return false;
}
$updatedataremote['lastversion']=$updatedata[10];
$updatedataremote['downloadurl']=$updatedata[11];
$updatedataremote['description']=$updatedata[12];
unset($updatedata);
fclose($socket);
if (!include_once("local.txt")) {
echo "Er is wat mis met het lokale bestand.";
return false;
}
} else {
echo "De gegevens zijn niet correct ingevuld.";
return false;
}
break;
case "ftp":
if ((isset($ftphost) and !empty($ftphost)) and (isset($filename) and !empty($filename)) and (isset($ftpusername) and !empty($ftpusername)) and (isset($ftppassword) and !empty($ftppassword))) {
$ftpconnection=ftp_connect($ftphost,$ftpport,$ftptimeout);
if ($ftpconnection==false) {
echo "FTP verbinding mislukt.";
return false;
}
$ftplogin=ftp_login($ftpconnection,$ftpusername,$ftppassword);
if ($ftplogin==false) {
echo "FTP login mislukt.";
return false;
}
$ftpget=ftp_get($ftpconnection,"temp.txt",$filename,FTP_ASCII);
if ($ftpget==false) {
echo "FTP bestand ophalen mislukt.";
return false;
}
global $updatedataremote, $updatedatalocal;
$updatefile=file_get_contents("temp.txt");
$updatedata=explode("\n",$updatefile);
if (count($updatedata)!=3) {
echo "Er is wat mis met het controlebestand.";
return false;
}
$updatedataremote['lastversion']=$updatedata[0];
$updatedataremote['downloadurl']=$updatedata[1];
$updatedataremote['description']=$updatedata[2];
@unlink("temp.txt");
if (!include_once("local.txt")) {
echo "Er is wat mis met het lokale bestand.";
return false;
}
} else {
echo "De gegevens zijn niet correct ingevuld.";
return false;
}
ftp_close($ftpconnection);
break;
default:
echo "Onbekende modus.";
return false;
}
}
function updatecheck($mode,$filehost=null,$filename,$ftphost=null,$ftpusername=null,$ftppassword=null,$ftpport=21,$ftptimeout=10) { /*Update checker, created by Sander Pientka 09-05-2008 */ echo "Modus niet opgegeven."; return false; } switch ($mode) { case "direct1": global $updatedataremote, $updatedatalocal; $updatedata=explode("\n", $updatefile); if (count($updatedata)!=3) { echo "Er is wat mis met het controlebestand."; return false; } $updatedataremote['lastversion']=$updatedata[0]; $updatedataremote['downloadurl']=$updatedata[1]; $updatedataremote['description']=$updatedata[2]; if (!include_once("local.txt")) { echo "Er is wat mis met het lokale bestand."; return false; } return true; } else { echo "Het controlebestand bestaat niet."; return false; } break; case "direct2": global $updatedataremote, $updatedatalocal; $errno=0; $errstr=""; $socket=fsockopen($filehost, 80, $errno, $errstr,10); if (!$socket==true) { echo "De socket kon niet worden geopend. ".$errno.": ".$errstr; return false; } $out = "GET ".$filename." HTTP/1.1\r\n"; $out .= "Host: ".$filehost."\r\n"; $out .= "Connection: close\r\n\r\n"; $tempdata .= fgets($socket, 128); } $updatedata=explode("\n",$tempdata); for ($i=0;$i<10;$i++) { } if (count($updatedata)!=3) { echo "Er is wat mis met het controlebestand."; return false; } $updatedataremote['lastversion']=$updatedata[10]; $updatedataremote['downloadurl']=$updatedata[11]; $updatedataremote['description']=$updatedata[12]; if (!include_once("local.txt")) { echo "Er is wat mis met het lokale bestand."; return false; } } else { echo "De gegevens zijn niet correct ingevuld."; return false; } break; case "ftp": $ftpconnection=ftp_connect($ftphost,$ftpport,$ftptimeout); if ($ftpconnection==false) { echo "FTP verbinding mislukt."; return false; } $ftplogin=ftp_login($ftpconnection,$ftpusername,$ftppassword); if ($ftplogin==false) { echo "FTP login mislukt."; return false; } $ftpget=ftp_get($ftpconnection,"temp.txt",$filename,FTP_ASCII ); if ($ftpget==false) { echo "FTP bestand ophalen mislukt."; return false; } global $updatedataremote, $updatedatalocal; $updatedata=explode("\n",$updatefile); if (count($updatedata)!=3) { echo "Er is wat mis met het controlebestand."; return false; } $updatedataremote['lastversion']=$updatedata[0]; $updatedataremote['downloadurl']=$updatedata[1]; $updatedataremote['description']=$updatedata[2]; if (!include_once("local.txt")) { echo "Er is wat mis met het lokale bestand."; return false; } } else { echo "De gegevens zijn niet correct ingevuld."; return false; } break; default: return false; } }
Local.txt (uiteraard zelf aan te passen):
<?php
$updatedatalocal['currentversion']=1;
$updatedatalocal['description']="Dit is versie 1.";
?>
<?php $updatedatalocal['currentversion']=1; $updatedatalocal['description']="Dit is versie 1."; ?>
Remote.txt (uiteraard zelf aan te passen):
2
http://www.myproduct.com/update
Dit is versie 2, de laatste versie met veel nieuwe functies!
2 http://www.myproduct.com/update 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:
echo $updatedatalocal['currentversion']; //laat het huidige versienummer zien
echo $updatedatalocal['description']; //laat een omschrijving van de huidige versie zien
echo $updatedataremote['lastversion']; //laat het versienummer van de laatste versie zien
echo $updatedataremote['downloadurl']; //laat het adres zien waar de laatste versie te downloaden is
echo $updatedataremote['description']; //laat een omschrijving van de laatste versie zien
echo $updatedatalocal['currentversion']; //laat het huidige versienummer zien echo $updatedatalocal['description']; //laat een omschrijving van de huidige versie zien echo $updatedataremote['lastversion']; //laat het versienummer van de laatste versie zien echo $updatedataremote['downloadurl']; //laat het adres zien waar de laatste versie te downloaden is 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:
updatecheck("direct1","","pad/naar/remote.txt"); //belangrijk: laat het tweede argument leeg
updatecheck("direct1","","pad/naar/remote.txt"); //belangrijk: laat het tweede argument leeg
-direct2:
updatecheck("direct2","hostname","pad/naar/remote.txt");
updatecheck("direct2","hostname","pad/naar/remote.txt");
-ftp:
updatecheck("ftp","","/pad/naar/remote.txt","ftpserver","username","password"); //belangrijk: laat het tweede argument leeg
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 (.txt)
|
|
Stemmen |
Niet ingelogd. |
|