Off-Topic > In piazza
Consiglio su flusso dati TCP e PHP
rccrcc:
Grazie ragazzi, problema risolto. Ignoravo l'esistenza di queste istruzioni, molto utili in un sacco di applicazioni.
Posto il risultato finale semplificato, può sempre tornare utile a qualcuno. Ho aggiunto un semplice javascript in cui mi visualizza soltanto l'ultimo valore, quindi mi da il valore in tempo reale ;)
A BUON RENDERE!!! ;D
--- Codice: ---<html>
<head>
<title>Temperatura</title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<link rel="SHORTCUT ICON" href="icona.ico">
<script type="text/javascript">
function dati_up(temp) {
document.getElementById("lblTemp").innerHTML = temp +" °C";
}
</script>
</head>
<body>
<span style="font-family:Tahoma; size: 10px; color:#000066"> TEMPERATURA:
<label id="lblTemp">0 °C</label></span>
<?php
$ip ="127.0.0.1";
$porta = "9999";
$comando = "TEMPERATURA\n";
$fp = fsockopen($ip, $porta, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
fwrite($fp, $comando);
while (!feof($fp)) {
set_time_limit(0); //evita il timeout
$dati= fgets($fp, 128);
echo "<script type='text/javascript'>dati_up($dati);</script>";
ob_flush();
flush();
}
fclose($fp);
}
?>
--- Termina codice ---
antonino.spampinato:
prego.
modifica script tyle in type.
ps. in basso.
Daniele8787:
Type.
Giulio:
flush() funziona quindi :)
Daniele8787:
Boh, io l'ho provato in tutti i modi e ti assicuro che non funziona. Ho anche copiato e incollato i codici delle guide che hai incollato, ma non ne funziona nessuno, almeno su windows e sugli altri che ho provato. I dati sono visualizzati tutti insieme alla chiusura del php, come sempre.
--- Citazione ---Several servers, especially on Win32, will still buffer the output from your script until it terminates before transmitting the results to the browser.
--- Termina citazione ---
da http://php.net/manual/en/function.flush.php
e infatti dice "especially" e non "only" perchè infatti io l'ho provato anche su servers non windows, e da sempre lo stesso risultato. Ho anche provato questo codice:
--- Codice: ---<?php
function echo_flush($txt){
//inizializzazione del buffer per l'output
if (ob_get_level() == 0) ob_start();
echo $txt;
//per Chrome e Safari si deve aggiungere questa istruzione
print str_pad('',4096)."\n";
//invia il contenuto al buffer
ob_flush();
flush();
}
for ($i =0; $i <=10; $i++) {
echo_flush('ciao');
sleep(5);
}
?>
--- Termina codice ---
ma niente.
Navigazione
[0] Indice dei post
Vai alla versione completa