PHP实现下载远程资源到本地服务器(转/略改进)

编辑:逐风博客 2014-09-04 00:00:00 阅读热度:0

如何通过php代码实现将远程下载文件到服务器上呢?
逐风博客上网搜寻了下,找到一个还不错的自定义函数来处理下载远程资源,自己也略略的改动了些些,让其下载资源可以存放到我们服务器上的指定位置中;

以下是实现代码:

/**
 * 下载远程资源到服务器上(需要php.ini开启curl模块)
 * @param string $url     远程资源下载地址
 * @param string $file    (可选)设置存储资源名称,默认取远程资源文件名
 * @param string $fileDir (可选)下载文件存储位置
 * @param int    $timeout (可选)设置最大延续多少秒
 * @return mixed
 */
function http_dow_local($url, $file = "", $fileDir = '', $timeout = 60) {
    $file = empty($file) ? pathinfo($url, PATHINFO_BASENAME) : $file;
    $fileDir = empty($fileDir) ? APP_DATA . '/' : $fileDir;
    $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 (preg_match("/404/", $temp)) {
            return false;
        }
        if (@file_put_contents($fileDir . $file, $temp) && !curl_error($ch)) {
            return $file;
        } else {
            return false;
        }
    } else {
        halt('curl模块未开启');
        // 以下注释代码,为当curl_init不被环境支持的情况下所采用的兼容模式
        /*
          $opts = array(
          "http" => array(
          "method" => "GET",
          "header" => "",
          "timeout" => $timeout)
          );
          $context = stream_context_create($opts);
          if (@copy($url, $fileDir.$file, $context)) {
          //$http_response_header
          return $file;
          } else {
          return false;
          }
         */
    }
}
如有不足或者不懂的地方,欢迎大家给逐风博客留言!(*^__^*)

PHP冒泡排序介绍及源代码实例
PHP实现使用淘宝IP库获取用户ip地理位置
逐风开发在线 逐风

懒惰:是这样一种品质,它使得你花大力气去避免消耗过多的精力。它敦促你写出节省体力的程序,同时别人也能利用它们。为此你会写出完善的文档,以免别人问你太多问题。