Pregunta PHP/Javascript

Tengo una pequeña página estática muy básica en un servidor casero, para facilitarme el acceso a interfaces web para torrent, jdownloader, daapd, etc. Con la intención de tocar algo de programación web (que no tengo ni idea [+risas] ) intenté mostrar en la web el uptime del servidor y la temperatura del procesador, y mediante PHP y exec pude hacerlo. Ahora bien, mi idea es que dichos datos se actualizasen automáticamente sin necesidad de recargar la página. Para el uptime, encontré un script en javascript que modificándolo un poco me da bien el apaño. Aunque lo que hace es leer el uptime inicial y llamar a una función que lo muestra, le suma un segundo y se llama a sí misma con un delay de 1 segundo.

El problema es que he intentado usar un método parecido para actualizar las temperaturas, pero en este caso no se actualiza. Lo que hago es una función en javascript que hace el exec (código php) para obtener el valor de la temperatura con:
<?php $ptemp = `sensors | grep 'temp1' | awk '{print $2}'`;?>;


Ahora asigno el valor de esa variable php a una javascript:
var tempString=<?php echo $ptemp; ?>;


Y reemplazo la temperatura anterior con la nueva:
var span_el2 = document.getElementById("proctemp");
var replaceWith2 = document.createTextNode(tempString);
span_el2.replaceChild(replaceWith2, span_el2.childNodes[0]);


Por último, llamo de nuevo a la función:
setTimeout("doUptime()",1000);


La temperatura se muestra correctamente, pero no se actualiza. A ver si me podéis echar un cable.

La función entera (que actualiza uptime y temperaturas), es ésta:
<script language="javascript">
<!--
var upSeconds=<?php echo $uptimeSecs; ?>;
function doUptime() {
<?php $ptemp = `sensors | grep 'temp1' | awk '{print $2}'`;?>;
  var tempString=<?php echo $ptemp; ?>;
  var uptimeString = "";
  var secs = parseInt(upSeconds % 60);
  var mins = parseInt(upSeconds / 60 % 60);
  var hours = parseInt(upSeconds / 3600 % 24);
  var days = parseInt(upSeconds / 86400);
  if (days > 0) {
    uptimeString += days;
    uptimeString += ((days == 1) ? " día" : " días");
  }
  if (hours > 0) {
    uptimeString += ((days > 0) ? ", " : "") + hours;
    uptimeString += ((hours == 1) ? " hora" : " horas");
  }
  if (mins > 0) {
    uptimeString += ((days > 0 || hours > 0) ? ", " : "") + mins;
    uptimeString += ((mins == 1) ? " minuto" : " minutos");
  }
  if (secs > 0) {
    uptimeString += ((days > 0 || hours > 0 || mins > 0) ? ", " : "") + secs;
    uptimeString += ((secs == 1) ? " segundo" : " segundos");
  }
 
 
 
  var span_el = document.getElementById("uptime");
  var replaceWith = document.createTextNode(uptimeString);
  span_el.replaceChild(replaceWith, span_el.childNodes[0]);
 
  var span_el2 = document.getElementById("proctemp");
  var replaceWith2 = document.createTextNode(tempString);
  span_el2.replaceChild(replaceWith2, span_el2.childNodes[0]);
 
  upSeconds++;
  setTimeout("doUptime()",1000);
}
// -->
</script>
No he mirado el código, pero para hacer que se actualice algo sin necesidad de recargar la página, tienes que usar Ajax, con esto creo que encontraras mas información que te pueda ser util
Pues sí, con Ajax.

Hazte una página que sea temp.php y que solo contenga:
<?php $ptemp = `sensors | grep 'temp1' | awk '{print $2}'`;?>;


Después, con javascript haces una llamada Ajax. Por ejemplo, usando jquery sería algo así:
setInterval(function() {
$('#temperatura').load('temp.php');
}, 15000);


Eso hará que cada 15 segundos cargue el contenido de temp.php en la capa con el id="temperatura".



[/code]
Gracias a los dos, era lo que sospechaba, pero quería saber si existía alguna alternativa en Javascript. Me miraré algún tutorial para principiantes y el código de elchicosinhada a ver si lo consigo hacer funcionar.
3 respuestas