[php] header scaricano html
Salve,
sono nuovo di qua anche se non sono nuovo del php.
Mi sono trovato di fronte ad un problema che da solo non riesco a risolvere quindi speravo che qualche anima pia potesse scovare l'errore.
Ho già cercato su internet, di tutto e di più ma qualsiasi tentativo è fallito.
Allora, premetto che comunque me la cavicchio con Php, MySql e questo genere insomma. Ho creato un sito con registrazioni e delle gallery a cui si può accedere al download soltanto registrandosi. Il sito è quasi pronto ma mi sono ritrovato di fronte un ultimo terribile problema. Il download deve essere fatto attraverso gli headers (quindi attraverso php) che però non si degnano di funzionare. Vi spiego quali sono stati i miei tentativi in modo che magari capiate meglio e sappiate risolvere più velocemente.
Mi sono dato una guardata a varie guide su questi headers utili allo scopo di scaricare un file che teoricamente il file .htaccess bloccherebbe via html o attraverso il cosiddetto hotlink. Quindi ho provato creando una pagina che tramite un get (con i dovuti controlli del caso e controllando se chi entra è registrato) mi fornisce il nome del file da scaricare. In seguito passa tutto (link e nome del file) agli header che teoricamente dovrebbero permettere di scaricare il file in questione. Dopo vari tentativi sono riuscito a fargli scaricare un rar (sempre rar sarà, solo questo tipo di file devo mettere in download) di 144byte che dopo molto tempo mi sono accorto essere un file con estensione .rar della pagina di download. In pratica:
<html>
bla bla..
<p>il file sta per essere scaricato</p>
bla bla
</html>
Mi scarica cioè un finto file rar che in realtà aprendolo con un editor di testo si tratta della semplice pagina di download (solo la sua parte html). Ovviamente i link per il rar sono corretti, ho fatto vari controlli al riguardo.
Vi posto l'essenziale del codice che ho usato per il download:
Codice PHP:
<?php
$dir = "directory da cui deve attingere e che sarebbe
protetta teoricamente tramite .htaccess /download/";
/**
Per assicurarmi che il problema non fosse dovuto al link,
ho provato sia con http://www.xp... eccetera.
Sia con un link relativo del tipo ../download/... ma in
entrambi i casi non ha funzionato restituendomi o un file:
"http-__xpixe.... " (chiamato proprio così) oppure un file
che sembrava buono ma in realtà era un file di testo.
**/
$file = $dir . $_GET['id'];
if(!file)
{
die("Il file non esiste!");
}else{
header("Cache-Control: ");
header("Pragma: ");
/**
Ho letto che conviene metterli anche se vuoti questi 2 headers
per evitare errori di IE.
Naturalmente ho provato anche senza e anche mettendoci dentro del codice.
**/
header("Content-Description: File Transfer");
header("Content-Type: application/force-download");
//Ho tentato anche con:
header("Content-type: Application/octet-stream");
//ma non ha funzionato.
header("Content-Type: application/rar"); //tentando con o senza questo header.
header("Content-Transfer-Encoding: binary"); //provato anche senza questo.
header("Content-Length: " . filesize($file));
header("Content-Disposition: attachment; filename= " . $_GET['id'] . ".rar");
/**
Provando con l'intero indirizzo del file nel filename="" non riusciva nemmeno a
riconoscere il tipo di file che doveva scaricare.
ad un certo punto mi aveva anche iniziato a dare come file da caricare
direttamente l'indirizzo ma con errori di sintassi.
**/
readfile($file);
/**
Con e senza questo readfile non dava comunque risultati accettabili.
Mi sono dato una guardata sul manuale
anche riguardo le funzioni ob_start() e ob_end_flush()
ma non mi sono sembrate utili allo scopo.
Comunque ho tentato anche con quelle insieme agli header ma non ha lo stesso
portato a niente.
**/
}
?>
La cartella download è chiusa tramite un file .htaccess con cui ho fatti vari tentativi. Gli ultimi tentativi sono questi due, entrambi trovati su internet (non mi ero mai dedicato a questo file htaccess quindi so solo l'indispensabile al riguardo):
Codice:
<Files ~ "\.rar$">
deny from all
</Files>
Codice:
<Files somefile>
ForceType application/x-httpd-php
AcceptPathInfo On
</Files>
Non so cosa altro tentare per far funzionare il download. Ci tengo a precisare che provando con download diretto (hotlink) la pagina da errore 403, che appunto sarebbe l'errore in cui la directory non è accessibile dall'esterno.
Spero sappiate aiutarmi che sono 2 giorni che faccio tentativi. Mi sono già trovato in difficoltà con altre cose e comincio a non farcela più.
Preciso che i file che devo mettere in download sono solo di formato compresso rar, dato che molto spesso cercando sul web ho notato che parlavano di file zip e magari il fatto che siano rar influisce su qualcosa.
Ovviamente il mio sito si trova qui su altervista.
Per qualche assurda ragione le guide al riguardo trovate in giro per il web sono tutte piuttosto diverse, che è uno dei motivi per cui sto impazzendo per capire come faccia a non funzionare e per quali motivi.