Hola!
Estoy haciendo un cron en el cual tengo que utilizar sesiones para comprobar que no se este ejecutando ya (se tiene que ejecutar cada dos segundos y no se pueden superponer), y he visto que no funcionab, así que me he creado un pequeño archivo para comprobar que funcionasen las sesiones y no funcionan...
Este es el codigo que he creado de prueba (no os extrañéis por lo de doquery, es una funcion para simplificar las querys...):
session_start();
if($_SESSION['funcionando']== true)
{
doquery("UPDATE {{table}} SET authlevel = authlevel + 1 WHERE id = '2'","users");
echo "bien!!!";
}
if(!isset($_SESSION['funcionando']))
{
$_SESSION['funcionando'] = true;
}
?>
Lo utilizo en un cron con el siguiente comando:
/usr/local/bin/php5 -q /home/xxxxxx/www/actualizador_continuo.php
Y me da el error de headers...
Warning</b>: session_start() [<a href='function.session-start'>function.session-start</a>]: Cannot send session cookie - headers already sent in <b>/home/xxxxxx/www/actualizador_continuo.php</b> on line <b>17
Como puedo hacer para que si me permita usar sesiones desde un cron??
Gracias por la ayuda
tu error está donde te lo marca:
Cita de: XafiloX en 11 Marzo 2009, 17:25 PM
Warning</b>: session_start() [<a href='function.session-start'>function.session-start</a>]: Cannot send session cookie - [b]headers already sent in <b>/home/xxxxxx/www/actualizador_continuo.php</b> on line <b>17[/b]
como verás te dice que en la línea 17 estás imprimiendo texto con un echo o print, o cualquier otra variante... no puedes modificar la cabecera si "colocaste" algún dato a la vista del cliente...
S2
Tu problema es que no has puesto el código completo que has hecho.
La función session_start siempre siempre siempre siempre ha de ir al principio del archivo php, antes que cualquier otra cosa, si dicho archivo contiene sentencias html éstas deben ir después del session_start(). Antes de session_start() no pongas nunca ni siquiera un salto de línea porque dará error al haber envíado las cabeceras, por lo tanto haz así:
<?php
session_start();
?>
<!-- AQUI TODO EL HTML!! -->
<html>
<head><title>titulo</tytle>
<style type="text/css">
</style>
<body>
<?php
//AQUÍ IRIA EL RESTO DE TU CÓDIGO
if($_SESSION['funcionando']== true)
{
doquery("UPDATE {{table}} SET authlevel = authlevel + 1 WHERE id = '2'","users");
echo "bien!!!";
}
if(!isset($_SESSION['funcionando']))
{
$_SESSION['funcionando'] = true;
}
?>
</body>
</html>
Spider-Net, ese era todo el codigo que habia... (ademas de un par de includes)...He probado tu codigo tal cual en un cron y nada, no funciona...el mismo error de antes...
Los includes no estarán por casualidad antes del session_start() no??? :¬¬ :¬¬
No, no...y ademas ejecutandolo desde el navegador si funcionaba... :-\
Pues me parece entonces que el cron no te va a permitir sesiones...
dependiendo de ciertas configuraciones de PHP, sentencias del tipo:
$_SESSION['funcionando'] = true;
tampoco son permitidas una vez que se puso algo a la vista del usuario, me pasó con varios servidores que tuve que mover todo el manejo de sesiones antes de realizar una salida... prueba y dinos que pasa...
S2
No, no, si si que es valido, ya que funciona llamandolo desde el navegador