Neste exemplo eu tenho uma tabela com id, nome e msn dos usuários. O objetivo é efetuar o download de uma lista de todos os endereços MSN com base nos dados desta tabela. Esta lista possibilita a importação desses contatos no MSN Messenger.
Uma maneira muito interessante que encontrei de fazer isso foi efetuar o download diretamente do resultado do SELECT, onde o arquivo que é transmitido não existe no servidor. Isto é possível alterando o header e eu demonstrarei como fazer nos seguintes passos.
Para começar, crie a tabela que usaremos no exemplo:
mysql> create table usuarios(
-> usr_id smallint(10) primary key not null auto_increment,
-> usr_nome varchar(40),
-> usr_msn varchar(255)
-> );
Query OK, 0 rows affected (0.03 sec)
Depois insira alguns dados:
mysql> insert into usuarios values
-> (null,"Joao P. Neto","xxxxxx@hotmail.com"),
-> (null,"Billie Joe Armstrong","biliejoe@hotmail.com"),
-> (null,"Tre Cool","trecool@hotmail.com");
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
Pronto, agora já temos a tabela que irá prover a lista. Precisamos então criar o script que conecta, faz o SELECT e retorna os resultados para download em um arquivo no formato da importação do MSN.
Abra o seu editor de texto preferido e copie o código abaixo, salve na pasta raiz do seu servidor HTTP com o nome de export_msn.php.
OBS: Altere o que for preciso para que funcione no seu banco de dados.
<?php
//Conexão com o banco
$host = "localhost"; //host, na maioria das vezes não se altera
$user = "root"; //Usuário que conecta no banco
$pass = ""; //Senha de conexão, na maioria das vezes é nullo
$DB = "Teste"; //Essa é sua base de dados, tem que alterar! ;)
$conn = @mysql_connect($host',$user,$pass) or die('Erro Conectando');
$db = @mysql_select_db($DB,$conn) or die('Erro Selecionando Banco');
/*
Explicando basicamente, este header altera a forma do navegador receber os dados, conforme o PHP "imprime" os dados eles vão em formato stream.
filename=MSN_".date("d-m-Y").".ctt" diz qual será o nome do arquivo que o browser vai receber é "MSN_DATAATUAL.ctt"
*/
header('Content-Type: application/octet-stream');
header("Content-disposition: attachment; filename=MSN_".date("d-m-Y").".ctt");
header("Pragma: no-cache");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Expires: 0");
$sql = "select usr_msn from usuarios";
$res = mysql_query($sql);
echo "<?xml version=\"1.0\"?>
<messenger>
<service name=\".NET Messenger Service\">
<contactlist>\r\n";
while($dados = mysql_fetch_array($res)) {
echo ($dados['fun_msn'] != "")? " <contact>".$dados['usr_msn']."</contact>\r\n" : "";
}
echo " </contactlist>
</service>
</messenger>\r\n";
?>
Agora abra o browser e abra o seu script, o http://CAMINHO/expot_msn.php e se tudo correr bem ele vai iniciar o processo de download.
Eu acho que é só isso pessoal.
[]'s