2011-06-20 103 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); 
?>