PHP服务器到服务器的文件请求


PHP server to server file request

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

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

这是我的请求:

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

要强制下载,请添加

 header('Content-disposition: attachment');

但是请注意,它已经不在HTTP 1.1规范中了,请参阅HTTP响应标头中内容处理的使用第一个答案

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

如果您想从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);
?>

下载带有curl的文件,然后检查以下内容:http://php.net/function.readfile

它展示了如何强制下载。

已解决

我最后简单地重定向请求:

header("Location: $request");