Enviar código de uma página para outra - PHP - Fórum iMasters
By Alvaro_php, August 28, 2019 in PHP
Alvaro_php 0
Pessoal olhando tudo direitinho, vi que tinha erro de digitação e agora esta dando para criar o arquivo perfeitamente e esta sendo identificado na segunda página
Porém ele não esta fazendo o que preciso, pois quando se joga o caminho inteiro da página até o emitir_titulo1php, o arquivo seguranca.txt não esta criado pois pulou a parte do captcha, e ai o que tinha em mente era ele tentar abrir o arquivo( QUE NÂO EXISTE ) e com isso a variável $conteudo estar em branco e isso é diferente do confirmado, ele teria que apagar o arquivo e abrir no lugar a página verificao.php automaticamente, só que ele esta carregando a página emitir_titulo1.php normalmente
Esse é o comando que esta na emitir_titulo1.php
$fp=fopen($arquivo,"r");
$conteudo=fread($fp,filesize($arquivo));
if ($conteudo == "confirmado")
Alguém poderia me dar uma força, eu coloquei o endereço completo da minha página e pulando o meu captcha, e ai o que era para fazer, a página reconhecer que não tinha o arquivo de comparação e carregar a página de verificação
Só que apareceram as mensagens de erro abaixo e a página do emitir_titulo1.php carregou normalmente, ele ignorou o que esta no header
Na tentativa de carregar a página, eu coloquei toda a verificação no topo da página e ai apareceram essas mensagens
Warning: fopen(seguranca.txt) [function.fopen]: failed to open stream: No such file or directory in caminhodaminhapaginanoservidor\emitir_titulo1.php on line 3
Warning: filesize() [function.filesize]: stat failed for seguranca.txt in caminhodaminhapaginanoservidor\emitir_titulo1.php on line 4
Warning: fread(): supplied argument is not a valid stream resource in caminhodaminhapaginanoservidor\emitir_titulo1.php on line 4
Warning: fclose(): supplied argument is not a valid stream resource in caminhodaminhapaginanoservidor\emitir_titulo1.php on line 5
não confirmado <- essa é uma verificação que coloquei, para saber se ele estava identificando que não existia nada, e identificou normalmente
Warning: unlink(seguranca.txt) [function.unlink]: No such file or directory in caminhodaminhapaginanoservidor\emitir_titulo1.php on line 13
Warning: Cannot modify header information - headers already sent by (output started at caminhodaminhapaginanoservidor\emitir_titulo1.php:3) in caminhodaminhapaginanoservidor\emitir_titulo1.php on line 14
@Alvaro_php você pode fazer de forma muito mais simples.
Recomendo você usar variáveis de Sessão, pois evita problemas em ficar gerando arquivos, lendo e apagando.
E caso exista um acesso simultâneo pode ser que de problema já que o arquivo vai existir para uma pessoa e para a outra que pode tentar burlar também vai existir o arquivo.
Você tem essa validação:
Acredito que esse seja o seu "redirecionador", certo?
Se a pessoa digitar o CAPTCHA que você recebe via POST, juntamente com o CAPTCHA gerado e armazenado no SESSION forem iguais, quer dizer que a pessoa digitou o CAPTCHA corretamente e você vai redirecionar para a página emitir_titulo1.php, certo?
Então, caso a pessoa digite e é o código correto, você pode criar uma outra variável de SESSÃO e armazenas um valor qualquer, tipo $_SESSION['checkCaptch'] = "TRUE"; ficando com o código abaixo:
$_SESSION['checkCaptcha'] = "TRUE";
Então dentro da página EMITIR_TITULO1.PHP você verifica essa variável.
IF ($_SESSION['checkCaptcha'] == "TRUE") {
$_SESSION['checkCaptcha'] = "";
Como o usuário não consegue ver no navegador o conteudo de uma variável de Sessão, o código fica "seguro" sem a chance de um manuseio direto.
Desta forma você não precisa ficar gerando arquivo, lendo, verificando conteudo, validando e tudo mais.
Agradeço o retorno e a idéia, e assim realmente é mais fácil
Existe uma página verificacao.php que é onde se digita o código que é gerado,e ao apertar o botão envia vai para o captcha.php que faz a verificação que mencionou
Então coloquei os comandos exatamente como você sugeriu, alias dei um ctrl+c e ctrl+v , só que antes lógico entendi o que você quiz dizer, e sei que se alguém descobrir o caminho direto para a página e tentar colocar, a session estará em branco e ai irá força a abertura da página de verificação.
Fazendo o teste aqui, entrei na página de verificação e digitei corretamente o código, porém quando dei o enter apareceu a seguinte mensagem ou mesmo colocando o endereço direto da página emitir_titulo1.php
Warning: Cannot modify header information - headers already sent by (output started at caminhodomeuservidor\emitir_titulo1.php:2) in caminhodomeuservidor\emitir_titulo1.php on line 6
Que é o comando que esta no topo da página do emitir_titulo1.php
Achei que fosse algum problema porque não iniciei a session no emitir_titulo1, porém coloquei e deu uma mensagem de erro que não poderia abrir novamente uma session, deu a mensagem
: Cannot send session cache limiter
Será que você pode me dar mais essa força?
@Alvaro_php
Cara, parabéns, de verdade, você faz parte de um grupo de pessoas que não só faz um CONTROL+C e CONTROL+V e espera que funcione, realmente você entendeu a lógica, infelizmente existem erros que acontecem devido a falta do código completo, mas esse erro não está tão difícil de se identificar.
Na verdade eu já tive uns problemas deste tipo e consegui resolver tranquilamente, vou tentar explicar e você tenta resolver e se não conseguir chama aqui de novo.
Então o erro apontado como você colou é esse:
Esse erro não está onde você comentou "Que é o comando que esta no topo da página do emitir_titulo1.php", o erro está exatamente no comando HEADER como a mensagem de erro apresenta HEADER ALREADY SENT BY, e a linha 6 da página EMITIR_TITULO1.PHP deve bater com a linha em questão, veja o código abaixo:
header("location: emitir_titulo1.php"); <-- ESTA É A LINHA 6 DO CÓDIGO.
No meu caso esse Warning foi apresentado porque eu tinha vários HEADER na minha página e apenas 1 deles tinha o código EXIT(); após o HEADER, o que isso faz? Simples, o HEADER é um cabeçalho de redirecionamento e se ele não é seguido do comando EXIT(); ele continua a processar todo o conteudo da página e se por ventura ele encontrar outro HEADER no meio do caminho ou outro comando que emita uma "SYSOUT" saida de informação para a tela ele pode gerar esse erro.
Entra nesse LINK que da uns detalhes e uma breve explicação, talvéz você entenda o problema.
O que você vai precisar ver ai no seu código a inicio é se existe algum outro HEADER e quando eu falo no seu código, eu digo na página completa que você está montando, se você está em VERIFICA.PHP e dentro desse VERIFICA.PHP você tem UM ou VÁRIOS INCLUDES de outros arquivos PHP você vai ter que olhar dentro de todos os arquivos INCLUDES e também no CHAMADOR que neste exemplo acima é o VERIFICA.PHP.
Só para que você entenda, no meu caso eu simplesmente coloquei EXIT(); logo após TODOS OS HEADER que estavam na minha "página", na página apresentada e dentro de todos os arquivos Incluidos para compor a minha página.
Veja ai se você não tem algo parecido, se você tiver o código que eu coloquei abaixo em um arquivo separado, experimente abrir ele sozinho direto no seu navegador e veja se ele apresenta o mesmo erro de HEADER ALREADY SENT BY acredito que se você rodar apenas esse código no seu navegador, o erro não deve ser apresentado, mostrando que existe sim algo no seu código que gere esse problema que é gerar saida para a tela antes do HEADER.