Я загружаю файл с другого сервера. Я хочу направить этот файл своим пользователям, а не сохранять его на моем сервере.
Другими словами, передайте им дескриптор файла, чтобы он просто проходил через мой сервер и сохранял их на своей машине. Как я могу это сделать? У меня это до сих пор:
$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']]);