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 ...
随机推荐
- struts2拦截器实现session超时返回登录页面(iframe下跳转到其父页面)
需求:session超时时,返回登录页面,由于页面嵌套在iframe下,因此要跳转到登录页面的父页面,但是首页,登录页面等不需要进行跳转 实现: java文件:SessionIterceptor.ja ...
- TypeError at /post/ render_to_response() got an unexpected keyword argument 'context_instance'
Exception Type: TypeError at /post/ Exception Value: render_to_response() got an unexpected keyword ...
- su、sudo、sudo su、sudo -i的用法和区别
sudo : 暂时切换到超级用户模式以执行超级用户权限,提示输入密码时该密码为当前用户的密码,而不是超级账户的密码.不过有时间限制,Ubuntu默认为一次时长15分钟.su : 切换到某某用户模式,提 ...
- java 环境变量配置 Mac
大家在windows里面配置JDK环境变量很容易,但是如果要在mac里面配置JDK环境变量和windows里面有所不同,具体如下: 第一: mac OS里面自带jdk,不过是1.6的版本,现在很多人使 ...
- 【MVC2】发布到IIS7.5上后Session为null
MVC2代码「Session.IsNewSession」在VS中可以正常执行,发布到IIS7.5上之后Session为null导致出错. if (Session.IsNewSession) { ... ...
- C++中的static关键字的总结(转)
C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static.前者应用于普通变量和函数,不涉及类:后者主要说明static在类中的作用. 1.面向过程设计中的st ...
- UNP学习笔记(第三十章 客户/服务器程序设计范式)
TCP测试用客户程序 #include "unp.h" #define MAXN 16384 /* max # bytes to request from server */ in ...
- Asp 解析 XML并分页显示
Asp 解析 XML并分页显示 Asp 解析 XML并分页显示,演示样例源代码例如以下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Tr ...
- UDP最大传输字节
每个包最大可携带字节长度:65507个byte. 封装成 IP 后,大小超出 PMTU 的分组将可能被 fragmented. 如果设置了 Don't Frag,超出 PMTU 的分组将不能被发送. ...
- 七款Debug工具推荐:iOS开发必备的调试利器
历时数周或数月开发出来了应用或游戏.可为什么体验不流畅?怎么能查出当中的纰漏?这些须要调试诊断工具从旁协助.调试是开发过程中不可缺少的重要一环.本文会列举几个比較有效的调试诊断工具,能够帮助你寻根究底 ...