【问题标题】:Copy file from remote server using PHP over HTTP使用 PHP over HTTP 从远程服务器复制文件
【发布时间】:2010-10-13 16:53:37
【问题描述】:

我想通过 http 使用 PHP 从这种格式的链接复制文件

http://myserver.com/?id=1234

如果我打开链接,就会开始下载文件...

所以我假设服务器重定向到一个 .mp3 文件开始下载。

那么如何将文件从远程服务器复制/下载到我的服务器(本地主机)?

【问题讨论】:

  • 你能告诉我们你是如何做到这一点的吗? (代码)

标签: php


【解决方案1】:

举个例子来说明 Victor 用 cURL 谈论的内容:

$options = array(
  CURLOPT_FILE => '/local/path/for/file.mp3',
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_URL => 'http://myserver.com/?id=1234',

);

$ch = curl_init();
curl_setopt_array($ch, $options);
curl_exec($ch);

【讨论】:

  • 正如我在您的示例中看到的那样,设置了 .mp3 文件的路径,但我不知道 .mp3 文件的 url!
  • 这也是你要下载的路径……你不需要知道远程服务器上文件的路径,只要url返回文件即可。
  • +1 教我curl_setopt_array()!以前从未听说过。
  • CURLOPT_FILE 必须是文件句柄而不是文件名
【解决方案2】:

我在这里假设远程服务器通过 HTTP 发送完整的文件。您可以使用诸如curl 之类的库来发送HTTP 请求并将接收到的数据存储为文件(使用CURLOPT_FILE)。

如果您的本地 PHP 服务器配置正确,您还可以使用copy 从远程 URL 复制到本地路径。

【讨论】:

  • 你能给我提供使用这两种方法的例子吗?
  • 对于第二种方法,我链接到的页面上有一个示例。我心情很好,所以我会提供一个直接链接 (fr.php.net/manual/en/function.copy.php#83955),但您可能需要提高自己的文档技能。
【解决方案3】:

$handle = fopen("http://www.example.com/", "rb"); $内容 = ''; 而 (!feof($handle)) { $contents .= fread($handle, 8192); } fclose($handle);

来自

http://php.net/manual/en/function.fread.php

【讨论】:

    【解决方案4】:

    尝试使用通知回调(在此处阅读更多信息http://www.php.net/manual/function.stream-notification-callback.php

    例如如果你想复制,你可以这样做:

    function stream_notification_callback($notification_code, $severity, $message, $message_code, $bytes_transferred, $bytes_max)
    {
      if($notification_code == STREAM_NOTIFY_PROGRESS)
      {
        // save $bytes_transferred and $bytes_max to file or database
      }
    }
    
    
    $ctx = stream_context_create();
    stream_context_set_params($ctx, array("notification" => "stream_notification_callback"));
    copy($remote_url,$Local_target,$ctx); 
    

    另一个 PHP 文件可以读取保存的 $bytes_transferred 和 $bytes_max 并显示一个漂亮的进度条。

    【讨论】:

      猜你喜欢
      • 2022-01-17
      • 2010-10-28
      • 2022-11-18
      • 2012-04-08
      • 2018-10-06
      • 2012-05-29
      • 2013-12-03
      • 1970-01-01
      • 2016-04-19
      相关资源
      最近更新 更多