php带密码功能并下载远程文件保存本地指定目录 修改加强版

php带密码功能并下载远程文件保存本地指定目录 修改加强版

  原作者BlueStyle 提示 改进地方有

  以前的算法是等文件下载完才计算,

  现在这个直接在在获取文件时候就计算大小

  加了容错语句

  增加了判断目录,没有目录自动创建

  把计算文件大小的算法换了个

  以前的那个光计算文件大小就7行代码,

  现在这个只要两行

  转载请保留原作者版权信息,由于作者是政府人员,为不惹麻烦,请保留此段文字完整性

  html代码:

  

复制代码 代码如下:

  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

  <HTML>

  <head>

  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

  <title>快乐飞扬博客 - 远程文件下载</title>

  </head>

  <body >

  <form method="post">

  <li>File: <input name="url" size="40" />

  <input name="submit" type="submit" /></li>

  <li>Pass: <input name="password" type="password" /></li>

  </form>

  PHP代码:

  

复制代码 代码如下:

  <?php

  # Copyright 2010 快乐飞扬

  # http://www.klfy.org/ 供新手学习参考

  set_time_limit (0); //不限时 24 * 60 * 60

  $password = 'admin'; //管理密码

  $pass = $_POST['password'];

  if ($pass == $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 = './Download/'; // 下载的文件保存目录。必须以斜杠结尾

  if(!is_dir($destination_folder)) //判断目录是否存在

  mkdir($destination_folder,0777); //若无则创建,并给与777权限 windows忽略

  $url = $_POST['url'];

  $headers = get_headers($url, 1); //得到文件大小

  if ((!array_key_exists("Content-Length", $headers))) {$filesize=0; }

  $newfname = $destination_folder . 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);}

  $runtime->stop();

  echo '<br /><li>下载耗时:<font color="blue"> '.$runtime->spent().' </font>微秒,文件大小<font color="blue"> '.$headers["Content-Length"].' </font>字节</li>';

  echo '<br /><li><font color="red">下载成功! '.$showtime=date("Y-m-d H:i:s").'</font></li>';

  }elseif(isset($_POST['password'])){

  echo '<br /><li><font color="red">密码错误!请从新输入密码!</font></li>';

  }

  ?>

  </body>

  </html>