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 criando uma funcionalidade de segurança em PHP que verifica se o usuário do nosso portal está em sessão. Se ele estiver, verifica se ele tem acesso ao produto que o arquivo é vinculado. Até ai tudo bem! O grande lance é que eu consigo forçar o download de todos os arquivos, menos dos instaladores, que são os itens que necessitam de mais segurança.
Tente e pesquisei de tudo, espero que possam me ajudar, nessa primeira vez no fórum. :)
Abaixo segue o código total da função:
function startDownload()
{
$pfdir = $_GET['path'];
$pdir = dirname($pfdir);
$pfile = basename($pfdir);
$dir = dirname($_SERVER['SCRIPT_FILENAME'])."/";
$dir .= $pdir."/";
$file = $dir.$pfile;
$jfile = basename($file);
$rs = self::verifyFile($jfile);
if($rs){
if(self::verProduto($rs['id'])){
if(is_file($file)){
header('Content-Description: File Transfer');
header('Content-Disposition: attachment; filename="'.$jfile.'"');
header('Content-Type: application/octet-stream');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($file));
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Expires: 0');
ob_clean();
flush();
readfile($file);
exit;
}else{
// Arquivo não existe na pasta Downloads
echo "<h3>Erro 10: Não foi possível encontrar o arquivo.</h3>";
}
}else{
// Não existe o curso vinculado ao arquivo no contrato do usuário
echo "Erro 12: Arquivo não encontrado na sua lista de Downloads.";
}
}else{
// Arquivo não existe no banco de dados
echo "<h3>Erro 11: Não foi possível encontrar o arquivo.</h3>";
}
}>
Por que não consegue? Qual é o problema exatamente? Dá erro? qual?
Habilite todas as exibições de erro como mostrado neste tópico. Também remova os header()'s, para fim de testes, para que as mensagens de erro sejam exibidas, caso haja alguma
Beraldo, obrigado pela resposta.
Me desculpe, não informei o principal: o erro.
Eu tentei mas não aparece nenhuma mensagem na tela, usando ini_set( 'display_errors', true ); e error_reporting( E_ALL );.
O erro é o
Esta página da web não está disponível
ERR_INVALID_RESPONSE
que o Chrome apresenta.
Eu estava fazendo uns testes aqui e gerou o arquivo, só que uma mensagem de erro:
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 253040641 bytes) in /var/www/vhosts/##meusite##/portal/app/control/Download.class.php on line 567
A solução foi dar um ini_set('memory_limit', '2048M'); devido ao fato de os arquivos de instaladores serem maiores que 1gb e não chegarem a 2 gb. Defini para 2 gb de limite.
mas parece que está dando internal server error, eu consegui baixar um arquivo apenas.
Ainda sem solução...
Por que não consegue? Qual é o problema exatamente? Dá erro? qual?
Habilite todas as exibições de erro como mostrado neste tópico. Também remova os header()'s, para fim de testes, para que as mensagens de erro sejam exibidas, caso haja alguma