Ciao a tutti !
Ho la necessità di far scaricare agli utenti un file excel posto in un server condiviso.
Ho scritto il codice e non riesco a capire perchè non funziona.
Ho provato a cambiare posizione del file da server condiviso a quello in utilizzo e funziona perfettamente. Questo mi ha fatto pensare che la variabile da me dichiarata $dir sia sbagliata.
Codice PHP:
//impostiamo la cartella in cui sono presenti i file per il download
$dir = "\\10.x.x.x\cartelle restanti";
//riceviamo via GET il file da scaricare la funzione basename la applichiamo al fine di evitare che utenti maliziosi possano eseguire percorsi nell'URL
$file = isset($_GET['file']) ? basename( (string) $_GET['file'] ) : '';
$path1 = $dir . $file;
// eseguiamo alcuni controlli preventivi
if($file=='')
{ exit('Nessun file indicato'); }
else
if(!is_file($path1))
{echo $path1; exit('Il file non esiste');
}else if(!is_readable($path1))
{ exit('Il file non ha i permessi per essere scaricato'); }
// otteniamo alcune info sul file
$info = pathinfo( $path1 );
$extension = $info['extension'];
// estensione
$size = filesize($path1);
// dimensione in byte
$time_file = date( 'r', filemtime( $path1 ) );
// time ultima modifica
// inviamo gli opportuni headers
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'. basename($path1) .'"');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . $size);
header('Last-Modified: ' . $time_file);
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
// eliminiamo eventuale output inviato
ob_clean();
flush();
// leggiamo il file inviamo l'output @readfile($path1) or die('SERVER ERROR!');
exit;
Per vedere cosa mi restituiva $path1 l'ho visualizzato e ho notato che il doppio \\ non viene visualizzato correttamente , ma solo con una \.