Итак, у меня есть плагин WordPress, который создает пользовательскую страницу администратора, например: http://localhost/wp/wp-admin/admin.php?page=download_file
На этой странице есть элемент кнопки, который при нажатии вызывает следующую функцию:
function downloadFile(){
window.location.href += '&download';
}
И мой php настроен так, что если в URL присутствует атрибут download
, он вернет файл.
function download_file()
{
global $pagenow;
if ($pagenow === 'admin.php' && $_REQUEST['page'] === 'download_file&download') {
$fichero = 'file.txt';
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=$fileName");
header("Content-Transfer-Encoding: binary");
header("Content-Length: " . filesize($fichero));
@readfile($fichero);
}
}
Я пытаюсь понять, почему URL-адрес возвращается к нормальному состоянию, когда это происходит.(Он остается как http://localhost/wp/wp-admin/admin.php?page=download_file, без атрибута download
).Если вместо того, чтобы возвращать файл, я отображаю что-либо еще, тогда в URL будет сохранен атрибут download
(http://localhost/wp/wp-admin/admin.php?page=download_file&download)
. По-разному ли реагирует браузер, когда запрос к URL возвращает файл?
Как я могу воспользоваться этим поведением, чтобы избежать изменения открытой страницы, если позже я реализую условие для возврата файла, и это условие не будет выполнено, означающее, что URL ничего не вернет? В этом сценарии я быкак URL, чтобы остаться как http://localhost/wp/wp-admin/admin.php?page=download_file, без атрибута, как это происходит сейчас.