Problema leggere su file di testo remoti

meteospeziacom

Nuovo Utente
21 Feb 2013
9
0
0
Ciao a tutti,
premetto che sono un novellino in php e mi strovo i una situzione diffcile per un lavoro commissionatomi.

Proverò a spiegarvi.
Tempo fa, assieme ad un amico esperto in php, creammo questa rete di rilevamento meteo (www.meteospezia.com/retesp.php), questa rete legge i dati in questa maniere:

Ogni stazione, ad intervalli regolari fa un upload di un file di testo verso il proprio spazio web mente uno script va a leggere le righe di questo file di testo e restiruisce a video il valore.
Qeusto file di testo è uguale, strutturalmente, per tutte le stazione e se volete vederne uno lo potete consultare a questo indirizzo www.meteospezia.com/rete/wx.txt

Bene, tutto al momento funziona ma , dal proprietario del sito madre, mio è stata chiesta una milgioria ossia, far apparire in homepage del sito (www.meteospezia.com) un modulo (il sito è in joomla) che contenga una pagina php che mostri in tepo reale i dati di tutte le stazioni delle rete, per farvi un'esempio servirebeb una cosa del genere


Nome stazione
Temp
Umid
T.max
T.min

Nome stazione 2
Temp
Umid
T.max
T.min

e cosi via pert tutte.

Purtyroppo questa persona che mi aveva aiuto, o meglio, fatto la rete non è piu disponibile e ora sono nelle canne piu totali

In pratica servirebbe una pagina e con uno script che vada a leggere le righe numero 1-5-8-11-18 di ogni file realtivo alla propria stazione e lo restituisse a video.

Per l'impaginazione poi ci penserei io, mi serve solo lo script.

Vi ringrazio dell'attenzione e spero che la cosa sia fattibile.

Saluti
Davide
 
Ciao, per leggere un file puoi fare cosi
PHP:
<?php

// file da leggere
$file = "http://www.meteospezia.com/rete/wx.txt";
// righe da leggere
$daleggere = array(1, 5, 8, 11, 18);
// apriamo il file in lettura      
$fr = fopen($file, 'r');
// incrementatore
$k = 0;
while (!feof($fr)) {
    //incrementiamo subito
    $k++;
    // recuperiamo la riga
    $riga = fgets($fr);
    // se è una riga da leggere
    if (in_array($k, $daleggere)) {
        // leggiamo la riga
        echo $riga . "<br/>";
    }
}
// chiudiamo il file
fclose($fr);
?>
per leggere piu file puoi inserire il tutto dentro ad un ciclo e cambiare indirizzo ad ogni iterazione
ho commentato il codice se hai bisgono chiedi pure
 
Ciao, per leggere un file puoi fare cosi
PHP:
<?php

// file da leggere
$file = "http://www.meteospezia.com/rete/wx.txt";
// righe da leggere
$daleggere = array(1, 5, 8, 11, 18);
// apriamo il file in lettura      
$fr = fopen($file, 'r');
// incrementatore
$k = 0;
while (!feof($fr)) {
    //incrementiamo subito
    $k++;
    // recuperiamo la riga
    $riga = fgets($fr);
    // se è una riga da leggere
    if (in_array($k, $daleggere)) {
        // leggiamo la riga
        echo $riga . "<br/>";
    }
}
// chiudiamo il file
fclose($fr);
?>
per leggere piu file puoi inserire il tutto dentro ad un ciclo e cambiare indirizzo ad ogni iterazione
ho commentato il codice se hai bisgono chiedi pure

wow...velocissimo..
provo subito e se ho bisogno non esiterò :)

grazie mille
 
ok benissimo...funziona alla grandissima,

mi viene questo

La Spezia
4,8
87
1007,08
16,1
N

Se volessi inserire del testo per farlo diventare cosi, echo dove devo metterlo?


La Spezia
T°C: 4,8
UR: 87%
P:1007,08 hpa
V:16,1 N

