In una cartella "force-download" nella root principale del sito, ho tre file
  1. force-download.php
  2. img.jpg
  3. 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