• User Attivo

    Il codice base è questo. Presente in un altro mio topic. Corretto da te 🙂
    Il codice è quello, cambiano solo i nomi delle variabili. Dimenticavo che lo script php viene eseguito da cron con questo comando.

    php -q httpdocs/Statistiche/Cron/creatore_xml.php
    

    [PHP]$file = '';
    $fp = fsockopen("artic.nsn3.net", 8080, $errno, $errstr, 30);
    if (!$fp) {
    echo "$errstr ($errno)<br />\n";
    } else {
    $out = "GET /hosts/nsh_dewizards/public/raw_status.txt HTTP/1.1\r\n";
    $out .= "Host: artic.nsn3.net\r\n";
    $out .= "Connection: Close\r\n\r\n";
    fwrite($fp, $out);
    $header = '';
    do{
    $header .= fgets($fp, 128);
    }while(strpos($header, "\r\n\r\n") === false);
    while(!feof($fp)){
    $file.=fgets($fp, 128);
    }
    fclose($fp);
    }

    $testo = explode('clients=', $file);
    if(isset($testo[1]))
    {
    $testo = explode("\n", $testo[1]);

    echo $testo[0];

    $stringa_xml_doc = "
    <?xml version="1.0" encoding="UTF-8"?>
    <pie>
    \t<slice title="Sevenshard">$testo[0]</slice>
    \t<slice title="Once a day">300</slice>
    \t<slice title="Once a week">4</slice>
    \t<slice title="Once a week">4</slice>
    </pie>
    ";

    $stringa_xml = $stringa_xml_doc;

    $file_name = "ampie/ampie_data.xml";
    $file = fopen ($file_name,"w");
    $num = fwrite ($file, $stringa_xml);

    fclose($file);

    }[/PHP]

    Riporto il codice invece presente nelle righe segnalate nella e-mail di cron.

    78 - $file = fopen ($file_name,"w");
    79 - $num = fwrite ($file, $stringa_xml);
    81 - fclose($file);
    136 - while ($row = mysql_fetch_array($query)) {
    143 - while ($row = mysql_fetch_array($query)) {
    204 - while ($row = mysql_fetch_array($query)) {
    211 - while ($row = mysql_fetch_array($query)) {

    Il problema quindi sono le righe 78 79 e 81. Tra la 79 e l'81 c'è solo una riga vuota.


  • Super User

    Intanto devi partire con il verificare i permessi sul file da lavorare, magari per fare una prova metti 777 sulla cartella che lo contiene

    		 				 [PHP](http://www.giorgiotave.it/wikigt/os/PHP) Warning:   [fopen](http://www.giorgiotave.it/wikigt/os/Fopen)(../Ampie/ampie_data_uo.xml):  failed to open stream: No such file or directory in  /var/www/vhosts/dynamicbox.it/httpdocs/Statistiche/Cron/creatore_xml.php  on line 78

  • User Attivo

    Ho impostato il file 777, ma nulla... Ho rivisto il codice, e in questa parte si individua l'unico errore che mi è rimasto.

    [PHP]$sql="SELECT client_1, client_2 FROM dynamic_statistiche WHERE progetto='sevenshard'";
    $query = @mysql_query ($sql) or die (mysql_error());

    while ($row = mysql_fetch_array($query)) {

    $client_1="$row[client_1]";
    $client_2="$row[client_2]";

    $media = ceil((($client_1 + $client_2) / 2));

    $sql="UPDATE dynamic_statistiche SET media='$media' WHERE progetto='sevenshard'";
    $query = @mysql_query ($sql) or die (mysql_error());

    }[/PHP]


  • Super User

    Unico errore rimasto? Puoi specificare quale, per favore 😉


  • User Attivo

    L'errore rimasto è quello della riga 136, cioè il while che ho scritto nel messaggio #6. Mentre per gli errori della riga 78 79 81 (lettura, scrittura e chiusura del file .xml non riesco a trovare soluzione).


  • Super User

    Metti 777 sulla cartella che deve contenere il file


  • Super User

    ti butto lì un idea, ma per la lettura del xml con i dati realtime perchè non utilizzare ajax, magari con un refresh ogni minuto?

    così avrai sempre dei dati aggiornati sulla situazione del sito.

    per la questione valore 0 anche se ci sono 4 persone connesse, beh penso dipenda da quanto spesso il cron chiama il generatore del xml.


  • User Attivo

    La chiamata avviene ogni 5 minuti. Anche se dovesse avvenire ogni 20 minuti il problema si presenterebbe lo stesso.
    Ho messo anche 777 sulla cartella, nessun risultato positivo


  • Super User

    un dubbio il sistema funziona così:

    12.00 il cron chiama lo script aggiornamento, 0 persone connesse, quindi 0 nel xml
    12.01 io mi collego, leggo il file xml e trovo 0
    12.05 il cron chiama lo script aggiornamento, 1 persona connessa, quindi 1 nel xml
    12.06 un altra persona si collega, legge il file xml e trova 1

    oppure ogni volta che un utente si collega il sistema chiama l'aggiornamento?

    io personalmente, per una maggiore praticità, farei una cosa del genere:

    in un file txt metto i seguenti dati:

    timestamp - md5(ip)

    l'aggiornamento e check viene fatto ogni volta che viene aperta una pagina

    fai si che il tutto venga processato prima dell'header e valuti magari un timeout di 30minuti per ip (alternativamente puoi fare una cosa analoga usando dei cookie se non vuoi farlo per ip)

    personalmente io eviterei un cron per una cosa del genere, soprattuto perchè se funziona generando solo lui i dati nel xml non avrai mai i dati aggiornati.


  • User Attivo

    Ci sono molti modi per ottenere un risultato più che accettabile.
    Io sto utilizzando questo sistema perché ho più libertà di movimento e sopratutto perché può essere interfacciato con phpbb3, joomla e wordpress.

    Comunque ricordo che il sistema funziona, nonostante Cron mi invii per e-mail questi errori, il codice funziona alla meraviglia. Però l'unico problema è che il file .xml non si aggiorna subito, ma sono dopo assere stato caricato via web.


  • Super User

    utilizzi qualche mod per il caching dei contenuti?


  • User Attivo

    no... nulla...


  • User Attivo

    Ho trovato la soluzione ai miei problemi in un altro vostro topic 127762-refresh-datagrid-dopo-aggiornamento-file-xml.html... Grazie 1000