Scusa sono prorio zero :(
 
modifica cosi
PHP:
<?php

// file da leggere
$file = "http://www.meteospezia.com/rete/wx.txt";
// righe da leggere e intestazioni
$daleggere = array(
    1 => "",
    5 => "T&deg;C: ",
    8 => "UR: ",
    11 => "P: ",
    18 => "V: "
);
// apriamo il file in lettura      
$fr = fopen($file, 'r');
// incrementatore
$k = 0;
// ciclo del file
while (!feof($fr)) {
    //incrementiamo subito
    $k++;
    // recuperiamo la riga
    $riga = fgets($fr);
    // se è una riga da leggere
    if (array_key_exists($k, $daleggere)) {
        // la leggiamo
        echo $daleggere[$k] . $riga . "<br/>";
    }
}
// chiudiamo il file
fclose($fr);
?>
Edit:
attento che ho modificato sia l'array che la condizione nel ciclo
 
modifica cosi
PHP:
<?php

// file da leggere
$file = "http://www.meteospezia.com/rete/wx.txt";
// righe da leggere e intestazioni
$daleggere = array(
    1 => "",
    5 => "T&deg;C: ",
    8 => "UR: ",
    11 => "P: ",
    18 => "V: "
);
// apriamo il file in lettura      
$fr = fopen($file, 'r');
// incrementatore
$k = 0;
// ciclo del file
while (!feof($fr)) {
    //incrementiamo subito
    $k++;
    // recuperiamo la riga
    $riga = fgets($fr);
    // se è una riga da leggere
    if (array_key_exists($k, $daleggere)) {
        // la leggiamo
        echo $daleggere[$k] . $riga . "<br/>";
    }
}
// chiudiamo il file
fclose($fr);
?>
Edit:
attento che ho modificato sia l'array che la condizione nel ciclo

Ottimo..latro passo anvanti..
Ora il riusltato è questo
La Spezia
T: 4,8
UR: 86
P: 1006,61
V: 16,1

Se si riscisse a metter il °C dopo il valore 4.8 e aggiungere la direzione del vento dopo 16,1 mi mancherevve solo array per i fiel remoti e avrei finito

Ti devo mille cene....
 
La direzione del vento quale sarebbe? nel file che mi hai linkato non la trovo
intanto prova cosi per separare i °C
PHP:
<?php

// file da leggere
$file = "http://www.meteospezia.com/rete/wx.txt";
// righe da leggere e intestazioni
$daleggere = array(
    1 => "|",
    5 => "T:|&deg;C ",
    8 => "UR:| ",
    11 => "P:| ",
    18 => "V:| "
);
// apriamo il file in lettura      
$fr = fopen($file, 'r');
// incrementatore
$k = 0;
// ciclo del file
while (!feof($fr)) {
    //incrementiamo subito
    $k++;
    // recuperiamo la riga
    $riga = fgets($fr);
    // se è una riga da leggere
    if (array_key_exists($k, $daleggere)) {

        // dividiamo il valore
        $split = explode("|", $daleggere[$k]);
        // stampiamo
        echo $split[0] . $riga . $split[1] . "<br/>";
    }
}
// chiudiamo il file
fclose($fr);
?>

edit:
ok ho visto ora i numeri delle righe
 
Ultima modifica:
Ho modificato le righe dello script aggiungendo la riga 36 corrispondente alla direzione del vento
PHP:
 <?php

// file da leggere
$file = "http://www.meteospezia.com/rete/wx.txt";
// righe da leggere e intestazioni
$daleggere = array(
    1 => "|",
    5 => "T:|&deg;C ",
    17 => "UR:| ",
    29 => "P:| ",
    35 => "V:| ",
    36 => "",
);
// apriamo il file in lettura      
$fr = fopen($file, 'r');
// incrementatore
$k = 0;
// ciclo del file
while (!feof($fr)) {
    //incrementiamo subito
    $k++;
    // recuperiamo la riga
    $riga = fgets($fr);
    // se è una riga da leggere
    if (array_key_exists($k, $daleggere)) {
        // la leggiamo
        echo $daleggere[$k] . $riga . "<br/>";
    }
}
// chiudiamo il file
fclose($fr);
?>

e il risultato è questo

|La Spezia
T:|°C 5,1
UR:| 86
P:| 1006,47
V:| 11,3
NNE

Purtroppo il °C non riesce ad andare al di la del valore...ma quelo sarebbe il meno, quello che mi serve di piu è aggiungere la direzionea fianco alla velocità del vento e l'array dei file sorgenti

TIPO UNA COSA COSI


La Spezia
T:5,1°C
UR:86%
P:1006,47
V:11,3 NNE
 
ok aggiunto anche la direzione del vento
PHP:
<?php

// file da leggere
$file = "http://www.meteospezia.com/rete/wx.txt";
// righe da leggere e intestazioni
$daleggere = array(
    1 => "|",
    5 => "T:|&deg;C ",
    8 => "UR:| ",
    29 => "P:| ",
    35 => "V:| ",
    36 => "|"
);
// apriamo il file in lettura      
$fr = fopen($file, 'r');
// incrementatore
$k = 0;
// ciclo del file
while (!feof($fr)) {
    //incrementiamo subito
    $k++;
    // recuperiamo la riga
    $riga = fgets($fr);
    // se è una riga da leggere
    if (array_key_exists($k, $daleggere)) {

        // dividiamo il valore
        $split = explode("|", $daleggere[$k]);
        // stampiamo
        echo $split[0] . $riga . $split[1] . " ";
        // se la riga non è quella del vento andiamo a capo
        if ($k != 35) {
            echo "<br/>";
        }
    }
}
// chiudiamo il file
fclose($fr);
?>
 
Purtroppo il °C non riesce ad andare al di la del valore...ma quelo sarebbe il meno, quello che mi serve di piu è aggiungere la direzionea fianco alla velocità del vento e l'array dei file sorgenti
perche non sei stato attento al codice che ti ho postato
 
in effetti...ora è corretto....uff...eppure avevo guardato bene...dannat ascemenza..

Grazie infinite cavolo...ora cerco googlando per l'array...ma ce la faro :D
 
Grazie infinite...ci sono riuscito...questpo è il codice finale funzionante
PHP:
<?php

// file da leggere
$file = array(
"http://www.meteospezia.com/rete/wx.txt",
"http://www.sanbenedettometeo.it/wd/wx.txt",
"http://beverinometeo.altervista.org/wx.txt",
"http://www.meteolaserra.it/dati/wx.txt",
"http://lalizzameteo.altervista.org/wx_out.txt",
"http://www.speziafoto.it/temp2/wx.txt",
"http://www.buto.it/Meteo/file/wx.txt",
"http://www.valdipino.it/staz_met/dinamico/wx.txt",
"http://www.caniparolameteo.altervista.org/rete_osservativa.txt",
"http://www.meteovareseligure.it/limet/wx.txt",
"http://bobkrest.altervista.org/wx.txt",
"http://retelimet.centrometeoligure.it/meteo-beverone/rete_limet.txt",
"http://retelimet.centrometeoligure.it/meteo-vernazza/rete_limet.txt",
"http://www.meteolevanto.com/stazionemeteo/rete_limet.txt",
"http://meteolospezia.altervista.org/rete_limet.txt",
"http://www.mgpcservice.it/meteo/wx.txt",
"http://www.mgpcservice.it/meteo_sarzana/wx.txt"
);


// righe da leggere e intestazioni
$daleggere = array(
    1 => "|",
    5 => "T:|&deg;C ",
    8 => "UR:| ",
    29 => "P:| ",
    35 => "V:| ",
    36 => "|"
);
for ($i=0;$i<count($file);$i++)
{

  // apriamo il file in lettura      
  $fr = fopen($file[$i], 'r');
  // incrementatore
  $k = 0;
  // ciclo del file
  while (!feof($fr)) {
      //incrementiamo subito
      $k++;
      // recuperiamo la riga
      $riga = fgets($fr);
      // se è una riga da leggere
      if (array_key_exists($k, $daleggere)) {
  
          // dividiamo il valore
          $split = explode("|", $daleggere[$k]);
          // stampiamo
          echo $split[0] . $riga . $split[1] . " ";
          // se la riga non è quella del vento andiamo a capo
          if ($k != 35) {
              echo "<br/>";
          }
      }
  }
  // chiudiamo il file
  fclose($fr);
}
  
?>

Ora sistemerò la grafica...

:beer::beer::beer::beer:
 
Ultima modifica di un moderatore:

Discussioni simili