
Я хотел бы иметь веб-сервер, на который я мог бы загружать файлы, размер которых определяется их именем. Что-то вроде:
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
Точный способ указания размера файла в URL-адресе не важен, как и содержимое полученных данных (случайные данные, все нули, не имеют значения), главное, чтобы они имели правильный размер.
У меня установлен сервер Apache, но очевидно, что сгенерировать все файлы невозможно (у меня быстро закончится место на диске).
Есть ли способ добиться такого поведения? Используя модуль Apache или PHP, или другой способ?
решение1
Используйте mod_rewrite для захвата аргумента:
RewriteEngine on
RewriteRule ^/?(.*)$ generate.php?size=$1 [L]
Затем просто проведите generate.php
анализ $_GET['size']
и верните соответствующее количество байтов.
решение2
Вот как я в итоге добился того, чего хотел.
Кажется, это было очень просто в PHP. После изучения PHP я создал следующий скрипт generate.php:
<?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));
}
?>
Просматриваяhttp://mydomain.com/generate.php?size=1000затем возвращает файл размером 1000 байт, содержащий только пробелы.
Принятый ответ, который направил меня на путь PHP, предполагает использование правила перезаписи, но для моих задач оно не нужно.