Начните загрузку с PHP, не раскрывая URL файла

Я хочу начать загрузку с помощью PHP, но я не хочу, чтобы пользователь знал URL загружаемого файла.

Я прочитал много ответов в StackOverflow, но все, что я нашел, показывает URL-адрес загруженного файла.

Вот что я хочу сделать, например:

Это файл PHP, пользователь увидит этот URL: http://website.com/download.php

Это URL загруженного файла, я не хочу, чтобы пользователь видел этот URL: http://website.com/file.zip

Есть какой-либо способ сделать это?

0

Решение

Это зависит от того, что вы хотите скрыть. URL когда-либо будет показан пользователю, но если вы не хотите, чтобы пользователь знал, какие параметры (или значения) отправляют, вы можете закодировать их и отправить их с помощью запроса POST через AJAX.

0

Другие решения

Попробуй это:

    $file = './file.zip';
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename($file).'"'); //<<< Note the " " surrounding the file name
header('Content-Transfer-Encoding: binary');
header('Connection: Keep-Alive');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
0

Перед рендерингом страницы сохраните URL-адрес загрузки (например, в сеансе) и сгенерируйте некоторый уникальный хеш, который позже вы можете использовать, чтобы определить, какой файл следует загрузить:

$SESSION['file_download']['hash'] = md5(time) . '_' . $userId; // lets say it equals to 23afg67_3425
$SESSION['file_download']['file_location'] = 'real/path/to/file';

При рендеринге показывать пользователю следующую ссылку для скачивания:

http://yourdomain.com/download_file.php?hash=23afg67_3425

Если пользователь щелкает его, вы отправляете файл пользователю, но допускаете это только один раз или во время текущего сеанса. Под этим я подразумеваю, что вы должны создать новый исходный файл с именем download_file.php со следующим содержимым:

if ($_GET['hash'] == $SESSION['file_download']['hash']) {
// send file to user by outputing the file data to browser
$file = $SESSION['file_download']['file_location'];

header('Content-Description: File Transfer')
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
readfile($file);

// optionaly reset $SESSION['file_hash'] so that user can not download again during current session, otherwise the download with generated link will be valid until user session expires (user closes the browser)
} else {
// display error message or something
}
0
По вопросам рекламы [email protected]