• php远程下载文件


    <?php
    /*
    本源码来源于网络
    http://user.qzone.qq.com/292672703
    */
    header("content-Type: text/html; charset=utf-8");  //定义编码
    set_time_limit (0);//不限时   24 * 60 * 60
    //语言包数组
    $lang_cn = array (
      '0' => '文件地址',
      '1' => '输入密码',
      '2' => '下载耗时',
      '3' => '微秒,文件大小',
      '4' => '字节',
      '5' => '下载成功',
      '6' => '无效密码',
      '7' => '请重新输入',
      '8' => '远程文件下载',
      '9' => '不能打开文件',
      '10'=> '不能写入文件',
      '11'=> '文件地址',
      '12'=> '下载时间',
      '13'=> '文件不可写入',
      '14'=> '成功地将',
      '15'=> '操作记录成功写入!',
      '16'=> '系统已将此次操作写入日志记录!',
      '17'=> '写入失败',
      '18'=> '文件不存在,试图创建,',
      '19'=> '创建失败!',
      '20'=>'文件大小',
      '21'=>'未知',
      '22'=>'已经下载',
      '23'=>'完成进度',
      '24'=>'必须为绝对地址,且前面要加http://'
    );
    //China,中文
    $lang_en = array (
      '0' => 'File',
      '1' => 'Pass',
      '2' => 'DownTime',
      '3' => 'Ms, file size',
      '4' => 'Byte',
      '5' => 'Download complete',
      '6' => 'Invalid password',
      '7' => 'Please try again',
      '8' => 'Happy flying blog - Remote File Download',
      '9' => 'Can not open file',
      '10'=> 'Can not write file',
      '11'=> 'Query File',
      '12'=> 'Query Time',
      '13'=> 'file not writeable',
      '14'=> 'I have success save',
      '15'=> 'Write successful!',
      '16'=> 'The operating system has written to the log records!',
      '17'=> 'Success or failure',
      '18'=> 'File does not exist, attempting to create,',
      '19'=> 'Create Failed',
      '20'=>'File Size',
      '21'=>'Unknown length',
      '22'=>'Have downloaded',
      '23'=>'Download progress',
      '24'=>'Must be an absolute address'
    );
    //English,英文
    $Language = $lang_cn;         //切换语言
    $Archives = 'log.txt';         //Log文件
    $Folder   = 'qq292672703/';     //下载目录
    $password = '292672703';         //管理密码
    ?>
    <!--简单控制地址长度-->
    <SCRIPT language=javascript>
    function CheckPost()
    {
        if (myform.url.value.length<10)
        {
            alert("文件地址不能小于10个字符,请认真填写!");
            myform.url.focus();
            return false;
        }
    }
    </SCRIPT>
    
    <!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>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title><?php echo $Language[8]; ?></title>
    </head>
    
    <body>
    <form method="post"  name="myform" onsubmit="return CheckPost();">
    <?php echo $Language[0]; ?>: <input name="url" type="text" value="http://" size="50%"/> <font color="red"><?php echo $Language[24]; ?></font><br>
    <?php echo $Language[1]; ?>: <input name="password" type="password"size="30%" /><br>
    <input name="submit" type="submit" value="确认下载" />
    </form><br />
    
    <table border="1" width="100%">
        <tr>
            <td width="20%"><?php echo $Language[20]; ?></td>
            <td width="80%"><font color="red"><div id="filesize"><?php echo $Language[21]; ?></font> <?php echo $Language[4]; ?></div></td>
        </tr>
        <tr>
            <td> <?php echo $Language[22]; ?></td><td><font color="red"><div id="downloaded">0</font> <?php echo $Language[4]; ?></div></td>
        </tr>
        <tr>
            <td> <?php echo $Language[23]; ?></td><td><font color="red"><div id="progressbar" style="float:left;1px; text-align:center; color:#FFFFFF; background-color:#0066CC"></div><div id="progressText" style=" float:left">0%</div></font></td>
        </tr>
    </table>
    <!--文件计算、进度显示-->
    <script type="text/javascript">
       //文件长度
        var filesize=0;
        function $(obj)
        {
            return document.getElementById(obj);
        }
        //设置文件长度
       function setFileSize(fsize)
       {
         filesize=fsize;
         $("filesize").innerHTML=fsize;
       }
        //设置已经下载的,并计算百分比
       function setDownloaded(fsize)
       {
            $("downloaded").innerHTML=fsize;
            if(filesize>0)
            {
                var percent=Math.round(fsize*100/filesize);
                $("progressbar").style.width=(percent+"%");
                if(percent>0)
                {
                    $("progressbar").innerHTML=percent+"%";
                    $("progressText").innerHTML="";
                }
                else
                {
                    $("progressText").innerHTML=percent+"%";
                }
        
            }
       }
    
    </script>
    
    <?php
    //密码验证
    if ($_POST['password'] == $password) 
    {
        class runtime 
        {
            var $StartTime = 0;
            var $StopTime = 0;
            function get_microtime()
            {
                list($usec, $sec) = explode(' ', microtime());
                return ((float)$usec + (float)$sec);
            }
            function start() 
            {
                $this->StartTime = $this->get_microtime();
            }
            function stop()  
            {
                $this->StopTime = $this->get_microtime();
            }
            function spent() 
            { 
                return round(($this->StopTime - $this->StartTime) * 1000, 1);
            }
        }
    
    //消耗时间
    $runtime= new runtime;
    $runtime->start();
    
    // 下载
    if (!isset($_POST['submit'])) die();
        $destination_folder = $Folder;
        if(!is_dir($destination_folder))
            mkdir($destination_folder,0777);
    $url = $_POST['url'];
    $file = fopen ($url, "rb");
    if ($file)
    {
        // 获取文件大小
        $filesize=-1;
        $headers = get_headers($url, 1);
        if ((!array_key_exists("Content-Length", $headers)))
        {
             $filesize=0; 
        }
        $filesize= $headers["Content-Length"];
        $newfname = $destination_folder . basename($url);
    
      //不是所有的文件都会先返回大小的,
      //有些动态页面不先返回总大小,这样就无法计算进度了
    
        if($filesize != -1)
        {
            echo "<script>setFileSize($filesize);</script>";    //在前台显示文件大小
        }
        $newf = fopen ($newfname, "wb");
        $downlen=0;
        if ($newf)
            while(!feof($file)) {
            $data=fread($file, 1024 * 8 );    //默认获取8K
            $downlen+=strlen($data);    // 累计已经下载的字节数
            fwrite($newf, $data, 1024 * 8 );
            echo "<script>setDownloaded($downlen);</script>";    //在前台显示已经下载文件大小
            ob_flush();
            flush();
        }
    }
    if ($file) 
    {
      fclose($file);
    }
    
    if ($newf) 
    {
      fclose($newf);
    }
        
    $runtime->stop();//停止计算
    
    //乱七八糟的东西 -0-;
        $downtime =  '<p>'.$Language[2].':<font color="blue"> '.$runtime->spent().' </font>'.$Language[3].'<font color="blue"> '.$headers["Content-Length"].' </font>'.$Language[4].'.</p><br>';
        $downok  =   '<p><font color="red">'.$Language[5].'!'.date("Y-m-d H:i:s").'</font></p><br>';
    }
    elseif(isset($_POST['password']))
    {
        $passerror = '<p><font color="red">'.$Language[6].'!'.$Language[7].'!</font></p><br>';
    }
    
    $Export = $downtime.$downok.$passerror;
    if(isset($_POST['url']) && ($_POST['password'] == $password)) 
    {
        $filename = $Archives;
        $somecontent = $Language[11].': '.$url."
    ".$Language[2].": ".$runtime->spent().$Language[3].": ".$headers["Content-Length"].$Language[4]."
    ".$Language[12].': '.date("Y-m-d H:i:s")."
    "."
    ";  
        if (!file_exists($filename))
        {
            $echo_1 = $Language[18];
            if (!fopen($filename, 'w'))
            {
                $echo_2 = $Language[19];
            }
        }
    // 文件操作
    
    if (is_writable($filename)) //判断是否可写
    {
        if (!$handle = fopen($filename, 'a+')) //打开文件
        {
            $echo_3 = $Language[9].$filename; //当打不开时
        } 
        else
        {
            if (fwrite($handle, $somecontent) === false)//写入
            {
                $echo_4 = $Language[10].$filename;
            } else
            {
                $echo_5 = $Language[15];
            }
            fclose($handle);//关闭连接
        }
    } 
    else
    {
        $echo_6 = $Language[17];
    }
    }
    $echo = $echo_1.$echo_2.$echo_3.$echo_4.$echo_5.$echo_6;
    ?>
    
    <?php echo $Export; ?>
    <p><font color="blue"><?php echo $echo; ?></font></p>
    </body>
    </html>
  • 相关阅读:
    好文章集合
    WPF:布局
    xcode6.0 模拟器打不开
    vue-vux初学
    【个人笔记】《知了堂》MySQL三种关系:一对一,一对多,多对多。
    vue-axios跨域配置
    vue+webpack使用
    vs code插件
    echarts图表属性设置
    【个人笔记】《知了堂》ajax的get及post请求
  • 原文地址:https://www.cnblogs.com/yhdsir/p/4924086.html
Copyright © 2020-2023  润新知