- Home
- Categorie
- Coding e Sistemistica
- PHP
- Aggiornamento file xml
-
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.
-
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
-
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]
-
Unico errore rimasto? Puoi specificare quale, per favore
-
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).
-
Metti 777 sulla cartella che deve contenere il file
-
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.
-
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
-
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 1oppure 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.
-
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.
-
utilizzi qualche mod per il caching dei contenuti?
-
no... nulla...
-
Ho trovato la soluzione ai miei problemi in un altro vostro topic 127762-refresh-datagrid-dopo-aggiornamento-file-xml.html... Grazie 1000