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" οnsubmit="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>

 

转载于:https://www.cnblogs.com/yhdsir/p/4924086.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/459605.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux 下安装部署mq,RocketMQ在linux下安装部署

本博客以当前RocketMQ最新版介绍&#xff1a;v4.4.0环境要求64位JDK 1.8;Maven 3.2.x; // 源码编译时需要用到二进制文件安装> unzip rocketmq-all-4.4.0-bin-release.zip && mv rocketmq-all-4.4.0-bin-release rocketmq启动server> cd /root/rocketmq> nohu…

一个典型的参数型跨站脚本漏洞

拿百度主页曾经的一个XSS做个演示&#xff0c;这个漏洞是由于百度主页tn和bar参数过滤不严导致的参数型XSS&#xff1a;http://www.baidu.com/index.php?tn"/**/stylexss:expression(alert(‘xss‘)); http://www.baidu.com/index.php?bar"/**/stylexss:expressio…

java 常用工具类的使用一

1. Java工具概述 很多人初学程序时&#xff0c;总是在想&#xff0c;那么多的算法该怎么写呀&#xff1f;那么多的数据结构都不熟悉&#xff0c;该怎么实现呀&#xff1f;总是担心英语不好程序学不精通&#xff0c;数学不好写程序无法达到巅峰。学的程序越多&#xff0c;不懂的…

android http最新框架,Android框架学习笔记02AndroidAsycHttp框架

上一篇中我们介绍了OkHttp3.0框架的基本使用方法&#xff0c;这一篇我们学习一下Android的另外一个网络请求框架——AsyncHttpClient框架。Asynchttpclient框架是一个开源的异步网络请求框架&#xff0c;所有的网络都在Android的非UI线程中&#xff0c;通过回调方法处理请求结果…

C# 读取app.config配置文件 节点键值,提示 配置系统未能初始化 错误的解决方案...

新建C#项目&#xff0c;在app.config中添加了appSettings项&#xff0c;运行时出现"配置系统未能初始化"的错误&#xff0c;MSDN里写到&#xff0c;如果配置文件中包含 configSections 元素&#xff0c;则 configSections 元素必须是 configuration 元素的第一个子元…

miui12 android系统耗电,miui12耗电严重怎么办,miui12续航优化方法

很多小米用户反馈升级到miui12稳定版后耗电大大增加&#xff01;再大的电池也经不住miui12的耗电&#xff01;那么miui12耗电严重怎么办&#xff1f;miui12续航优化的方法呢&#xff1f;一起和XDA小编看看吧&#xff01;近日&#xff0c;有网友对此提供了优化miui12耗电的方法&…

Linux下 执行程序

看到有人问Linux下的./表示什么意思&#xff0c;我就趁机在这里写一下个人愚见&#xff1a; ./的意思是执行当前目录下的某可执行文件. . /相当于 source 根目录下的一个脚本. 转载于:https://www.cnblogs.com/zuiyirenjian/p/4299322.html

r6400 usb android,网件R6400路由器USB接口速率测试与总结

网件R6400路由器USB接口速率测试测试中使用的是浦科特M6V 256GB固态硬盘搭配USB3.0硬盘盒进行测试&#xff0c;此外由于无线网络速率有一定的波动&#xff0c;对最终测试成绩测试成绩有较大的影响&#xff0c;因此我们使用网速相对稳定的千兆有线网络连接路由器进行测试。首先我…

只用2000行代码实现google protocol buffer c++版的功能

2019独角兽企业重金招聘Python工程师标准>>> google protocol buffer (下面简称gpb)功能强大&#xff0c;应用广泛&#xff0c;但在实际应用中&#xff0c;gpb需要写.proto脚本文件&#xff0c;需要依赖.lib库&#xff0c;还需要为每个消息体生成一大堆难以阅读的C代…

thinkphp 获取客户端ip地址方法

