我想要一个可以下载文件的 Web 服务器,文件大小由文件名决定。例如:
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 的道路,建议使用重写规则,但对于我正在做的事情,我不需要它。