
In una cartella "force-download" nella root principale del sito, ho tre file
- force-download.php
- img.jpg
- index.php
i codici sono:
force-download.php
Codice PHP:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>force download</title>
</head>
<body>
<?php
// definisco una variabile con il percorso alla cartella
// in cui sono archiviati i file
$dir = "/root/force-download/";
// Recupero il nome del file dalla querystring
// e lo accodo al percorso della cartella del download
$fn = (isset($_GET['filename']) ? $_GET['filename'] : false);
// controllo la sintassi del file richiesto
if (!preg_match('/^[a-z0-9]+\.[a-z]{2,3}$/i',$fn)) {
$fn = false;
}else{
$file = $dir . $fn;
}
// verifico che il file esista
if (!file_exists($file))
{
// se non esiste stampo un errore
echo "Il file non esiste!";
}else{
// Se il file esiste...
// Imposto gli header della pagina per forzare il download del file
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename= " . $file);
header("Content-Transfer-Encoding: binary");
// Leggo il contenuto del file
readfile($file);
}
?>
</body>
</html>
index.php
Codice PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>download</title>
</head>
<body>
<form>
<input type="button" style="background:#00F;color:#FFF;font-weight:bold;" onclick="document.location.href='force-download.php?filename=img.jpg';" value="Download ommagine" />
</form>
</body>
</html>
Eseguendo l'index fa la verifica se il file esiste e mi da sempre l'errore il file non esiste anche specificando in modo diverso la dir, ma il file esiste nella cartella "force-download"
Dove sta l'errore che non riesco a vedere?
Grazie