PHP代码实现远程下载文件到本地的函数

经常写采集器发布接口需要使用到远程附件的功能,所以自己写了一个PHP远程下载文件到本地的函数,一般情况下已经够用了,如果服务器支持CURL函数,程序则会优先选择CURL,因为测试结果表明CURL的响应时间及资源占用率比file_get_contents小得多;如果大家有好的建议及改进方案,欢迎留言给我哦!

<?php
echo httpcopy("http://www.baidu.com/img/baidu_sylogo1.gif");

function httpcopy($url, $file="", $timeout=60) {
$file = empty($file) ? pathinfo($url,PATHINFO_BASENAME) : $file;
$dir = pathinfo($file,PATHINFO_DIRNAME);
!is_dir($dir) && @mkdir($dir,0755,true);
$url = str_replace(" ","%20",$url);

if(function_exists('curl_init')) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$temp = curl_exec($ch);
if(@file_put_contents($file, $temp) && !curl_error($ch)) {
return $file;
} else {
return false;
}
} else {
$opts = array(
"http"=>array(
"method"=>"GET",
"header"=>"",
"timeout"=>$timeout)
);
$context = stream_context_create($opts);
if(@copy($url, $file, $context)) {
//$http_response_header
return $file;
} else {
return false;
}
}
}
?>

分类:默认分类 时间:2012-09-19 人气:2
本文关键词:
分享到:

相关文章

  • 确保php应用程序的安全-不能违反的四条安全规则 2012-01-01

    规则 1:绝不要信任外部数据或输入 关于 Web 应用程序安全性,必须认识到的第一件事是不应该信任外部数据。外部数据(outside data) 包括不是由程序员在 PHP 代码中直接输入的任何数据。在采取措施确保安全之前,来自任何其他来源(比如 GET 变量、表单 POST、数据库、配置文件、会话变量或 cookie)的任何数据都是不可信任的。 例如,下面的数据元素可以被认为是安全的,因为它们是在 PHP 中设置的。 清单 1. 安全无暇的代码 <?php $myUsername = t

  • 混血儿新生命--Java+PHP整合 2012-01-01

    最近才有时间处理此事,将此设想应用到现实应用程序中。 下面从两个方面讲解如何开发与发布。 示例:讲解java+php 开发模式,以菜单管理为例。 示例如下: 一:java 结构代码 java开发结构图如下: java 程序代码请看在下面上传文件,由于上传文件不能大于2M,所以用到的lib 没有上传,如需求,可留邮箱给我,我发给大家。 注:PHP和Java各有其语言内部定义的数据类型,当PHP数据传送到Java,或Java数据传送到PHP时,LAJP在内部自动地、准确地对他们进行转换,程序员无需进

  • PHP JSON_DECODE/JSON_ENCODE中文内容为NULL或乱码 2012-01-02

    可能用很多朋友使用json数据时利用php自带的函数JSON_DECODE/JSON_ENCODE处理中文内容时会碰到出现NULL或乱码问题,下面我来给大家介绍为什么会出现这样的问题。 例 代码如下 复制代码 <?php $json = '{"a":1,"b":2,"c":3,"d":4,"e":5}'; var_dump(json_decode($json)); var_dump(json_decode($json, true)); ?> 输出结果 object(stdClass)

  • Linux系统中自带Mysql.Apache.Php卸载 2012-01-04

    卸载步骤如下: 卸载Mysql [[email protected] ~]# rpm -qa|grep mysql mod_auth_mysql-2.6.1-2.2 php-mysql-4.3.9-3.15 mysql-devel-4.1.20-1.RHEL4.1 mysql-4.1.20-1.RHEL4.1 mysqlclient10-3.23.58-4.RHEL4.1 libdbi-dbd-mysql-0.6.5-10.RHEL4.1 说明:rpm –qa | grep mysql 命令是为了把m

  • php云两处SQL二次注入 2012-01-04

    php云两处二次注入 最新版。两个注入点。顺带一个绕过waf的小技巧。 第一处:/member/model/index.class.php 39行 function index_action() { $this->public_action(); $this->member_satic(); $this->com_cache(); $resume = $this->obj->DB_select_once("resume","`uid`='".$this->ui

  • ubuntu系统中安装redis的方法以及PHP安装redis扩展.CI框架sess使用redis的方法 2012-01-04

    再一次被网上那些教程误导后决定自己写一个。真心被那些奇怪的教程误导了好几次,之前研究其它东西的时候也是。蛋疼啊。 安装redis 直接用apt-get命令即可 sudo apt-get install redis-server 安装的时候会询问你一个东西,输入Y就行。 安装完后会自动启动redis的服务,可以通过下面命令来查看进程是否已经启动。 ps -aux|grep redis 然后检查下redis服务的状态,看看是不是runing。 redis-server is running 安装PH

  • .user.ini文件构成的PHP后门 2012-01-09

    0x00 背景 这个估计很多同学看了不屑,认为是烂大街的东西了: .htaccess文件构成的PHP后门 那么我来个新的吧:.user.ini。它比.htaccess用的更广,不管是nginx/apache/IIS,只要是以fastcgi运行的php都可以用这个方法。我的nginx服务器全部是fpm/fastcgi,我的IIS php5.3以上的全部用的fastcgi/cgi,我win下的apache上也用的fcgi,可谓很广,不像.htaccess有局限性。 0x01 .user.ini 那么

  • php设置北京时间函数date_default_timezone_set() 2012-01-09

    php教程设置北京时间函数date_default_timezone_set() 定义和用法 date_default_timezone_set() 函数设置用在脚本中所有日期/时间函数的默认时区。 语法 date_default_timezone_set(timezone) <?php $now = time(); date_default_timezone_set('america/new york'); print date('c', $now); date_default_time

  • php正则表达式子模式的反向引用学习笔记 2012-01-09

    本文章给大家分享一篇php正则表达式子模式的反向引用学习笔记,希望此教程对各位朋友有帮助哦。 需要用正则表达式获取字符串的标题。标题标签是h1~h6。 使用正则表达式:"@<h([1-6])>(.*?)</h\\1>@"或者'<h([1-6])>(.*?)</h\1>@'。使用了@作为分隔符,注意单双引号的差别\\1与\1. 例1 代码如下 复制代码 <?php $str='<h1>php php php php php php1

  • php 表单提交长文章数据丢失问题解决方法 2012-01-10

    数据丢失对于小编来讲是个头痛的问题了,因为小编碰到表单提交大量数据发生丢失问题也是这几天了,但不是时尚而有时会丢失了,这个问题非常难解决,下面整理了一些解决办法,希望可以帮助到各位。 网上找了一堆,php.ini 的post_max_size和upload_max_filesize都设置了很大的值,没用,nginx的client_max_body_size 500m;加到了那么大的值,也没用。 最后终于google到办法:原来PHP从5.3.9开始增加一个变量 max_input_vars 用来

Copyright (C) quwantang.com, All Rights Reserved.

趣玩堂 版权所有 京ICP备15002868号

processed in 0.075 (s). 10 q(s)