Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde pessoal.
Estou com um sistema de download de arquivos. Ele gerencia para que seja efetuado um download por vez. Só que estou com dois problemas:
1- Arquivos grandes não faz download (um video em wmv de quase 3 mega baixa, outro de quase 40 mega não);
2- Não está bloquando o download.
Veja o código para verem o que pode ser:
<?php
require_once 'php/mysql_connect.php';
set_time_limit(0);
// Caminho do arquivo que está sendo requisitado
$caminho = mysql_real_escape_string($_SERVER['REQUEST_URI']);
// IP do indivíduo que está requisitando o arquivo
$ip = mysql_real_escape_string($_SERVER['REMOTE_ADDR']);
// Está baixando?
$baixando = false;
// Seleciona o último acesso em formato UNIX, equivalente ao mktime()
$sql = "SELECT UNIX_TIMESTAMP(ultimoacesso) AS ultimavez FROM baixando WHERE arquivo = '$caminho' AND ip = '$ip' ORDER BY ultimoacesso DESC LIMIT 1";
$rs = mysql_query($sql);
if (mysql_num_rows($rs)) {
$ultimaVez = mysql_result($rs, 0, 'ultimoacesso') + 300;
if ($ultimaVez < time()) {
mysql_query("REPLACE baixando SET caminho = '$caminho', ip = '$ip', ultimoacesso = NOW()");
$baixando = true;
} $sql = "REPLACE baixando SET caminho = '$caminho', ip = '$ip', ultimoacesso = NOW()";
mysql_query($sql);
$baixando = true;
}
if ($baixando) {
$id_arquivo = base64_decode($_GET['id_arquivo']);
$sql = "SELECT * FROM arquivos WHERE id=" . $id_arquivo;
$qr = mysql_query($sql);
$rs = mysql_fetch_object($qr);
$diretorio = "deposit/uploads/" . $rs->id_usuario . "/";
$path = $rs->arquivo;
$caminhoCompleto = $_SERVER['DOCUMENT_ROOT'] . $diretorio . $path;
if ($fp = fopen($caminhoCompleto, 'r')) {
$data = date("Y-m-d H:i:s");
$inserir = "INSERT INTO baixando VALUES (NULL, '$path', '$ip', '$data')";
mysql_query($inserir);
header('Pragma: public');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s', filemtime($caminhoCompleto)) . ' GMT');
header('Cache-Control: private', false);
header('Content-Type: application/force-download');
header('Content-Disposition: attachment; filename="' . basename($caminhoCompleto) . '"');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($caminhoCompleto));
header('Connection: close');
readfile($caminhoCompleto);
exit;
} header('HTTP/1.0 503 Service Unavailable');
print '<h1>503 Service Unavailable</h1><p>Você só pode fazer outro download em 5 minutos</p>';
exit;
}
?>
Conferi no banco de dados, os dados estão gravados corretamente na tabela baixando.
Obrigado pela atenção.
Carregando comentários...