2014-07-14 34 views
0

例如:有一个提供文件下载的网站。网站和可下载文件位于不同的服务器上。当用户尝试下载文件时,文件服务器会改为发送文件。文件服务器在到达用户之前不应该首先将文件发送到网站的服务器,因为这会使用两倍的带宽。Apache/PHP可以从另一台服务器提供文件吗?

可以使用PHP直接从文件服务器提供文件吗?

注意:单个服务器设置可以简单地使用PHP手册中的以下代码。我需要将这些标题从文件服务器直接发送给用户。

<?php 
$file = 'monkey.gif'; 

if (file_exists($file)) 
{ 
    header('Content-Description: File Transfer'); 
    header('Content-Type: application/octet-stream'); 
    header('Content-Disposition: attachment; filename='.basename($file)); 
    header('Expires: 0'); 
    header('Cache-Control: must-revalidate'); 
    header('Pragma: public'); 
    header('Content-Length: ' . filesize($file)); 
    readfile($file); 
    exit; 
} 
?> 
+2

为什么不直接将用户重定向到文件服务器?例如:他点击了网站1上的一个按钮,将他重定向到:http://website2/files/foo.bar? –

+0

也许:http://stackoverflow.com/questions/6086231/transfer-from-server-server-client-without-download-to-server/6086311#6086311也http:// stackoverflow。COM /问题/ 10991443 /卷曲得到远程文件和力下载-AT-同一时间/ 10993094#10993094 –

回答

2

我看到几个可能的解决方案。

1)它是安装第二个服务器目录到第一台服务器在哪里php正在运行。因此,您将从安装的目录中获取文件并将其传递给用户。

2)它发送给用户而不是文件内容,但链接从另一台服务器下载。例如使用重定向

header("Location: http://2nd-server-ip.com/myfile.zip"); 
0

为什么不使用cURL?

<?php 

$file = 'monkey.gif'; 

if (file_exists($file)) { 
    $ch = curl_init(); 
    $timeout = 5; 
    $headers = array('Content-Description' => 'File Transfer', 
     'Content-Type' => 'application/octet-stream', 
     'Content-Disposition' => 'attachment; filename=' . basename($file), 
     'Expires' => FALSE, 
     'Cache-Control' => 'must-revalidate', 
     'Pragma' => 'public', 
     'Content-Length' => filesize($file)); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
    $data = curl_exec($ch); 
    curl_close($ch); 
    echo $data; 
} 
0

由于您打算通过PHP来做这个服务器端,我认为您可以以多种方式来实现。

一般来说操作是由三个阶段组成:

  1. 获得所需的资源

  2. 读入一个字符串(如果它足够小)

  3. 即成它通过一个输出流

diffe伦斯你正在寻找的是在第1阶段,为此,我可以找出以下替代现在:

  • 你的服务器和文件服务器共享至少是他们的文件系统,例如一部分与NFS。这样文件服务器就可以导出下载目录,并且您的web服务器的PHP脚本可以访问可供下载的资源,就像您正在弄清楚的一样;

  • 您的PHP脚本可以通过秘密(即服务器到服务器)身份验证(例如通过其他人正确建议的cURL functions)通过(S)FTP或HTTP(S)访问文件服务器所需的资源,以及作为第二步,为它服务。

希望这会有所帮助。

相关问题