
Me gustaría tener un servidor web donde pueda descargar archivos, cuyo tamaño esté determinado por su nombre. Algo como:
Browse to http://mydomain.com/100MB -> receive any 100MB file
Browse to http://mydomain.com/200MB -> receive any 200MB file
Browse to http://mydomain.com/254MB -> receive any 254MB file
Browse to http://mydomain.com/10kb -> receive any 10kb file
Browse to http://mydomain.com/1GB -> receive any 1GB file
Browse to http://mydomain.com/3GB -> receive any 3GB file
La forma exacta de especificar el tamaño del archivo en la URL no es importante, y tampoco lo es el contenido de los datos del archivo recibido (datos aleatorios, todos ceros, no importa), siempre y cuando tenga el tamaño correcto.
Tengo un servidor Apache instalado, pero obviamente no es posible generar todos los archivos (me quedaría sin espacio en el disco rápidamente).
¿Hay alguna manera de lograr este comportamiento? ¿Usando un módulo de Apache o quizás PHP, u otra forma?
Respuesta1
Utilice mod_rewrite para capturar el argumento:
RewriteEngine on
RewriteRule ^/?(.*)$ generate.php?size=$1 [L]
Luego simplemente generate.php
analice $_GET['size']
y devuelva el número apropiado de bytes.
Respuesta2
Así es como terminé haciendo lo que quería.
Parece que esto fue muy fácil en PHP. Después de aprender PHP, este es el script generate.php que creé:
<?php
$size = $_GET['size'];
$partsize = 1024 * 16;
$part = str_repeat(' ',$partsize);
$partcount = intval(floor($size / $partsize));
$leftover = $size - ($partcount * $partsize);
for ($i = 0; $i < $partcount; $i++) {
echo($part);
flush();
}
if ($leftover > 0) {
echo(str_repeat(' ',$leftover));
}
?>
Navegando ahttp://midominio.com/generate.php?size=1000luego devuelve un archivo de 1000 bytes que contiene solo espacios.
La respuesta aceptada, que me puso en el camino de PHP, sugiere usar una regla de reescritura, pero no la necesito para lo que estoy haciendo.