PHP Pass File Handle для пользователя, чтобы файлы загружались и сохранялись на их машине

Я загружаю файл с другого сервера. Я хочу направить этот файл своим пользователям, а не сохранять его на моем сервере.

Другими словами, передайте им дескриптор файла, чтобы он просто проходил через мой сервер и сохранял их на своей машине. Как я могу это сделать? У меня это до сих пор:

$handle = fopen($_GET['fileURL'], 'r'); $filename = stream_get_contents($handle); 

Как это сделать для пользователя, возможно, используя заголовки?

Спасибо за любую помощь и руководство.

РЕДАКТИРОВАТЬ

У меня есть заголовки:

 header("Pragma: public"); // required header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Cache-Control: private",false); header("Content-Type: $ctype"); header("Content-Disposition: attachment; filename=\"".basename($filename)."\";" ); header("Content-Transfer-Encoding: binary"); header("Content-Length: ".filesize($filename)); readfile("$filename"); 

Это просто, что он не подталкивает заголовки. Я получаю пустую страницу примерно через 15 секунд, которая выглядит так, как будто она загружает файл, но не дает его мне.

Я хочу, чтобы скрипт немедленно отправил заголовки пользователю в виде потока. Выход();

Вы можете попробовать это

 $filetype = mime_content_type($filename); header('Content-type: '.$filetype); header('Content-Disposition: attachment; filename="'.$filename.'"'); 

UPDATE для вашего EDIT:

У вас есть ошибки отключены, так как это звучит, как заголовки уже отправили ошибку?

 error_reporting(E_ALL | E_STRICT); 

Вам не нужно использовать fopen () при использовании readfile ();

Просто укажите имя файла внутри файла readfile () следующим образом:

 readfile($_GET['fileUrl']); 

Хотя это очень опасно, так как пользователь может указать любой файл на вашем файловом сервере. Если у вас есть только несколько файлов, которые вы хотите, чтобы кто-то мог загрузить, возможно, их следует хранить в массиве (или в базе данных, предпочтительно)

Вот пример массива:

 $files = array('file1.jpg', 'file2.png', 'file3.pdf'); //assume $_GET['file_id'] == 0, 1 or 2 if (file_exists($files[$_GET['file_id']])) readfile($files[$_GET['file_id']]);