<?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;width: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."\r\n".$Language[2].": ".$runtime->spent().$Language[3].": ".$headers["Content-Length"].$Language[4]."\r\n".$Language[12].': '.date("Y-m-d H:i:s")."\r\n"."\r\n";
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>

php远程下载文件的更多相关文章

  1. PHP实现远程下载文件到本地

    PHP实现远程下载文件到本地 投稿:hebedich 字体:[增加 减小] 类型:转载   经常写采集器发布接口需要使用到远程附件的功能,所以自己写了一个PHP远程下载文件到本地的函数,一般情况下已经 ...

  2. PHP CURL实现远程下载文件到本地

    <?php //$result=httpcopy('http://www.phpernote.com/image/logo.gif'); echo '<pre>';print_r($ ...

  3. android命令模式IntentService 远程下载文件

    服务可用在一下情景: 1,用户离开activity后,仍需要继续工作,例如从网络下载文件,播放音乐. 2,无论activity出现或离开,都需要持续工作,例如网络聊天应用. 3,连接网络服务,正在使用 ...

  4. Java远程下载文件到本地(http协议和ssh2协议)

    Java中java.io包为我们提供了输入流和输出流,对文件的读写基本上都依赖于这些封装好的关于流的类中来实现.前段时间遇到了以下两种需求: 1.与某系统对接,每天获取最新的图片并显示在前端页面.该系 ...

  5. linux远程下载文件 的两种方法之 ftp命令和scp命令

    ftp命令: 服务器有安装ftp Server,另外一台linux可以使用ftp的client程序来进行文件的拷贝读取和下载. 1. 连接ftp服务器  格式:ftp [hostname| ip-ad ...

  6. java远程下载文件到本地

    方法一 ** * 下载远程文件并保存到本地 * * @param remoteFilePath-远程文件路径 * @param localFilePath-本地文件路径(带文件名) */ public ...

  7. Xshell 本地上传、远程下载文件

    1.Xshell登录工具在创建会话的时候,点击最下面的ZMODEM,可以填写下载的路径和加载的路径:2个路径可以一样也可以不一样: 在下载的时候可以下载到相应的路径去.(我设置的是下载前始终询问) 2 ...

  8. paramiko之ssh登录,执行cmd,下载文件

    一.paramiko远程登录及执行命令 1.1:exec_command(cmd)远程执行命令 client = paramiko.SSHClient() client.set_missing_hos ...

  9. powershell 远程下载并执行

    远程下载文件到本地并执行cmd.exe /c powershell.exe -ExecutionPolicy bypass -noprofile -windowstyle hidden (new-ob ...

随机推荐

  1. 课程设计之"网络考试系统"(php、Extjs)

    1.TestSystem大概结构框图 2.数据库设计(11张表) 数据库名称:db_testsystem 数据库表: tb_admin 记录题库管理员帐户信息 代码 tb_allcontent 记录随 ...

  2. ylb:SQL 表的高级查询-多表连接和子查询

    ylbtech-SQL Server: SQL Server-表的高级查询-多表连接和子查询 SQL Server 表的高级查询-多表连接和子查询. 1,ylb:表的高级查询-多表连接和子查询 返回顶 ...

  3. 【京东个人中心】——Nodejs/Ajax/HTML5/Mysql爬坑之功能与数据分析

    一.引言 在学习了Nodejs和HTML5之后,发现了Nodejs的使用很方便,和php是完全不同的另一种后台语言.我也明白了,在一个项目里,是不可能同时存在Apach服务器(php)和Web服务器( ...

  4. SAS学习笔记之函数应用

    今天在做数据需求的时候遇到一些问题,因为不能够在数据库里面做,仅仅好在SAS里面实现.这就遇到了一些麻烦,须要使用一些函数实现部分功能,如查找字段中某个特殊字符出现的次数,查找某个字符的位置等,以下一 ...

  5. 身份证识别接口编写的JAVA调用示例

    此java文章是基本聚合数据证件识别接口来演示,基本HTTP POST请求上传图片并接收JSON数据来处理. 使用前你需要通过 https://www.juhe.cn/docs/api/id/153 ...

  6. poj1270Following Orders(拓扑排序+dfs回溯)

    题目链接: 啊哈哈.点我点我 题意是: 第一列给出全部的字母数,第二列给出一些先后顺序. 然后按字典序最小的方式输出全部的可能性.. . 思路: 整体来说是拓扑排序.可是又非常多细节要考虑.首先要按字 ...

  7. UDP最大传输字节

    每个包最大可携带字节长度:65507个byte. 封装成 IP 后,大小超出 PMTU 的分组将可能被 fragmented. 如果设置了 Don't Frag,超出 PMTU 的分组将不能被发送. ...

  8. 如何在VS2010中添加ActiveX控件及使用方法

    方法1: 1.首先在在项目上面右击添加类,如下图所示: 2.点击添加ActiveX控件中的MFC类 3.找到需要添加的ActiveX类. 4.点击完成即可. 5.此时转到资源视图,打开如下视图.可能工 ...

  9. WinForm搭载ScintillaNET时文本由于发生偏移被隐藏解决方案

    项目用ScintillaNet搭载到WinForm以满足文本编辑的需求,在用FindReplace.Scintilla.Text=“显示内容”输出文本内容的时候会碰到文本被WinForm边框隐藏的情况 ...

  10. Windows下Tomcat+nginx配置证书实现登录页https访问

    最近公司出于安全考虑,需要将登录页做成https访问,其他页面仍采用http访问,环境是Linux平台,web服务器采用Tomcat + Nginx.之前没接触过nginx,这两天网上查资料,试了好多 ...