/*** 获取客户端IP地址* param integer $type 返回类型 0 返回IP地址 1 返回IPV4地址数字* param boolean $adv 是否进行高级模式获取&#xff08;有可能被伪装&#xff09; * return mixed*/ function get_client_ip($type 0,$advfalse) {$type $type ? 1 : 0;stati…

android:layout 冒号,android-json解析及简单例子(补汉6个汉字字).pdf

android json 解析及简单例子JSON 的定义&#xff1a;一 种轻量级的数据交换格式&#xff0c;具有良好的可读和便于快速编写的特性。业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 &#xff0c;获得了当今大部分语言的 支持)&#xff0c;从而可以在不同平台间进行…

流控思路——多消费者定量生产(第100篇)

为什么80%的码农都做不了架构师&#xff1f;>>> 多线程消费队列到指定个数时触发一个生产线程往队列中补充元素&#xff0c;保证队列中有足够的数据供消费&#xff0c;不至于使消费线程等待&#xff0c;也不至于在队列中堆得过多。假设10人消费&#xff0c;先放2个…

Unicode(UTF-8, UTF-16)令人混淆的概念

Unicode(UTF-8, UTF-16)令人混淆的概念 为啥需要Unicode 我们知道计算机其实挺笨的,它只认识0101这样的字符串,当然了我们看这样的01串时肯定会比较头晕的,所以很多时候为了描述简单都用十进制,十六进制,八进制表示.实际上都是等价的,没啥太多不一样.其他啥文字图片之类的其他东…

android优化最强软件,七款安卓手机优化软件推荐 为手机提速

启动项管理器设置七款安卓手机优化软件推荐 超频工具OverClock Widget希望提高手机运行速度&#xff0c;只是更改开机启动项是不够的&#xff0c;其实我们还可以通过超频让手机的运行速度飞起来。超频降频工具OverClock Widget是一款能对CPU进行超频或降频的桌面小部件&#xf…

UVA 10570 Meeting with Aliens

题意&#xff1a; N个外星人围成一桌坐下&#xff0c;有序的排列指N在N-1与N1中间&#xff0c;现在给出一个序列&#xff0c;问至少交换几次可以得到有序的序列。 分析&#xff1a; 复制一遍输入序列&#xff0c;放在原序列之后。相当于环。通过枚举&#xff0c;可以把最小交换…

【转】Android 4.3源码的下载和编译环境的安装及编译

原文网址&#xff1a;http://jingyan.baidu.com/article/c85b7a641200e0003bac95a3.html 告诉windows用户一个不好的消息&#xff0c;windows环境下没法编译android源码。用cygwin&#xff1f;不行&#xff0c;因为cygwin模拟的环境太简单&#xff0c;编译android源码需要好多工…

android关机分区卸载,Android关机重启流程(二)

一、回顾先回顾下上部分得分析&#xff0c;从最开始的PM.reboot()&#xff0c;经过层层调用&#xff0c;最终调用SystemProperties.set(“sys.powerctl”, “reboot,” reason);二、重启流程aosp/system/core/init/property_service.cppaosp/system/core/init/reboot.cppaosp/…

每天一道算法题(39)——含有重复字符的全排列

思路 (1)对于含有重复字符的全排列必须使用isSwap函数 (2)整体思路 a,交换当前子字符串(i----n-1)字符与子字符串后面的每一个位置的字符&#xff08;满足交换条件下&#xff09; b,子字符串位置后移(i1-----n)。递归处理子字符串 c,将a中的交换复原。 代码 #in…

android 初始化语言,Android Init Language(安卓初始化语言)

android源码学习目录了解Android init进程的都知道&#xff0c;启动 init进程之前会解析init.rc文件&#xff0c;init.rc是Android的配置文件脚本&#xff0c;它由一种被称为"Android初始化语言"--Android init Language 编写。1. android init language(简称 AIL)组…

使用JetBrains dotMemory 4.0分析内存

安装下载地址&#xff1a;http://www.jetbrains.com/profiler/ 1.在本地启动web应用后&#xff0c;打开dotMemory,附加进程 2.附加后会看到集中颜色得粗条&#xff0c;不断往左边走动&#xff0c;这是内存运行情况&#xff0c; 3.Get snapshot,抓取两次快照&#xff0c;等自动信…