我将所有文件存储在mysql数据库中作为blob。我试图为用户可以通过我们的PHP网站下载它们的速率添加速度限制。我试过用“睡觉(1);”方法,似乎没有用,或者我做得不对。所以如果有人知道限制速度的方法,我会很乐意帮助你。
这是我的下载代码
$query=mysql_query("SELECT * FROM file_servers WHERE id='$file_server_id'");
$fetch=mysql_fetch_assoc($query);
$file_server_ip=$fetch['ip'];
$file_server_port=$fetch['port'];
$file_server_username=$fetch['username'];
$file_server_password=$fetch['password'];
$file_server_db=$fetch['database_name'];
$connectto=$file_server_ip.":".$file_server_port;
if (!$linkid = @mysql_connect($connectto, $file_server_username, $file_server_password, true))
{
die("Unable to connect to storage server!");
}
if (!mysql_select_db($file_server_db, $linkid))
{
die("Unable to connect to storage database!");
}
$nodelist = array();
// Pull the list of file inodes
$SQL = "SELECT id FROM file_data WHERE file_id='$file_id' order by id";
if (!$RES = mysql_query($SQL, $linkid))
{
die("Failure to retrive list of file inodes");
}
while ($CUR = mysql_fetch_object($RES))
{
$nodelist[] = $CUR->id;
}
// Send down the header to the client
header("Content-Type: $data_type");
header("Content-Length: $size");
header("Content-Disposition: attachment; filename=$name");
// Loop thru and stream the nodes 1 by 1
for ($Z = 0 ; $Z < count($nodelist) ; $Z++)
{
$SQL = "select file_data from file_data where id = " . $nodelist[$Z];
if (!$RESX = mysql_query($SQL, $linkid))
{
die("Failure to retrive file node data");
}
$DataObj = mysql_fetch_object($RESX);
echo $DataObj->file_data;
}
答案 0 :(得分:0)
它位于您希望实现throtling的代码中的最后一个echo行中。我不熟悉php是否支持throtling输出。
如果没有,你可以试着将那些你希望回应的内容($DataObj->file_data
)分开,然后一点一点地回应它,中间有一些小暂停
并确保禁用outbut缓冲。否则在完成整个脚本之前,不会输出你回复的所有内容。
答案 1 :(得分:0)
这样做的一种方法可能是flush和睡眠:
的组合但是也可以在油门功能上获取战利品: http://php.net/manual/en/function.http-throttle.php 它也有一个例子。我觉得它更适合。