Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal, estou fazendo um projeto de geração de certificados e uma parte dele é baixar projetos vindo do banco de dados.
tenho uma pasta chamada "arquivossubmetidos" é onde os projetos são armazenados.
Cada projeto é avaliado por 3 avaliadores, onde estes são nomeados pelo coordenador.
A minha dúvida é, eu quero compactar e fazer o download apenas dos projetos designados para aquele avaliador. Estou utilizando este código:
$usuario = $_REQUEST["id"];
$sql = ("SELECT * FROM trabalhos WHERE tra_ava1 = '$usuario' OR tra_ava2 = '$usuario' OR tra_ava3 = '$usuario'");
$resultado = mysqli_query($link, $sql);
$linhas = mysqli_num_rows($resultado);
$contador = 0;
$projetos = array();
while($registros = mysqli_fetch_row($resultado))
{
$id = htmlspecialchars($registros[0]);
$arquivo = htmlspecialchars($registros[15]);
$projetos[$contador] = $arquivo;
$contador++;
}
$zip = new ZipArchive();
$contador = 0;
if($zip->open('../arquivossubmetidos/projetos.rar', ZipArchive::CREATE) === true)
{
while($contador < $linhas)
{
$zip->addFile($projetos[$contador]);
$contador++;
}
$zip->close();
}
header('Content-Type: application/zip');
header('Content-Disposition: attachment; filename="projetos.rar"');
readfile('../arquivossubmetidos/projetos.rar');
//unlink("../arquivossubmetidos/projetos.zip");
Ele não está criando o arquivo na pasta arquivossubmetidos e faz o download de um arquivo rar sem nada. Como eu faço pra solucionar isso ? Desde já, obrigado.Então, eu estou utilizando um outro código, que funciona perfeitamente, porém... ele zipa e baixa TODOS os arquivos da pasta, e neste caso do avaliador, é meio inapropriado, já que seria viável apenas ele obter os projetos que foram designados.
O código que estou usando e dá certo, é este daqui:
$directory = '../arquivossubmetidos/'; //diretorio para compactar
$filenames = array();
function browse($dir)
{
global $filenames;
if($handle = opendir($dir))
{
while (false !== ($file = readdir($handle)))
{
if ($file != "." && $file != ".." && is_file($dir.'/'.$file))
{
$filenames[] = $dir.'/'.$file;
}
else if($file != "." && $file != ".." && is_dir($dir.'/'.$file))
{
browse($dir.'/'.$file);
}
}
closedir($handle);
}
return $filenames;
}
browse($directory);
// cria zip, adiciona arquivos...
$zip = new ZipArchive();
if($zip->open('../arquivossubmetidos/projetos.zip', ZIPARCHIVE::CREATE)!==TRUE)
{
exit("Não pode abrir: <$zipfile>\n");
}
foreach($filenames as $filename) $file = $filename;
$arquivo = substr($file, -3);
if($arquivo =="pdf")
{
$zip->addFile($filename,$filename);
}
}
$zip->close();
header('Content-Type: application/zip');
header('Content-Disposition: attachment; filename="projetos.zip"');
readfile('../arquivossubmetidos/projetos.zip');
unlink("../arquivossubmetidos/projetos.zip");
Como eu poderia fazer para adaptar esse código ao mysql ? Já tentei de várias formas, mas não consigo selecionar somente aquele projeto designado, senão pegar tudo, não pega nada.Ola,
Já tentou
mysqldump ?
Boa tarde, desconheço tal função. Como eu poderia utilizar no meu código acima ?
Criei o codigo abaixo para adicionar arquivos no zip e salva-lo numa pasta:
$pasta = '/tmp/' . $temp_dir . '/';
if (is_dir($pasta)) {
$diretorio = dir($pasta);
$zip = new ZipArchive();
if ($zip->open("/tmp/arquivos.zip", ZipArchive::CREATE) === true) {
while (($arquivo = $diretorio->read()) !== false) {
if ($arquivo == '.' || $arquivo == '..') {
continue;
}
$zip->addFile($pasta . $arquivo, $arquivo);
}
$diretorio->close();
$zip->close();
}
header('Content-type: application/zip');
header('Content-disposition: attachment; filename="arquivos.zip"');
readfile("/tmp/arquivos.zip");
unlink("/tmp/arquivos.zip");
`rm -rf $pasta`;
}Vinicius e ConteudoAnimal, obrigado aos dois pela ajuda, mas agora eu consegui descobrir o problema. Depois de muito penar e debugar o código centenas de vezes, percebi que o problema, estava no diretório. Eu estava tentando buscar o conteúdo passando no diretório 1 nível acima, mas no banco de dados, está com 2 níveis, fico até envergonhado, por ter perdido dias nisso, obrigado mesmo.
Meus palpites são: