salve ho creato questa pagina con il quale da una lista di elementi per "tabelle" chiamata vetrina... a questo punto vorrei sapere
come far si che ogni tot minuti il bot in php legge la vetrina e restituisce su mirc i file che ci sono su una categoria,,come posso fare?
come far si che ogni tot minuti il bot in php legge la vetrina e restituisce su mirc i file che ci sono su una categoria,,come posso fare?
Codice:
<?
require_once('config.php');
require_once('function.php');
class InsiemeVetrine
{
private $vetrine;
private static $istanza;
public static function creaInsiemeVetrine()
{
if( isset($istanza) )
{
return InsiemeVetrine::$istanza;
}
else if( is_file(STATOVETRINA) )
{
if( ($fp = fopen(STATOVETRINA, "r")) )
{
if( (InsiemeVetrine::$istanza = unserialize(fread($fp, filesize(STATOVETRINA)))) === false )
InsiemeVetrine::$istanza = new InsiemeVetrine();
fclose($fp);
return InsiemeVetrine::$istanza;
}
}
else
{
InsiemeVetrine::$istanza = new InsiemeVetrine();
return InsiemeVetrine::$istanza;
}
}
public function eliminaVetrine()
{
if( (is_file(STATOVETRINA) === true) && (unlink(STATOVETRINA) === true) )
if( (is_file(VETRINACONF) === true) && (unlink(VETRINACONF) === true) )
InsiemeVetrine::$istanza = NULL;
}
private function __construct()
{
$vetrine = array();
if ( file_exists(VETRINACONF) )
unlink(VETRINACONF);
}
// aggiunge una vetrina
public function aggiungiVetrina($nomeVetrina)
{
if( !isset($this->vetrine[$nomeVetrina]) )
{
$this->vetrine[$nomeVetrina] = array();
$this->salvaStatoInsiemeVetrine();
return true;
}
return false;
}
// elimina completamente la vetrina passata
public function eliminaVetrina($nomeVetrina)
{
if( isset($this->vetrine[$nomeVetrina]) ) //se esiste la vetrina
{
unset($this->vetrine[$nomeVetrina]); // allora posso fare l'unset della vetrina passata
$this->salvaStatoInsiemeVetrine(); // salvare lo stato dell'oggetto vetrina su file
if( (is_file(VETRINACONF) === true) && unlink(VETRINACONF) === true ) //e se riesco ad eliminare la cache delle vetrine
$this->salvaVetrineSuFile(); // e la cache
return true;
}
return false;
}
// svuota dagli elementi la vetrina passata
public function svuotaElemVetrina($nomeVetrina)
{
if( isset($this->vetrine[$nomeVetrina]) ) //se esiste la vetrina passata
{
unset($this->vetrine[$nomeVetrina]['listaElem']); //posso fare l'unset di listaElem
$this->salvaStatoInsiemeVetrine(); //e salvare lo stato dell'oggetto
return true;
}
return false;
}
// crea l'associazione bot<-->vetrina
public function aggiungiBotAllaVetrina($nomeVetrina, $nomeBot)
{
if( isset($this->vetrine[$nomeVetrina]) ) //se è definita la vetrina passata
{
if( seBotEsiste($nomeBot) ) //e se esiste il bot passato
{
if( !isset($this->vetrine[$nomeVetrina]['listaBot']) ) //se non è definito listaBot, ed è quindi il primo bot, devo aggiungere il :
{
$this->vetrine[$nomeVetrina]['listaBot'] = ":".$nomeBot.":";
$this->salvaStatoInsiemeVetrine();
return true;
}
else if( stripos($this->vetrine[$nomeVetrina]['listaBot'], ":".$nomeBot.":") === false ) //se è definita listaBot controllo che nomeBot non esista, e allora posso concatenarlo alla listaBot esistente
{
$this->vetrine[$nomeVetrina]['listaBot'] .= $nomeBot.":";
$this->salvaStatoInsiemeVetrine();
return true;
}
}
}
return false;
}
// elimina l'associazione bot<-->vetrina
public function togliBotAllaVetrina($nomeVetrina, $nomeBot)
{
if( isset($this->vetrine[$nomeVetrina]) && isset( $this->vetrine[$nomeVetrina]['listaBot'] )) //se è definita la vetrina passata e questa contiene almeno un bot
{
if( stripos($this->vetrine[$nomeVetrina]['listaBot'], ":".$nomeBot.":") !== false ) //se esiste il bot passato
{
//salvo temporaneamente il valore di [listaBot] per poi farne l'unset, e ricostruirlo senza il bot passato
$listaBot = $this->vetrine[$nomeVetrina]['listaBot'];
unset($this->vetrine[$nomeVetrina]['listaBot']);
$bot = strtok($listaBot, ":");
while( $bot !== false )
{
if( $bot != $nomeBot )
{
$this->aggiungiBotAllaVetrina($nomeVetrina, $bot);
}
$bot = strtok(":");
}
//se la vetrina contiene un solo bot, ed è quello passato, e l'aggiornamento vetrine è in modalità automatica allora devo cancellare la lista di elementi
if( !isset($this->vetrine[$nomeVetrina]['listaBot']) )
{
if( (AGGIORNAMENTOVETRINE == "Automatico") && isset($this->vetrine[$nomeVetrina]['listaElem']) )
{
unset($this->vetrine[$nomeVetrina]['listaElem']);
$this->caricaElementiVetrina($nomeVetrina);
}
}
$this->salvaStatoInsiemeVetrine();
$this->salvaVetrineSuFile();
return true;
}
}
return false;
}
// aggiunge un elemento alla vetrina
public function aggiungiElementoAllaVetrina($nomeVetrina, $nomeElemento)
{
if( isset($this->vetrine[$nomeVetrina]) ) //se esiste la vetrina passata
{
if( !isset($this->vetrine[$nomeVetrina]['listaElem']) ) //se è il primo elemento ad essere aggiunto devo mettere il :
{
$this->vetrine[$nomeVetrina]['listaElem'] = ":".$nomeElemento.":";
$this->salvaStatoInsiemeVetrine();
return true;
}
//nel caso in cui esistono già elementi , controllo che l'elemento passato non esista, e che il numero di elementi sia <= al numero di elementi consentito, per aggiungere l'elemento passato
else if( (stripos($this->vetrine[$nomeVetrina]['listaElem'], ":".$nomeElemento.":") === false) && (substr_count($this->vetrine[$nomeVetrina]['listaElem'], ":") <= MAXELEMPERVETRINA) )
{
$this->vetrine[$nomeVetrina]['listaElem'] .= $nomeElemento.":";
$this->salvaStatoInsiemeVetrine();
return true;
}
}
return false;
}
// toglie un alemento dalla vetrina
public function togliElementoAllaVetrina($nomeVetrina, $nomeElemento)
{
if( isset($this->vetrine[$nomeVetrina]) ) //se esiste la vetrina passata
{
if( isset($this->vetrine[$nomeVetrina]['listaElem']) ) //e se esistono degli elementi in questa vetrina
{
if( stripos($this->vetrine[$nomeVetrina]['listaElem'], ":".$nomeElemento.":") !== false ) //e se l'elemento passato esiste negli elementi di questa vetrina
{
//salvo temporaneamente il valore di [listaElem] per poi farne l'unset, e ricostruirlo senza il bot passato
$listaElem = $this->vetrine[$nomeVetrina]['listaElem'];
unset($this->vetrine[$nomeVetrina]['listaElem']);
$elem = strtok($listaElem, ":");
while( $elem !== false )
{
if( $elem != $nomeElemento)
$this->aggiungiElementoAllaVetrina($nomeVetrina, $elem);
$elem = strtok(":");
}
$this->salvaStatoInsiemeVetrine();
$this->salvaVetrineSuFile();
}
}
}
}
// ridimensiona dal numero di elementi la vetrina
public function ridimensionaVetrine($numElem)
{
$listaVetrine = array_keys($this->vetrine);
foreach ($listaVetrine as $nomeVetrina)
{
if( isset($this->vetrine[$nomeVetrina]['listaElem']) && ((substr_count($this->vetrine[$nomeVetrina]['listaElem'], ":")-1) > $numElem) )
{
$numElemTemp = 0;
$listaElem = $this->vetrine[$nomeVetrina]['listaElem'];
unset($this->vetrine[$nomeVetrina]['listaElem']);
$elem = strtok($listaElem, ":");
while( ($elem !== false) && ($numElemTemp < $numElem) )
{
$this->aggiungiElementoAllaVetrina($nomeVetrina, $elem);
$elem = strtok(":");
$numElemTemp++;
}
}
}
$this->salvaStatoInsiemeVetrine();
$this->salvaVetrineSuFile();
}
// fa la vetrina in automatico e ne salva su file la configurazione
public function caricaElementiVetrina($nomeVetrina)
{
if( isset($this->vetrine[$nomeVetrina]) && isset($this->vetrine[$nomeVetrina]['listaBot']) )
{
if( isset($this->vetrine[$nomeVetrina]['listaElem']) )
unset($this->vetrine[$nomeVetrina]['listaElem']);
$numeroBot = substr_count($this->vetrine[$nomeVetrina]['listaBot'], ":")-1;
$numeroElemPerBot = ceil(MAXELEMPERVETRINA/$numeroBot);
$listaBot = $this->vetrine[$nomeVetrina]['listaBot'];
$bot = strtok($listaBot, ":");
$numeroElementi = MAXELEMPERVETRINA;
/* funziona con un solo bot, perchè uso piu strtok contemporaneamente */
while( $bot !== false )
{
if( ($fileBot = seBotEsiste($bot)) )
{
if( ($fp = fopen($fileBot, "r")) )
{
if( preg_match_all("/] ([0-9]{4}\-[0-9]{1,2}\-[0-9]{1,2}) ([0-9]{2}:[0-9]{2}) (.+)/mi", fread($fp, filesize($fileBot)), $match) )
{
for($i=(count($match[3])-1), $numeroElemPerBotTemp=$numeroElemPerBot; ( ($numeroElementi>0) && ($i>=0) && ($numeroElemPerBotTemp>0) ); $i--)
{
$poscor = 0;
$posdef = 255;
$index = $i;
for($j=(count($match[3])-1); $j>=0; $j--)
{
if( $match[3][$i] != $match[3][$j] )
{
if( ($poscor = $this->similStringhe($match[3][$i], $match[3][$j])) )
{
if( $poscor<$posdef )
{
$index = $j;
$posdef = $poscor;
}
}
}
}
if( $this->aggiungiElementoAllaVetrina($nomeVetrina, substr($match[3][$index], 0, $posdef)) == true )
{
$numeroElementi--;
$numeroElemPerBotTemp--;
}
}
}
}
}
$bot = strtok(":");
}
$this->salvaVetrineSuFile();
return true;
}
return false;
}
public function caricaElementiVetrine()
{
$listaVetrine = array_keys($this->vetrine);
foreach ($listaVetrine as $nomeVetrina)
$this->caricaElementiVetrina($nomeVetrina);
}
/* restituisce 0 se le due stringhe sono diverse, > 0 se sono simili */
public function similStringhe($str1, $str2)
{
$temp = 0;
$temp1 = 0;
$lenstr1 = strlen($str1);
$lenstr2 = strlen($str2);
if( abs($lenstr1-$lenstr2) <= 2 )
{
if( $lenstr1 < $lenstr2 )
{
$min = $lenstr1;
$max = $lenstr2;
}
else
{
$min = $lenstr2;
$max = $lenstr1;
}
for($i=0; $i<$min; $i++)
{
if( $str1[$i] == $str2[$i] )
$temp++;
else
break;
}
for($i=($lenstr1-1),$j=($lenstr2-1); ($i>$temp && $j>$temp); $i--,$j--)
{
if( $str1[$i] == $str2[$j] )
$temp1++;
else
break;
}
if( abs($max-($temp+$temp1)) <= 2 )
return $temp;
}
return 0;
}
/* fa una copia su file dell'oggetto */
public function salvaStatoInsiemeVetrine()
{
if( $fp = fopen(STATOVETRINA, "w") )
fwrite($fp, serialize(InsiemeVetrine::$istanza));
fclose($fp);
}
/* salva la configurazione delle vetrine su un file di testo */
public function salvaVetrineSuFile()
{
if( is_file(VETRINACONF) !== false )
unlink(VETRINACONF);
if( $fp = fopen(VETRINACONF, "w+") )
{
$listaVetrine = array_keys($this->vetrine);
foreach ($listaVetrine as $nomeVetrina)
{
if( isset($this->vetrine[$nomeVetrina]['listaElem']) )
{
$temp = $nomeVetrina."|".$this->vetrine[$nomeVetrina]['listaElem']."\r\n";
fwrite($fp, $temp);
}
}
fclose($fp);
}
}
/* restituisce i bots addati alla singola vetrina */
public function botsDellaVetrina($nomeVetrina)
{
if( isset($this->vetrine[$nomeVetrina]['listaBot']) )
{
$listaBot = $this->vetrine[$nomeVetrina]['listaBot'];
$bots = NULL;
$bot = strtok($listaBot, ":");
while( $bot !== false )
{
$bots[] = $bot;
$bot = strtok(":");
}
return $bots ? $bots : NULL;
}
}
public function warning($message)
{
echo "<br><p class=\"warning\">".$message."<br></p>";
}
// stampa il contenuto della vetrina salvata su file
public function mostraVetrina()
{
if( AGGIORNAMENTOVETRINE == "Automatico" )
{
$Vetrine = InsiemeVetrine::creaInsiemeVetrine();
$Vetrine->caricaElementiVetrine();
}
if( is_file(VETRINACONF) && (filesize(VETRINACONF) > 0) )
{
if( ($linee = file(VETRINACONF)) !== false )
{
$count_vetrine=0;
foreach ($linee as $linea)
{
if( stripos($linea, ":") !== false ) //se ci sono elementi presenti nella vetrina
{
$count = 0;
$nomeVetrina = strtok($linea, "|");
if( $nomeVetrina !== false )
{
echo "<div class=\"vetrina\">";
echo "<p>".$nomeVetrina."</p>";
echo "<ul>";
$token = strtok(":");
while( ($token !== false) && ($token != "\r\n") && ($count++ < MAXELEMPERVETRINA) )
{
echo "<li><a class=\"pos".$count."\" title=\"$token\" href=\"#\">".htmlentities($token)."</a></li>";
$token = strtok(":");
}
while( $count < MAXELEMPERVETRINA )
{
echo "<li></li>";
$count++;
}
echo "</ul>";
echo "</div>";
}
$count_vetrine++;
}
}
}
}
}
public function impostazioniVetrina()
{
if( loggato() )
{
echo "<center>";
echo "<table>";
echo "<tr>";
echo "<form method=\"POST\" action=\"accedi.php?act=vetrina\">";
echo "<td><b>Aggiungi Vetrina: </b></td>";
echo "<td><input type=\"text\" name=\"nomeVetrina\"></input></td>";
echo "<td><input type=\"submit\" name=\"do\" value=\"Aggiungi\"></input></td>";
echo "</form>";
echo "</tr>";
echo "</table>";
echo "</center>";
if( isset($_POST['nomeVetrina']) && isset($_POST['do']) )
if( $_POST['do'] == "Aggiungi" )
if( $this->aggiungiVetrina($_POST['nomeVetrina']) == false )
$this->warning("Linea ".__line__.": vetrina <u>".$_POST['nomeVetrina']."</u> esistente.");
if( isset($this->vetrine) )
{
if( isset($_GET['do']) )
{
if( isset($_GET['nomeVetrina']) )
{
if( $_GET['do'] == "elimina" )
{
if( $this->eliminaVetrina($_GET['nomeVetrina']) == false )
{
$this->warning("Linea ".__line__.": vetrina <u>".$_GET['nomeVetrina']."</u> inesistente.");
}
}
else if( $_GET['do'] == "riempi" )
{
if( $this->caricaElementiVetrina($_GET['nomeVetrina']) == false )
{
$this->warning("Linea ".__line__.": vetrina <u>".$_GET['nomeVetrina']."</u> inesistente o nessun bot associato.");
}
}
else if( $_GET['do'] == "configura" )
{
if( isset($_POST['nomeBot']) && isset($_POST['submit']) )
{
if( $_POST['submit'] == "Associa" )
{
if( $this->aggiungiBotAllaVetrina($_GET['nomeVetrina'], $_POST['nomeBot']) == true )
{
if( AGGIORNAMENTOVETRINE == "Automatico" ) //se aggiornamento vetrine è su automatico allora devo aggiornare la vetrina
{
$this->caricaElementiVetrina($_GET['nomeVetrina']);
}
}
else
$this->warning("Linea ".__line__.": vetrina <u>".$_GET['nomeVetrina']."</u> o bot <u>".$_POST['nomeBot']."</u> errati.");
}
else if( $_POST['submit'] == "Elimina" )
{
if( $this->togliBotAllaVetrina($_GET['nomeVetrina'], $_POST['nomeBot']) == true )
{
if( AGGIORNAMENTOVETRINE == "Automatico" ) //se aggiornamento vetrine è su automatico allora devo aggiornare la vetrina
{
$this->caricaElementiVetrina($_GET['nomeVetrina']);
}
}
else
$this->warning("Linea ".__line__.": vetrina <u>".$_GET['nomeVetrina']."</u> inesistente o bot <u>".$_POST['nomeBot']."</u> errato.");
}
}
}
else if( $_GET['do'] == "salva" )
{
if( isset($_POST[0]) )
{
if( $this->svuotaElemVetrina($_GET['nomeVetrina']) == true )
{
for($i=0; $i<MAXELEMPERVETRINA; $i++)
if( isset($_POST["$i"]) && !empty($_POST["$i"]) )
$this->aggiungiElementoAllaVetrina($_GET['nomeVetrina'], $_POST["$i"]);
if( isset($_POST['nuovoNomeVetrina']) && ($_GET['nomeVetrina'] != $_POST['nuovoNomeVetrina']) )
{
if( !isset($this->vetrine[$_POST['nuovoNomeVetrina']]) )
{
$tempVetrine = $this->vetrine;
$this->vetrine = array();
$listaVetrine = array_keys($tempVetrine);
foreach ($listaVetrine as $nomeVetrina)
{
if( $nomeVetrina == $_GET['nomeVetrina'] )
{
$this->vetrine[$_POST['nuovoNomeVetrina']] = array();
if( isset($tempVetrine[$nomeVetrina]['listaElem']) )
$this->vetrine[$_POST['nuovoNomeVetrina']]['listaElem'] = $tempVetrine[$nomeVetrina]['listaElem'];
if( isset($tempVetrine[$nomeVetrina]['listaBot']) )
$this->vetrine[$_POST['nuovoNomeVetrina']]['listaBot'] = $tempVetrine[$nomeVetrina]['listaBot'];
}
else
{
$this->vetrine[$nomeVetrina] = array();
if( isset($tempVetrine[$nomeVetrina]['listaElem']) )
$this->vetrine[$nomeVetrina]['listaElem'] = $tempVetrine[$nomeVetrina]['listaElem'];
if( isset($tempVetrine[$nomeVetrina]['listaBot']) )
$this->vetrine[$nomeVetrina]['listaBot'] = $tempVetrine[$nomeVetrina]['listaBot'];
}
}
$this->salvaStatoInsiemeVetrine();
}
else
$this->warning("Linea ".__linee__.": vetrina <u>".$_POST['nuovoNomeVetrina']."</u> esistente.");
}
$this->salvaVetrineSuFile();
}
else
$this->warning("Linea ".__line__.": vetrina <u>".$_GET['nomeVetrina']."</u> inesistente.");
}
}
}
else if( $_GET['do'] == "aggiornamento" )
{
$this->caricaElementiVetrine();
}
}
$listaVetrine = array_keys($this->vetrine);
//riempio il form
foreach ($listaVetrine as $nomeVetrina)
{
echo "<div class=\"vetrinaprivata\">";
echo "<fieldset>";
echo "<legend><b>".$nomeVetrina."</b></legend>";
echo "<table>";
echo "<tr><td>";
echo "<table>";
echo "<form method=\"POST\" action=\"accedi.php?act=vetrina&nomeVetrina=".$nomeVetrina."&do=salva\">";
echo "<tr><th>Nome: <input type=\"text\" name=\"nuovoNomeVetrina\" value=\"".$nomeVetrina."\"></input></th></tr>";
$count = 0;
if( isset($this->vetrine[$nomeVetrina]['listaElem']) )
{
$temp = $this->vetrine[$nomeVetrina]['listaElem'];
$token = strtok($temp, ":");
while( $token !== false )
{
if( AGGIORNAMENTOVETRINE == "Automatico" )
echo "<tr><td>Elem ".$count.": <input type=\"text\" value=\"".$token."\" name=\"".$count++."\" readonly></input></td></tr>";
else
echo "<tr><td>Elem ".$count.": <input type=\"text\" value=\"".$token."\" name=\"".$count++."\"></input></td></tr>";
$token = strtok(":");
}
}
while($count<MAXELEMPERVETRINA)
{
if( AGGIORNAMENTOVETRINE == "Automatico" )
echo "<tr><td>Elem ".$count.": <input type=\"text\" name=\"".$count++."\" readonly></input></td></tr>";
else
echo "<tr><td>Elem ".$count.": <input type=\"text\" name=\"".$count++."\"></input></td></tr>";
}
echo "<tr><td><input align=\"right\" type=\"submit\" value=\"Salva\" name=\"".$nomeVetrina."\"></input></td></tr>";
echo "</form>";
echo "</table>";
echo "</td>";
echo "<td>";
if( (AGGIORNAMENTOVETRINE == "Automatico") && (($botsTotali = botsToArray()) != NULL) )
{
echo "<form method=\"POST\" action=\"accedi.php?act=vetrina&nomeVetrina=".$nomeVetrina."&do=configura\">";
echo "<table>";
echo "<tr><th>Lista Bot Disponibili</th></tr>";
echo "<tr>";
echo "<td>";
echo "<select class=\"CONFIG\" name=\"nomeBot\" size=\"10\">";
foreach( $botsTotali as $bot )
if( !isset($this->vetrine[$nomeVetrina]['listaBot']) || (stripos($this->vetrine[$nomeVetrina]['listaBot'], ":".$bot.":") === false) )
echo "<option>".$bot."</option>";
echo "</select>";
echo "</td>";
echo "</tr>";
echo "<tr>";
echo "<td>";
echo "<input type=\"submit\" name=\"submit\" value=\"Associa\">";
echo "<td>";
echo "</tr>";
echo "</table>";
echo "</td><td>";
echo "<table>";
if( ($botsVetrina = $this->botsDellaVetrina($nomeVetrina)) != NULL )
{
echo "<tr><th>Lista Bot Associati</th></tr>";
echo "<tr>";
echo "<td>";
echo "<select class=\"CONFIG\" name=\"nomeBot\" size=\"10\">";
foreach( $botsVetrina as $bot )
{
if( seBotEsiste($bot) )
{
echo "<option>".$bot."</option>";
}
else
{
$this->togliBotAllaVetrina($nomeVetrina, $bot);
echo "<meta http-equiv=\"Refresh\" content=\"0; url=accedi.php?act=vetrina\">";
}
}
echo "</select>";
echo "</td>";
echo "</tr>";
echo "<tr>";
echo "<td>";
echo "<input type=\"submit\" name=\"submit\" value=\"Elimina\">";
echo "</td>";
echo "</tr>";
}
echo "</table>";
echo "</form>";
}
echo "</td></tr>";
echo "</table>";
echo "<center>";
echo "<a href=\"accedi.php?act=vetrina&nomeVetrina=".$nomeVetrina."&do=elimina\">EliminaVetrina</a>";
echo "</center>";
echo "</fieldset>";
echo "</div>";
}
}
}
}
}
?>