gpt4 book ai didi

php - 使用php将文件部分下载到服务器

转载 作者:行者123 更新时间:2023-12-03 13:13:09 25 4
gpt4 key购买 nike

我们学校的互联网速度限制约为7kb/s,我们有一些300Mb空间的php主机。但是意识到我们的php脚本没有限制!

我想将文件下载到主机上,但确实在此站点中找到了answer

问题就在这里:我不能下载超过300 Mb,而且我希望能够使用 friend 的帐户来加快下载速度(当然要经过他们的许可)。

我拥有在学校使用的计算机的完全访问权限,该计算机可以将我的less_then_300Mb_files移动到其自身,然后让我下载其余的文件。

首先,我编写了这段代码:

<?php
function downloadfile ($url, $path){
$step=1024;
$fsize=0;
if(file_exists($path))
$fsize=filesize($path);
$dlsize=filesize($url);
echo "$fsize<br>$dlsize<br>";

$file = fopen ($url, "rb");
if ($file)
{
$newf = fopen ($path, "ab");
fseek($newf,$fsize);
fseek($file,$fsize);
if($newf)
while(ftell($newf)<$dlsize)
{
if($dlsize-ftell($newf)<$step)
fwrite($newf, fread($file, $dlsize-ftell($newf)), $dlsize-ftell($newf));
else
fwrite($newf, fread($file, $step), $step );
}

}

if ($file)
fclose($file);


if ($newf)
fclose($newf);

}


$url=$_GET['url'];
$exp=explode("/",$url);


downloadfile($url,$exp[count($exp)-1]);

?>

它在本地文件上效果很好,但是 fseek和其他一些命令在URL中无法正常运行。

我希望它像 IDM一样,能够恢复和暂停文件。另外,如果可能的话,我希望它使用多个请求进行下载。

我的功能有什么问题,我该如何下载文件的一部分?

更多信息:
服务器基于linux
我可以访问的计算机是win7。
我知道vb.net,php(!)和一点c++。

最佳答案

好吧,我一个人做了。
这不完全是我想要的,但是可以通过某种方式实现:

<?php
set_time_limit(0);

function existsin($ar,$key)
{
foreach ($ar as $s => $val)
if ($s==$key) return true;
return false;
}

function toinf($str,$path)
{
$fhr=fopen ("$path/inf.txt", "w");
fwrite($fhr,$str);
fclose($fhr);
}


function downloadfile ($url, $path, $len, $num, $waittl)
{
$exp=explode("/",$url);
$fname=$exp[count($exp)-1];
$prt=0;$ppath=$path;
$sp=1;$exectime=10000;
$file = fopen ($url, "rb");

if ($file)
{
$newf = fopen ($path, "wb");
if ($newf)
while(!feof($file))
{
if(ftell($newf)/1048576 >= $len && $len!=0)
{


while(file_exists($ppath) && $waittl)
usleep(5000);

$prt=$prt+1;
fclose($newf);
$ppath=$path.".part".$prt;
if(is_dir($num))
$newf = fopen ($ppath, "wb");
else
die("rested!");
}
toinf("$fname|Downloading",$num);

$timepre = microtime(true);
fwrite($newf, fread($file, 1024 * $sp ), 1024 * $sp );
$timepost = microtime(true);
$exectime2= $exectime;
$exectime = $timepost - $timepre;
if($exectime2 > $exectime && 65536>$sp) {$sp=$sp*1.5;} else if($sp>=1) $sp=$sp/1.5;
if($sp<=0) $sp=1;


}
}

if ($file)
fclose($file);


if ($newf)
fclose($newf);

}


if(existsin($_GET,'url')==false) {echo("invalid arg");return 0;} else echo ("started.");
$url=$_GET['url'];
$exp=explode("/",$url);

for($i=1;is_dir($i);$i++);
mkdir($i);
toinf($exp[count($exp)-1]."|Started",$num);
$maxlen=50;$waittl=true;
if(existsin($_GET,'maxlen')==true) $maxlen=$_GET['maxlen'];
if(existsin($_GET,'wait')==true) $waittl=false;
downloadfile($url,$i."/".$exp[count($exp)-1],$maxlen,$i,$waittl);
toinf($exp[count($exp)-1]."|Done",$i);
?>

我还无法继续下载,但可以部分下载并通过学校空间过滤器...
但是有时候(我不知道出于什么原因)PHP突然终止,除了一堆无用的零件之外,我什么也没有留下!

关于php - 使用php将文件部分下载到服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14799018/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com