使用PHP脚本下载远程文件

原创 2007年09月14日 15:48:00

<?php
$fp fsockopen("www.example.com"80$errno$errstr30);
if (!
$fp
) {
    echo 
"$errstr ($errno)<br />/n"
;
} else {
    
$out "GET / HTTP/1.1/r/n"
;
    
$out .= "Host: www.example.com/r/n"
;
    
$out .= "Connection: Close/r/n/r/n"
;

    
fwrite($fp$out
);
    while (!
feof($fp
)) {
        echo 
fgets($fp128
);
    }
    
fclose($fp
);
}
?>

 

 

我们为了简单起见,使用fopen直接访问远程文件来达到目的,同事又能够访问http,也能访问ftp,比较合适。当然,如果按照上面的思路来说,也可以使用ftp的函数库来实现。

我们使用fopen函数来完成我们的工作,实现了如下代码:  
 



#! /usr/bin/php
<?php
error_reporting
(0);
set_time_limit(0);

//无参数则给出提示
if ($argc 2){
    echo 
"Usage: "$argv[0] ." URL [Destination]/n/n";
    exit();
}

//设置获取基本变量
$url $argv[1];
$save_path $argv[2] ? $argv[2] : "./";
$file_name array_pop(explode("/"$url));
$localfile $save_path $file_name;

//检查变量
if (!check_url($url)){
    exit(
"Error: URL "$url ." invalid./n/n");
}
if (
file_exists($localfile)){
    exit(
"Error: local file "$localfile ." exists./n/n");
}

//打开远程文件
$fp fopen($url"rb");
if (!
$fp){
    exit(
"Error: Download "$url ." failed./n/n");
}

//打开本地文件
$sp fopen($localfile"wb");
if (!
$sp){
    exit(
"Error: Open local file "$localfile ." failed./n/n");
}

//下载远程文件
echo "Downloading, please waiting.../n/n";
while (!
feof($fp)){
    
$tmpfile .= fread($fp1024);
}

//保存文件到本地
fwrite($sp$tmpfile);
fclose($fp);
fclose($sp);
echo 
"Download file "$file_name ." succeed!/n/n";

/* 检查URL合法性函数 */
function check_url($url){
    return 
preg_match("/^(http|ftp)(:////)([a-zA-Z0-9-_]+[/.//]+[/w/-_//]+.*)+$/i"$url);    
}

?> 
 



 我们把以上代码保存为 download.php 文件,在Linux/Unix下记得要加上可执行属性:
chmod +x download.php

另外,PHP脚本引擎的路径必须是 /usr/bin/php ,如果不是,请自行修改第一行为实际的PHP引擎路径,比如:
#! /usr/local/php/bin/php

 
使用上面的脚本来下载文件:
download.php   远程文件  保存路径

如把Google Talk程序下载到我们的 /tmp 目录下:
download.php  http://dl.google.com/googletalk/googletalk-setup.exe     /tmp/

如果不出错,等待一会就能够在 /tmp/ 目录下看到 googletalk-setup.exe 文件。

能够改进的就是支持更多协议、需要验证的能够输入用户名密码、有下载进度条。至于断点续传和多线程对于PHP来说还不太现实,有兴趣的可以自己加深一步。

PS: 我另外发现一个更强的HTTP下载类,是dedeCMS的作者IT柏拉图写的,URL:
http://prato.bokele.com/?CH=749&ViewID=15272
 

远程运行shell脚本

ssh执行远程操作 命令格式 复制代码 代码如下:ssh -p $port $user@$p 'cmd' $port : ssh连接端口号 $user: ssh连接用户名 $ip:ssh...
  • pizipeng2
  • pizipeng2
  • 2016年08月12日 14:18
  • 1047

php本地文件包含&远程文件包含

本地文件包含&远程文件包含
  • think_ycx
  • think_ycx
  • 2016年04月07日 12:49
  • 2766

python写的批量操作远程主机脚本(命令执行,上传、下载文件)

python写的批量操作远程主机脚本(命令执行,上传、下载文件) 2011-04-28 12:53:44 标签:服务器 脚本 ssh python 集中化管理 原创作品,允许转载...
  • wangzhaopeng0316
  • wangzhaopeng0316
  • 2013年02月05日 21:54
  • 1144

Java实现远程ssh执行shell脚本对文件打包下载

public class SSHsftp {private static Vector stdout; public static Session getSession(String host,St...
  • READIgg
  • READIgg
  • 2017年01月18日 22:53
  • 825

PHP 写入文件、读取文件、获取远程文件

写入文件
  • u010737354
  • u010737354
  • 2016年09月09日 15:26
  • 2276

PHP 下载远程文件

PHP 下载远程文件类,支持断点续传下载,代码内含有具体的调用说明。程序主要是使用 HTTP 协议下载文件,HTTP1.1协议必须指定文档结束后关闭链接,否则读取文档时无法使用feof判断结束,可以有...
  • stonesharp
  • stonesharp
  • 2013年05月06日 23:17
  • 652

linux下使用脚本自动化远程备份MySQL数据库

通常情况下、mysql都需要备份,备份的方法有很多种。下面是我用脚本配合计划任务完成的自动备份远程的数据库。...
  • wyhappy612
  • wyhappy612
  • 2017年06月02日 17:29
  • 532

php 支持断点续传的文件下载类

php 支持断点续传,主要依靠HTTP协议中 header HTTP_RANGE实现。 HTTP断点续传原理 Http头 Range、Content-Range() HTTP头中一般断点下载...
  • fdipzone
  • fdipzone
  • 2013年06月30日 17:27
  • 27048

python脚本使用SFTP下载远程计算机文件

Using the pexpect module More info about pexpect is at [http://www.noah.org/wiki/pexpect]. #!/usr/b...
  • yangbingzhou
  • yangbingzhou
  • 2015年10月14日 11:46
  • 1875

PHP 远程文件包含的介绍和代码防御

0x01 介绍        PHP 应用程序接收到外部输入,但在“require”、“include”或类似函数中使用该输入之前对其进行了错误的限制。在 PHP 的特定版本和配置中,这样就使攻击者...
  • qq_29277155
  • qq_29277155
  • 2016年10月07日 20:10
  • 817
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用PHP脚本下载远程文件
举报原因:
原因补充:

(最多只允许输入30个字)