Una de las cosas que muchas veces interesa hacer en nuestras aplicaciones es forzar la descarga de un archivo a través de un script PHP, por ejemplo para llevar la cuenta de los archivos descargados. Para ello se puede implementar una clase que simplifique el proceso, por ejemplo esta:
<?php
class DownloadFile{
private $mimeType;
private $filename;
private $downloadName;
public function __construct($file, $mimeType = '', $downloadName = '')
{
if(!file_exists($file)) return;
$this->filename = $file;
$this->mimeType = $mimeType;
if($downloadName != '')
$this->downloadName = $downloadName;
else
$this->downloadName = $file;
}
public function download()
{
header("Content-type: ".$this->mimeType);
header("Content-length: ".filesize($this->filename));
header("Content-Disposition: attachment; filename=\"".$this->downloadName."\n");
readfile($this->filename);
}
public function setMimeType($mimeType)
{
$this->mimeType = $mimeType;
}
public function setDownloadName($downloadName)
{
$this->downloadName = $downloadName;
}
}
?>
Por supuesto la clase se puede mejorar mucho (por ejemplo comprobando si el archivo existe o el MIME Type), pero es solo un ejemplo base de como se podría implementar este patrón.