Como posso mostrar o resultado de uma solicitação POST como uma imagem?
Pergunta
Eu estou trabalhando em uma aplicação web em que as imagens criadas dinamicamente são usados ??para exibir informações. Esses dados são enviados para as imagens usando um GET consulta cordas, mas com imagens mais complexas e dados Estou preocupado sobre a execução de problemas com o limite de caracteres de URL.
Eu poderia simplesmente passar o ID do registro para a imagem e ter esta consulta o banco de dados, mas isso, obviamente, aumentar a demanda no servidor. Existe alguma maneira que eu poderia adicionar uma imagem recuperada usando POST em um documento HTML?
Solução
No final, eu acho que quering o banco de dados provavelmente será mais rápido. Para obter um pequeno string (dizem que até 2000 caracteres) do banco de dados é muito rápido e provavelmente mais rápido do que ter o posto utilizador isso o tempo todo, especialmente se houver mais de 1 em uma página.
A melhor opção seria criar a imagem de uma vez de cache-lo se ele não muda. Quando a imagem é solicitada novamente, verificar para ver se ele está em cache e usar apenas readfile () para enviá-lo para o navegador. Eu gosto de armazenar a imagem em cache fora da raiz doc por isso não é acessível por outros, mas isso pode não ser um fator em que você está fazendo (ambos caching e privacidade).
A sessão pode ser uma opção, mas esta é a melhor opção quando você precisa para regenerar a imagem em várias páginas com ligeiras alterações, de modo que você não tem consulta o banco de dados de cada vez.
Outras dicas
Não é facilmente -. HTML não inclui qualquer suporte intrínseco para enviar vários pedidos POST e tornando os resultados como recursos embutidos, como faz com e outras tags que definem um atributo SRC
soluções Mesmo AJAX não pode ajudá-lo aqui. Alterando o atributo SRC de uma imagem é fácil, mas tudo o que vai fazer é causar o navegador para obter a nova imagem (a partir do cache ou do servidor, dependendo da configuração). Na verdade alterando o conteúdo da imagem para uma resposta binária de um HTTP POST está muito mais envolvido - embora você pode olhar para base64-codificar o fluxo de resposta e usando os dados: esquema de URL para exibir a imagem resultante em sua página.
Você sempre pode ter um formulário com "Clique na imagem vista" como o botão enviar, é claro - você enviar o formulário, as responde de servidor com dados de imagem / jpeg, e navegador exibe sua TI como uma imagem independente. Tenho certeza de que você não pode fazê-lo em linha, no entanto.
Uma opção poderia ser a de armazenar esses dados em uma variável de sessão. Você deve fazer alguns testes para ver o caminho que o seu servidor (s) lidar com isso melhor
Para expandir o comentário de Darryl Hein:
Com isso, eu recomendo removê-lo a partir da sessão depois que você é feito com ele. Se ele está lá o tempo todo, PHP irá carregá-lo em cada chamada página, e não apenas a imagem "página". - Darryl Hein
Sim, eu pensei sobre isso e concordo, você não quer entupir os tubos com os dados da sessão desnecessários mas que se você não sabe quando para remover os dados? Você não pode simplesmente apagar os dados da sessão depois que a imagem é criada, e se a imagem está a ser exibido duas vezes? A menos que as próprias imagens são armazenadas em cache para um determinado período de tempo.
Algo como isto
página Solicitando
<? //index.php
$_SESSION['imagedata']['header'] = array('name'=>'Simon','backgroundcolor'=>'red');
echo '<img src="image.php?image=header">';
// more stuff
echo '<img src="image.php?image=header">'; // same image
?>
roteiro Imagem
<? //image.php
switch($_GET['image']){
case 'header':
if(isSet($_SESSION['imagedata']['header'])){
// create image using $_SESSION['imagedata']['header'] data
// create cached image
unset($_SESSION['imagedata']['header']);
else if(cache_file_exists()){
// display cached file
}else{
// no data, use plan B
}
break;
}
?>
Se a imagem pode ser identificado por um ID de apenas usar isso. Assumindo que o mesmo id deve produzir a mesma imagem cada vez apenas usar algum proxy para servir as imagens usando o suporte de armazenamento em cache HTTP padrão.
Em alguns cenários e sob algumas limitações que você poderia usar um Iframe onde você quer que sua imagem para apear e pós com um atributo de destino apontando para que iframe.
para que a página principal tem um iframe. a página principal tem uma forma que as mensagens as do quadro I e o servidor retorna uma imagem que é exibida no iframe.