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;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远程下载文件的更多相关文章
- PHP实现远程下载文件到本地
PHP实现远程下载文件到本地 投稿:hebedich 字体:[增加 减小] 类型:转载 经常写采集器发布接口需要使用到远程附件的功能,所以自己写了一个PHP远程下载文件到本地的函数,一般情况下已经 ...
- PHP CURL实现远程下载文件到本地
<?php //$result=httpcopy('http://www.phpernote.com/image/logo.gif'); echo '<pre>';print_r($ ...
- android命令模式IntentService 远程下载文件
服务可用在一下情景: 1,用户离开activity后,仍需要继续工作,例如从网络下载文件,播放音乐. 2,无论activity出现或离开,都需要持续工作,例如网络聊天应用. 3,连接网络服务,正在使用 ...
- Java远程下载文件到本地(http协议和ssh2协议)
Java中java.io包为我们提供了输入流和输出流,对文件的读写基本上都依赖于这些封装好的关于流的类中来实现.前段时间遇到了以下两种需求: 1.与某系统对接,每天获取最新的图片并显示在前端页面.该系 ...
- linux远程下载文件 的两种方法之 ftp命令和scp命令
ftp命令: 服务器有安装ftp Server,另外一台linux可以使用ftp的client程序来进行文件的拷贝读取和下载. 1. 连接ftp服务器 格式:ftp [hostname| ip-ad ...
- java远程下载文件到本地
方法一 ** * 下载远程文件并保存到本地 * * @param remoteFilePath-远程文件路径 * @param localFilePath-本地文件路径(带文件名) */ public ...
- Xshell 本地上传、远程下载文件
1.Xshell登录工具在创建会话的时候,点击最下面的ZMODEM,可以填写下载的路径和加载的路径:2个路径可以一样也可以不一样: 在下载的时候可以下载到相应的路径去.(我设置的是下载前始终询问) 2 ...
- paramiko之ssh登录,执行cmd,下载文件
一.paramiko远程登录及执行命令 1.1:exec_command(cmd)远程执行命令 client = paramiko.SSHClient() client.set_missing_hos ...
- powershell 远程下载并执行
远程下载文件到本地并执行cmd.exe /c powershell.exe -ExecutionPolicy bypass -noprofile -windowstyle hidden (new-ob ...
随机推荐
- centos7的时间同步机制:chrony使用
配置时间同步方法如下: 1.安装chrony时间同步服务(系统默认安装) #yum install chrony 可以先查询一下是否有安装: [root@localhost etc]# rpm -qa ...
- (原创)lightgbm 一些错误情况处理
1.做多分类问题时候(mutticlass),如果遇到 lightgbm.basic.LightGBMError: b'Number of classes should be specified an ...
- context:exclude-filter spring事宜【经典-转】
context:exclude-filter spring事务 如果带上事务,那么用annotation方式的事务注解和bean配置,事务会失效,要将service bean配置到xml文件中才行. ...
- TensorFlow笔记一 :测试和TFboard使用
一 .第一个TF python3.6 import tensorflow as tf x=2 y=3 node1=tf.add(x,y,name='node1') node2=tf.multiply ...
- 负载均衡情况下获取真实ip的方法
公司用了硬件负载均衡,最近发现日志中的用户ip都为负载均衡器的ip,业务需要所以要改为用户真实ip,下面记录一下! 1.打开文件:/etc/httpd/conf/httd.conf. 2.在文件中查找 ...
- 2016年蓝桥杯C/C++B组
第一次參加蓝桥杯.也是有非常多感触的,时间全然不够写最后一题... 最后一题没做...还有全排序非常重要... 1. 煤球数目 有一堆煤球,堆成三角棱锥形.详细: 第一层放1个, 第二层3个(排列成三 ...
- 以前整理的网络上免费API接口
以前整理的一些免费的API接口,具体是否好用还需要时间测试,但是先分享给大家. 天气接口 聚合数据: http://op.juhe.cn/onebox/weather/query 用例 官方文档 来源 ...
- apue学习笔记(第十章 信号)
本章先对信号机制进行综述,并说明每种信号的一般用法. 信号概念 每个信号都有一个名字,这些名字都以3个字符SIG开头.在头文件<signal.h>中,信号名都被定义为正整形常量. 在某个信 ...
- 【Excle数据透视】如何在数据透视表字段列表中显示更多的字段
创建完数据透视表之后,由于字段太多,在列表中没有完全显示 解决方案 通过"字段节和区域节并排"功能来显示更多字段 修改后结果 字段已经完全显示出来了! "字段节和区域节层 ...
- Mysql 5.7.18 利用 MySQL proxies_priv(模拟角色)实现类似用户组管理
利用 MySQL proxies_priv(模拟角色)实现类似用户组管理 角色(Role)可以用来批量管理用户,同一个角色下的用户,拥有相同的权限. MySQL5.7.X以后可以模拟角色(Role)的 ...