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.