zoukankan      html  css  js  c++  java
  • 使用Web服务器下载文件

    有没有想过使用Web服务器来帮助我们下载文件?

    假设这样一个例子:我们有一台托管的Web服务器,使用Discuz作为论坛程序。现在要对Discuz程序做升级,该怎样处理呢?

    传统的方法是在我们的个人电脑上打开Discuz网站,下载Discuz的最新压缩包,然后再将压缩包上传到托管的Web服务器,使用Web服务器提供的在线压缩工具将压缩包解压缩到指定目录实现程序升级。

    我们使用的ADSL下载速度还可以,但要是上传就是非常的慢。有没有方法可以避免这种下载后又再上传的操作,转而让Web服务器直接去下载呢?

    今天在CU论坛上得到了别人的启发。

    基本思路:上传一段脚本到Web服务器,这段脚本的目的就是打开一个远端文件的连接,下载远端文件到本地。这里的本地是指Web服务器的本地。然后在浏览器中请求执行该段脚本,也就是开始执行下载。这样就实现了Web服务器的直接下载。

    这个功能实际上早有人帮我们做好了,请参看文章:PHP远程文件下载工具

    工具里面的代码(httpget.php)是这样的:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" lang="zh-cn">
    <head>
    <title>PHP远程文件下载工具 Ver 1.00 Bete Bacysoft.cn 开发</title>
    <meta http-equiv="Content-Type" content="text/html; charset=gbk" />
    <meta http-equiv="Content-Language" content="gbk" />
    <meta name="author" content="Bacysoft.cn" />
    <meta name="keywords" content="PHP 远程 文件下载" />
    <meta name="description" content="本工具有PHP编程实现,可以实现远程服务器通过http url下载指定文件到当前服务器。本工具由Bacysoft.cn开发。更多信息请访问:http://www.Bacysoft.cn" />
    </head>
    <?php
    set_time_limit (24 * 60 * 60); 
    $act = $_POST['act'];
    if ($act == "getfile"){
    
        $tt = time();
    
        $url = $_POST['url'];
        $newfname = basename($url);
    
        $file = fopen ($url, "rb");
    
        if ($file){
            $newf = fopen ($newfname, "wb");
            if ($newf)
                while(!feof($file)) {
                    fwrite($newf, fread($file, 1024 * 8 ), 1024 * 8 );
                }
        } 
        if ($file) fclose($file);
        if ($newf)     fclose($newf);
    
        $tt = time()-$tt;
    
        echo "文件 ".$newfname." 下载完毕!共计:".filesize($newfname)." 字节。<br/>";
        echo "一共耗时 $tt 秒,平均下载速度为:".filesize($newfname)/1024/$tt." KB/s";
        exit;
    }
    
    $pass = $_REQUEST['password'];
    
    if ($pass == "http://www.Bacysoft.cn"){
        $_SESSION['login'] = true;
    }
    if ($pass == "logout"){
        $_SESSION['login'] = false;
    }
    
    if ($_SESSION['login'] == true){
    ?>
    <body>
        <form method="post" target="insideframe">
            Http Url:<input name="url" size="50" />
            <input name="act" value="getfile" type="hidden" />
            <input name="submit" type="submit" />
            <a href="httpget.php?password=logout" >退出</a>
        </form>
        <iframe name="insideframe" width="100%" height="100" ></iframe>
    </body>
    </html>
    <?php
    }else{
    ?>
    <body>
        <form method="post">
            Password:<input name="password" type="password" />
            <input type="submit" />
        </form>
    </body>
    </html>
    <?php
    }
    ?>

    httpget.php使用方法:

    1、将httpget.php上传到Web服务器一个浏览器可以访问的目录。

    2、打开浏览器,输入httpget.php对应的网址,在密码框中输入密码,原始密码为http://www.Bacysoft.cn。

    3、在URL文本框中输入你想下载到服务器的文件的URL地址。比如,Discuz X2 中文简体GBK压缩包的地址:

    http://download.comsenz.com/DiscuzX/2.0/Discuz_X2_SC_GBK.zip

    5、下载完成后,会在信息框中输出相关提示信息。例如:

    文件 Discuz_X2_SC_GBK.zip 下载完毕!共计:8436348 字节。
    一共耗时 116 秒,平均下载速度为:71.02259 KB/s

    如果是Web服务器是Linux操作系统,我想在PHP脚本里简单调用wget应该也是可以的,不过没试过:

    <?php
    system
    ("wget '$url' -o $myfile");
    ?>
  • 相关阅读:
    AI图形算法的应用之一:通过图片模板对比发现油田漏油
    基于GPS定位和人脸识别的作业识别管理系统
    windows平板的开发和选型
    windows系统和IE的兼容性问题
    ASP.NET写的一个博客系统
    Android Studio3.2.1升级刨坑记录
    C#怎样链接mysql数据库
    学习进度条博客
    期末总结
    【操作系统】实验四 主存空间的分配和回收
  • 原文地址:https://www.cnblogs.com/eastson/p/2546304.html
Copyright © 2011-2022 走看看