Tengo un pequeño script que permite descargar archivos desde un servidor externo, y refleja en la url de descarga como si el archivo se descargara desde la dirección url en la que está el archivo PHP que contiene el código de este script.
Este script lo encontré Googleando, es muy similar a lo que yo buscaba, pero no funcionaba y me tocó hacerle varias modificaciones para que volviera a andar a pesar de nunca haber trabajado con encabezados, probando y tratando de descifrar el funcionamiento lo logré.
Explicación de Funcionamiento
Este Script actualmente lo ejecuto ingresando la url directamente en el navegador así http://miwordpress.com/descargas.php entonces me da a elegir desde una lista, el archivo que necesito descargar, cabe mencionar que dichos archivos se encuentran alojados para este caso en: http://mirror.unimagdalena.edu.co/centos/7.7.1908/isos/x86_64/CentOS-7-x86_64-Minimal-1908.iso y http://mirror.unimagdalena.edu.co/centos/7.7.1908/isos/x86_64/CentOS-7-x86_64-NetInstall-1908.iso, cuando hago click para descargar uno de ellos enseguida la descarga comienza pero reemplaza estas URL por un simple ID y el dominio desde el que se ejecuta el script en este caso las URL serian: http://miwordpress.com/descargas.php?0 y http://miwordpress.com/descargas.php?1respectivamente.
El Problema
Bueno resulta que deseo que el script muestre una URL y dominio distinto al actual, es decir ya no quiero que muestre la fuente de descarga como http://miwordpress.com/descargas.php?0 sino otro dominio bajo mi poder (me imagino debe ser así) como digamos http://downmiwp.com/descargas.php?0. Por otro lado necesito que este mismo script se pueda ejecutar en las entradas de Blog (Single.php de WP), para cada entrada tendré URLS externas de archivos diferentes que le proporcionaré al script a través de una variable PHP.
Para comenzar lo que se me ocurrió como solución, fue intentar con un simple
<?php echo file_get_contents('http://miwordpress.com/descargas.php'); ?>
Y rogar para que funcione al momento de hacer click en el archivo a descargar, pero sencillamente no muestra nada. Lo de cambiar la URL por otro dominio si no tengo idea cómo hacerlo.
A continuación adjunto el código respectivo que tiene el script compuesto por un solo archivo llamado descargas.php.
Contenido achivo descargas.php
$files=array( 'CentOS-7-x86_64-Minimal-1908.iso', 'CentOS-7-x86_64-NetInstall-1908.iso'); $filenames=array( 'CentOS-7-x86_64-Minimal-1908.iso', 'CentOS-7-x86_64-NetInstall-1908.iso'); $url= "http://mirror.unimagdalena.edu.co/centos/7.7.1908/isos/x86_64/"; $PHP_SELF = $_SERVER['PHP_SELF']; $HTTP_HOST = $_SERVER['HTTP_HOST']; if (isset($_SERVER['HTTP_REFERER'])) { $HTTP_REFERER = $_SERVER['HTTP_REFERER']; } else { $HTTP_REFERER = ''; } $referer= preg_replace( '/?./', '',$HTTP_REFERER); $thisfile= "http://$HTTP_HOST$PHP_SELF"; function Getsize($url) { $remoteFile = $url; $curl = curl_init($remoteFile); curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); url_setopt($curl, CURLOPT_HEADER, true); curl_setopt ($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_NOBODY, true); curl_exec($curl); $fileSize = curl_getinfo($curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD); curl_close($curl); return $fileSize; } if ($referer!=$thisfile) { for ($i=0;$i<count($files);$i++) { echo '<P><A HREF="'.$PHP_SELF.'?'.$i.'">'.$filenames[$i].'</A>'; } } else { $QUERY_STRING = $_SERVER['QUERY_STRING']; $i=$QUERY_STRING; $total= "$url$files[$i]"; $size = Getsize("$total"); header('Content-Description: File Transfer'); header("Content-type: application/octet-stream"); header('Content-Disposition: attachment; filename='.$files[$i]); header('Content-Transfer-Encoding: binary'); header('Content-Length: '.$size); readfile($total); }
Algunos detalles (Para este ejemplo):
1. Archivos Alojado en: http://mirror.unimagdalena.edu.co
2. WordPress Alojado en Dominio www.miwordpress.com.
3. Entrada de Blog de ejemplo ubicada en: www.miwordpress.com/entrada1
En Conclusión Necesito:
Integrar este script con las entradas de WP.
Poder usar otro dominio o subdominio distinto al donde se encuentra alojada mi instalación de WP (en este caso es el mismo donde se aloja el archivo descargas.php del script).