<?php
define('CLEF', 'tGufgsdofdgds5g4d6r4ze98qr7ezhyR48dKpLojd58');
// Je suis serveur 1
/**
* Le principe :
*
* check.php test si y'a des fichiers sur le serveur 1 périmés.
* si c'est le cas, faut faire deux actions :
* - Mettre à jours le fichiers du serveur 1 avec le fichier du serveur 2
* - Mettre la BDD1 à jours avec la bonne version
*
* file.php va :
* - allez cherchez la nouvelle version du fichier sur le serveur 2
* - faire un output du fichier demandé par le serveur 2
*
*/
// cette fonction permet de regler la plupart des soucis de PHP entre serveur
function getcontent($server, $port, $file)
{
$cont = "";
$ip = gethostbyname($server);
$fp = fsockopen($ip, $port);
if (!$fp)
{
return "Unknown";
}
else
{
$com = "GET $file HTTP/1.1rnAccept: */*rnAccept-Language: de-chrnAccept-Encoding: gzip, deflaternUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0;  ;Windows NT 5.0)rnHost: $server:$portrnConnection: Keep-Alivernrn";
fputs($fp, $com);
while (!feof($fp))
{
$cont .= fread($fp, 500);
}
fclose($fp);
$cont = substr($cont, strpos($cont, "rnrn") + 4);
return $cont;
}
}
// le serveur 2 :
$serveur_distant = 'www.domaine2.com';
// connexion mysql
mysql_connect('localhost','****','****');
mysql_select_db('****');
// on recupere la liste des fichiers presente sur le serveur
$allfiles = array();
$requete = "SELECT * FROM files";
$sql = mysql_query($requete);
$nbr = mysql_num_rows($sql);
while($file = mysql_fetch_array($sql))
{
$allfiles[$file['id']] = $file;
}
// on utilise l'API du serveur 2 pour recuperer la liste des fichiers present ainsi que leurs version
$content = getcontent($serveur_distant, "80", '/file.php?key='.CLEF.'&action=getFileList');
if($content === false)
exit('Erreur de test provenant de l\'api sur le serveur 2');
else
{
$unserialised = unserialize($content);
$toUpdate = '';
foreach($allfiles as $id=>$data)
{
// on test si les version du serveur 2 sont plus grand
if($data['version'] < $unserialised[$id]['version'])
{
$content = getcontent($serveur_distant, "80", '/file.php?key='.CLEF.'&action=getFile&fileId='.$id);
// si 1, on met à jours la BDD du serveur 1
if(!empty($content))
{
// on remplace le nouveau contenu - fopen w+ puis sauvegarde. - serai rapide avec touch(), mais pour le moment restons simple.
$local_file = $data['filedir'].$data['name'];
$fp = fopen($local_file, "w");
$reponse = (fwrite($fp, $content)) ? true : false;
fclose($fp);
if($reponse == true)
{
$requete = "UPDATE files SET version='".$unserialised[$id]['version']."' WHERE id='$id'";
mysql_query($requete);
}
else
echo 'Erreur de maj sur le fichier '.$id.'<br />';
}
else
echo 'Erreur de recuperation du fichier '.$id;
}
// on test si les version du serveur 2 sont périmé par rapport au serveur 1
if($data['version'] > $unserialised[$id]['version'])
{
// on update le fichier du serveur 2 avec le fichier du serveur 1
$reponse = getcontent($serveur_distant, "80", '/file.php?key='.CLEF.'&action=updateFile&fileId='.$id.'&fileVersion='.$data['version']);
if($reponse === false)
echo 'Erreur de maj du fichier '.$id.'sur le serveur 2.';
}
}
echo 'Terminé';
}
?>
<?php
define('CLEF', 'tGufgsdofdgds5g4d6r4ze98qr7ezhyR48dKpLojd58');
// Je suis serveur 1
// est ce que cette requete comporte un mot de passe valide ?
if(empty($_GET['key']) || $_GET['key'] != CLEF)
exit(false);
// liste des actions OK :
$actionAutorise = array('getFile','updateFile');
// ensuite, on demande quoi?
// - une comparaison avec la liste de l'autre serveur en params (files)
// - une liste de fichiers serialisé pour l'autre serveur
$action = (!empty($_GET["action"]) && in_array($_GET["action"], $actionAutorise)) ? $_GET["action"] : exit(false) ;
// connexion mysql
mysql_connect('localhost','****','****');
mysql_select_db('****');
switch($action)
{
case 'getFile':
if(empty($_GET['fileId']) || !is_numeric($_GET['fileId']))
exit(false);
$fileId = (int)$_GET['fileId'];
// on restitu le fichier
$requete = "SELECT * FROM files WHERE id='$fileId'";
$sql = mysql_query($requete);
if(mysql_num_rows($sql) != 1)
exit(false);
$file = mysql_fetch_array($sql);
readfile($file['filedir'].$file['name']);
break;
}
?>
<?php
define('CLEF', 'tGufgsdofdgds5g4d6r4ze98qr7ezhyR48dKpLojd58');
// Je suis serveur 2
function getcontent($server, $port, $file)
{
$cont = "";
$ip = gethostbyname($server);
$fp = fsockopen($ip, $port);
if (!$fp)
{
return "Unknown";
}
else
{
$com = "GET $file HTTP/1.1rnAccept: */*rnAccept-Language: de-chrnAccept-Encoding: gzip, deflaternUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0;  ;Windows NT 5.0)rnHost: $server:$portrnConnection: Keep-Alivernrn";
fputs($fp, $com);
while (!feof($fp))
{
$cont .= fread($fp, 500);
}
fclose($fp);
$cont = substr($cont, strpos($cont, "rnrn") + 4);
return $cont;
}
}
// est ce que cette requete comporte un mot de passe valide ?
if(empty($_GET['key']) || $_GET['key'] != CLEF)
exit(false);
// liste des actions OK :
$actionAutorise = array('getFile','updateFile');
// le serveur 1 :
$serveur_distant = 'www.domaine1.com';
// ensuite, on demande quoi?
// - une comparaison avec la liste de l'autre serveur en params (files)
// - une liste de fichiers serialisé pour l'autre serveur
$action = (!empty($_GET["action"]) && in_array($_GET["action"], $actionAutorise)) ? $_GET["action"] : exit(false) ;
// connexion mysql
mysql_connect('localhost','****','****');
mysql_select_db('****');
switch($action)
{
case 'getFile':
if(empty($_GET['fileId']) || !is_numeric($_GET['fileId']))
exit(false);
$fileId = (int)$_GET['fileId'];
// on restitu le fichier
$requete = "SELECT * FROM files WHERE id='$fileId'";
$sql = mysql_query($requete);
if(mysql_num_rows($sql) != 1)
exit(false);
$file = mysql_fetch_array($sql);
// header("Content-disposition: attachment; filename=".$file['name']);
// header("Content-Length: ".filesize($file['filedir'].$file['name']));
readfile($file['filedir'].$file['name']);
break;
case 'updateFile':
if(empty($_GET['fileId']) || !is_numeric($_GET['fileId']))
exit(false);
$fileId = (int)$_GET['fileId'];
if(empty($_GET['fileVersion']) || !is_numeric($_GET['fileVersion']))
exit(false);
$fileVersion = (int)$_GET['fileVersion'];
$requete = "SELECT * FROM files WHERE id='$fileId'";
$sql = mysql_query($requete);
if(mysql_num_rows($sql) != 1)
exit(false);
$file = mysql_fetch_array($sql);
if($file['version'] < $fileVersion)
{
$content = getcontent($serveur_distant, "80", '/file.php?key='.CLEF.'&action=getFile&fileId='.$file['id']);
// si 1, on met à jours la BDD du serveur 1
if(!empty($content))
{
// on remplace le nouveau contenu - fopen w+ puis sauvegarde. - serai rapide avec touch(), mais pour le moment restons simple.
$local_file = $file['filedir'].$file['name'];
$fp = fopen($local_file, "w");
$reponse = (fwrite($fp, $content)) ? true : false;
fclose($fp);
if($reponse == true)
{
$requete = "UPDATE files SET version='".$fileVersion."' WHERE id='$id'";
mysql_query($requete);
}
else
exit(false);
}
else
exit(false);
}
break;
}
?>
<?php
define('CLEF', 'tGufgsdofdgds5g4d6r4ze98qr7ezhyR48dKpLojd58');
// Je suis serveur 2
// est ce que cette requete comporte un mot de passe valide ?
if(empty($_GET['key']) || $_GET['key'] != CLEF)
exit(false);
// liste des actions OK :
$actionAutorise = array('getFileList','checkAgainst');
// ensuite, on demande quoi?
// - une comparaison avec la liste de l'autre serveur en params (files)
// - une liste de fichiers serialisé pour l'autre serveur
$action = (!empty($_GET["action"]) && in_array($_GET["action"], $actionAutorise)) ? $_GET["action"] : exit(false) ;
// connexion mysql
mysql_connect('localhost','****','****');
mysql_select_db('****');
switch($action)
{
case 'getFileList':
// on recupere la liste des fichiers presente sur le serveur
// api.php?key=abc&action=getFileList&option=onlyVersion
$allfiles = array();
$requete = "SELECT * FROM files";
$sql = mysql_query($requete);
$nbr = mysql_num_rows($sql);
while($file = mysql_fetch_array($sql))
{
$allfiles[$file['id']] = $file;
}
echo serialize($allfiles);
break;
}
?>
Nous - Plan du site - Informations légale - Contact - © Graphiks.net