2011-06-20 40 views
3

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

我已经试过cURL和file_get_contents,我已经以各种方式更改了内容标题,但是我仍然无法下载该文件。

这是我的要求:

$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); 
+0

什么是你的错误信息?在php.ini中启用'allow_url_fopen'吗? –

+0

您的意思是pdf在浏览器中显示,而不是下载? – Dutow

+0

不,我的意思是我看到pdf标签和不可读的字符。 – pasine

回答

1

解决

我最终通过简单地重定向与请求:

header("Location: $request"); 
1

没有你的代码我不知道你试过了什么,但你需要通过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); 
1

如果你想下载从你可以使用PHP的FTP服务器上的文件文件传输协议(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); 
?>