【问题标题】:PHP server to server file requestPHP服务器到服务器文件请求
【发布时间】:2011-09-19 02:06:38
【问题描述】:

我在服务器 A 上有 script-1,用户在其中请求文件。
我在服务器 B(文件存储库)上有 script-2,我在其中检查用户是否可以访问它并返回正确的文件(我正在使用智能文件下载http://www.zubrag.com/scripts/download.php)。

我已经尝试过 cURL 和 file_get_contents,我已经以各种方式更改了 Content Header,但我仍然无法下载文件。

这是我的要求:

$request = "http://mysite.com/download.php?f=test.pdf";

而且效果很好。 我应该在 script-1 中调用什么来强制下载文件?

我的一些尝试

这可行,但我不知道如何处理未经授权或损坏的下载

header('Content-type: application/pdf');

$handle = fopen($request, "r");

if ($handle) {
    while (!feof($handle)) {
        $buffer = fgets($handle, 4096);
        echo $buffer;
    }
    fclose($handle);
}

这会直接在浏览器中打印 pdf 代码(不是文本)(我认为这是标题问题):

$c = curl_init();
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($c, CURLOPT_URL, $request);
$contents = curl_exec($c);
curl_close($c);

if ($contents) return $contents;
    else return FALSE;

这会生成一个白页

file_get_contents($request);

【问题讨论】:

  • 您的错误信息是什么? php.ini 中是否启用了allow_url_fopen
  • 你的意思是pdf显示在浏览器中而不是下载?
  • 不,我的意思是我看到了 pdf 标签和不可读的字符。

标签: php


【解决方案1】:

已解决

我通过简单地重定向请求结束:

header("Location: $request");

【讨论】:

    【解决方案2】:

    使用 curl 下载文件,然后检查:http://php.net/function.readfile

    它显示了如何强制下载。

    【讨论】:

      【解决方案3】:

      如果您想从 FTP 服务器下载文件,您可以使用 php 文件传输协议 (FTP) 扩展。请找到以下代码:

      <?php
      $SERVER_ADDRESS="";
      $SERVER_USERNAME="";
      $SERVER_PASSWORD="";
      $conn_id = ftp_connect($SERVER_ADDRESS);
      
      // login with username and password
      $login_result = ftp_login($conn_id, $SERVER_USERNAME, $SERVER_PASSWORD);
      
      $server_file="test.pdf" //FTP server file path 
      $local_file = "new.pdf"; //Local server file path 
      
      ##----- DOWNLOAD $SERVER_FILE AND SAVE IT TO $LOCAL_FILE--------##
      if (ftp_get($conn_id, $local_file, $server_file, FTP_BINARY)) {
          echo "Successfully written to $local_file\n";
      } else {
          echo "There was a problem\n";
      }
      
      ftp_close($conn_id);
      ?>
      

      【讨论】:

        【解决方案4】:

        要强制下载,添加

         header('Content-disposition: attachment');
        

        但请注意,它不再包含在 HTTP 1.1 规范中,请参阅Uses of content-disposition in an HTTP response header 第一个答案

        【讨论】:

          【解决方案5】:

          如果没有您的代码,我不知道您尝试了什么,但是您需要通过 cURL 获取文件的内容,然后将其保存到您的服务器。比如……

          $url = 'http://website.com/file.pdf';
          $path = '/tmp/file.pdf';
          
          $ch = curl_init($url);
          curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
          
          $contents = curl_exec($ch);
          curl_close($ch);
          
          file_put_contents($path, $contents);
          

          【讨论】:

            猜你喜欢
            • 2021-03-20
            • 2015-09-01
            • 1970-01-01
            • 2015-07-24
            • 1970-01-01
            • 2016-02-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多