• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

JoaoPCarvalho

Warning: session_start() [function.session-start]: Cannot send session cache lim

12 mensagens neste tópico

Boas,

Estou a programar em php, mas está a aparecer o seguinte erro:

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\xampp\htdocs\valida\trataLogin.php:1) in C:\xampp\htdocs\valida\trataLogin.php on line 3

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\valida\trataLogin.php:1) in C:\xampp\htdocs\valida\trataLogin.php on line 24

Codigo:

index.php

<?php
if (!isset($_SESSION)){
  session_start();
}
?>
<?php require('funcoes.php');?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
<table width="600" border="1" align="center">
  <tr>
     <td><img src="logo.gif" width="600" height="130" /></td>
  </tr>
  <tr>
    <td>
    
   
    
    <?php if(!isset($_SESSION['MM_Username'])){
	?>
    <form id="form1" name="form1" method="POST" action="trataLogin.php">
      Nome:

        <input name="nome" type="text" id="nome" size="8" />
    
    Password: 

      <input name="password" type="password" id="password" size="8" />
    
      <input type="submit" name="button" id="button" value="Login" />

    </form>
    <?php
    }
else
echo $_SESSION['MM_Username'];?>
    
    
    </td>
  </tr>
  <tr>
    <td height="89"> </td>
  </tr>
  <tr>
    <td> </td>
  </tr>
</table>
</body>
</html>

trataLogin.php

<?php
if (!isset($_SESSION)){
  session_start();
}
?>
<?php require_once('Connections/web.php'); ?>
<?php require_once('funcoes.php');?>
<?php 
$nome = GetSQLValueString($_POST['nome'],"text","","");
$password = GetSQLValueString($_POST['password'],"text","","");
$query = "SELECT login FROM user WHERE login = $nome AND password = md5($password)";
mysql_select_db ($database_web);
$resultado = mysql_query ($query);
if(mysql_num_rows ($resultado) == 1)
{
$_SESSION['MM_Username']=$nome;
}
else
{

}
?>
<?php
header("location:.../valida");
?>

Estes ficheiros no Windows XP não dão o referido erro, mas no vista e no Windows 7 dão.

Alguém me pode ajudar.

Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Dreamweaver não é grande ferramenta, deve estar-te a por algum caracter (espaço ou assim) que faz com que o mesmo seja escrito e acabe com a função. session_start deve ser a primeira função a ser chamada.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas a função session_start(), está sempre no início.

Espaços não existem, tive esse cuidado.

O que eu estou a achar estranho é que este problema aparece apenas com o vista e com o windows 7. Com o XP já não mostra nenhum warning.

Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Cria um novo documento. Escreve lá:

<?php
if (!isset($_SESSION)){
  session_start();
}

E depois o resto do código. Sei que pode parecer estúpido, mas a mim já me aconteceu esse erro a passar de WAMP para XAMPP, e foi assim que resolvi o problema. :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

continua sem dar nada.

Como elimino o aviso deste tipo de erros no dreamweaver? uma vez que deve estar tudo bem, pois funciona bem no xp.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Verifica se não estás a guardar os ficheiros com a BOM (Byte Order Mark), isso pode gerar esse erro.

Se estiveres a usar o Dreamweaver, procura algures nas preferências, na secção respectiva á gravação de ficheiros (não te sei precisar exactamente onde, já não uso o Dreamweaver há algum tempo), a opção respectiva e desactiva-a.

Depois, tens de criar um novo ficheiro, copiar/colar o conteúdo do original, guardar por cima do original, e está feito. Este último passo poderá ser desnecessário em versões mais recentes do Dreamweaver, experimenta.

Se estiveres a usar outro programa, procura nas preferências por algo similar.

Existem também programas que removem automaticamente a BOM quando guardam um ficheiro, daí ser possível abrires o ficheiro noutro programa, voltares a guardar o ficheiro (mesmo sem nenhuma alteração real), e ele já funcionar.

Também é possível que a cópia entre computadores/sistemas operativos remova automaticamente a BOM (no entanto não confirmo essa hipótese, nunca experimentei), pode ser a causa de funcionar bem noutro computador/sistema operativo.

Nota "histórica": a BOM é constituída por 2 bytes logo no início de um ficheiro de texto guardado em UTF-8 (é opcional), e permite identificar, com o nome indica, a ordem dos bytes que compõem os caracteres. É invisível em editores de texto (excepto talvez em editores/sistemas operativos que não suportem UTF-8 e/ou a BOM), daí surgirem estes erros no PHP, que identifica os bytes e envia-os para o browser, como faria com quaisquer outros caracteres.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não tem a ver com o servidor, tem a ver com a forma como deves de estar a guardar o ficheiro e/ou se estás a incluir esse ficheiro noutro onde já tenha sido laçado algum output.

como diz o jreis, e a meu ver bem, o problema deve-se ao estares a gravar o teu ficheiro como sendo UTF8, guardando a BOM Signature, que conta como sendo um caracteres no inicio do ficheiro.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já fiz essa alteração, o index.ph tinha o BOM desactivado, mas tanto o ficheiro funcoes.php como o ficheiro trataLogin.php tinham o BOM activado.

Agora o warning que aparece é o seguinte:

"Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\valida\funcoes.php:1) in C:\xampp\htdocs\valida\trataLogin.php on line 24"

Deixou de dar o erro na função session_start() para dar este.

a linha 24 conté o seguinte código:

22  ?>

23  <?php

24  header("location:.../valida");

25  ?>

Não vejo nada de mais neste código, está tudo bem

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A execução do script não para quando envias um header, mesmo que seja de redireccionamento. Como está mencionado no manual do PHP (salvo erro), algo deste género deverá funcionar:

//...
header('Location: http://www.example.com');
exit;
//...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

@jreis, mas o erro que ele reportou deve-se ao facto de ele já ter feito algum output antes. :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boa noite,

Já está solucionado. O problema era do BOM

Voltei a criar novos PHP e o problema já não se verifica.

Por mim tópico encerrado

Obrigado pela ajuda

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora