Jump to content

Forçar download[Resolvido] - Outro problema no envio de mail


XsTeAl
 Share

Recommended Posts

Boas, preciso que ao clicar num link me force o download da imagem comecei a fazer mas ao invés de fazer o donwload da imagem, faz o download de um ficheiro em php com 0 bytes, tenho o seguinte código:

function forcar($nome, $galeria){
$local = './ckfinder/userfiles/galeria/'.$galeria.'/'.$nome; 
if(!file_exists($local)){
echo '<script type="text/javascript">alert("NAO EXISTE FICHEIRO");history.back();</script>';
}else{
	$ext = explode(".",$nome);
	if ($ext[1]=="php") {
		echo '<script type="text/javascript">alert("Arquivo não autorizado para download!");history.back();</script>';
	}else{
	header("Content-Transfer-Encoding: binary");
	header('Content-Description: File Transfer');
	header('Content-Length: '.filesize($local));
	header('Content-Disposition: attachment; filename="'.$nome.$ext[1].'"');
	header('Content-Transfer-Encoding: binary');
	header('Pragma: public');
	header("Content-Type:image/".$ext[1]."");
/*$fp = fopen($local, "r"); 
fpassthru($fp); 
fclose($fp);*/
	readfile($local);
	}
}
}



$buscarNome = $_GET["imagem"];
$buscarGaleria = $_GET["galeria"];

forcar($bucarNome, $galeria);

para passar os valores faço o seguinte

<a href="/imagem.php?imagem={NOME_IMAGEM}&galeria={GALERIA}">{DOWNLOAD}</a>

ele faz o download do ficheiro imagem.php. Já exprimentei com o readfile e com o fopen e é igual!

Link to comment
Share on other sites

ve se a resposta do image.php tens os headers que lhe deste, se não tiver o problema parece ser noutro sítio qualquer.

Tinha um erro numa variavel :S alterei o código, já me faz o download da imagem só que quando abro o visualizador de imagens não consegue abrir o ficheiro porque está danificado ou é demasiado grande!

código que tenho até agora!

ob_start();

function extensao($arquivo){
$extensao = array_reverse(explode(".",$arquivo));
//echo '<script type="text/javascript">alert("'.$extensao[0].'");</script>';
return $extensao[0];
}


function forcar($nome, $galeria){
$local = './ckfinder/userfiles/galeria/'.$galeria.'/'.$nome; 
if(!file_exists($local)){
echo '<script type="text/javascript">alert("Não existe a imagem pretendida.");history.back();</script>';
}else{
	$ext = extensao($nome);
	if ($ext=="php") {
		echo '<script type="text/javascript">alert("Ficheiro não autorizado para fazer download!");history.back();</script>';
	}else{
	switch($ext){
		case "jpg" : $mime = "image/jpg";
		break;
		case "gif" : $mime = "image/gif";
		break;
		case "png" : $mime = "image/png";
		break;
		case "jpeg" : $mime = "image/jpeg";
		break;
		default: $mime = "application/force-download";
	}
	// teste para saber extensao ficheiro echo '<script type="text/javascript">alert("'.$mime.'");</script>';
	header("Content-Transfer-Encoding: binary");
	header("Content-Description: File Transfer");
	header("Content-Length: ".filesize($local));
	header("Content-Disposition: attachment; filename=".$nome."");
	header("Content-Transfer-Encoding: binary");
	header("Pragma: public");
	header("Content-Type:".$mime."");
	readfile($local);
	exit();
	}
}
}


$buscarNome = $_GET["imagem"];
$buscarGaleria = $_GET["galeria"];

forcar($buscarNome, $buscarGaleria);
ob_end_flush();
Link to comment
Share on other sites

Já está a funcionar, eu tenho um formulário que envia um mail, utilizando jquery, o email é enviado e recebo, o problema é que não envia o campo de email, deixo aqui o codigo que tenho. o codigo ainda nao tem qualquer tipo de validação!

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript">
$(function(){

$("#enviar").click(function(){

$("#enviar").hide("slow");

beforeSend:$("#carregando").show("slow");

var nome = $("#nome").val();
var email = $("#email").val();
var pais = $("#pais").val();
var mensagem = $("#mensagem").val();

$.post("/envia.php", { nome:nome, email:email, pais:pais, mensagem:mensagem }, function(get_retorno) {

complete:$("#carregando").hide("slow");

$("#retorno").show("slow").text(get_retorno);
});
});
});
</script>
<form method="post" action="/envia.php">
<p>Nome:</p>
<input type="text" id="nome" name="nome" />
<p>E-mail:</p>
<input type="text" id="email" name="email" />
<p>País:</p>
<input type="text" id="pais" name="pais" />
<p>Mensagem:</p>
<textarea type="text" id="mensagem" name="mensagem"></textarea>
<p><input type="button" value="Enviar" id="enviar"/></p>
</form>
<div id="carregando" style="text-align:center; display:none;"><img src="/imagens/ajax-loader.gif" /></div>
<div id="retorno" style="border: 1px solid #3DBF0D; background: #91DE76; text-align: center; display:none; padding: 10px 10px 10px 10px;"><br /></div>
<a href="#" rel="modalclose">
Fechar
</a>

envia.php

$nome = $_POST['nome'];
$email = $_POST['email'];
$pais = $_POST['pais'];
$mensagem = $_POST['mensagem'];


$conteudo = "Nome: $nome <br>E-mail: $email <br>Mensagem: $mensagem";
$meuemail = "***@gmail.com";
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
$headers .= "From: $email \r\n";
$assunto = "Requisito de Fotos";

$enviar = mail($meuemail, $assunto, $conteudo, $headers);

if($enviar) {

echo "Mensagem Enviada com Sucesso!";
}else{
echo "Ocorreu algum erro ao enviar o formulário";
}

Link to comment
Share on other sites

Já consegui resolver o meu problema no envio de mail, era uma variável que estava a fazer conflito não sei porque :S Já alguém usou o Supersized 3.1.3 ? é um slideshow feito em jquery e eu queria preencher o array do próprio script com os dados obtidos por php, alguém sabe como fazer?

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.