Как остаться на старой странице вместо переадресации?

Здравствуйте. Есть следующий код: <br/> <br/> <pre><code>$final_url = $base_url . 'public_key=' . urlencode($link);
  • 8 апреля 2026 г. 11:00
Ответы на вопрос 3
Нужно уточнить, что вы сейчас делаете — браузер переадресовывается через header("Location: ...") или через ссылку/JS? Ниже несколько вариантов, как «вызвать» внешнюю ссылку, но остаться на той же странице.

1) Серверный запрос (PHP, никаких переходов у пользователя)
- если хотите просто получить результат запроса по $final_url на сервере и дальше обработать/показать его — используйте cURL или file_get_contents. Браузер при этом останется на той же странице.

Пример с cURL:
```
$final_url = $base_url . 'public_key=' . urlencode($link);

$ch = curl_init($final_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // при необходимости следовать редиректам
$response = curl_exec($ch);
$err = curl_error($ch);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($response === false) {
    // обработка ошибки
    echo "Ошибка: $err";
} else {
    // используйте $response, но пользователь остаётся на той же странице
    echo $response;
}
```

Если allow_url_fopen включён, можно проще:
```
$response = file_get_contents($final_url);
```

2) Вызвать URL с клиентской стороны (AJAX) — без перехода
- если хотите, чтобы браузер асинхронно отправил запрос и остался на странице, используйте fetch / XMLHttpRequest:

Пример (JS fetch):
```
fetch('<?php echo $final_url; ?>')
  .then(res => res.text())
  .then(text => {
    console.log(text); // обработка ответа
  })
  .catch(err => console.error(err));
```

3) Открыть в новой вкладке/окне (если нужно показать страницу пользователю, но не уводить с текущей)
- обычная ссылка с target="_blank" или window.open:
```
echo '<a href="'.$final_url.'" target="_blank">Открыть</a>';
// или
echo '<button onclick="window.open(\''. $final_url .'\')">Открыть в новом окне</button>';
```

4) Встраивание в iframe
- можно загрузить внешний URL в скрытый/видимый iframe, тогда основная страница не покинется.

Важно:
- Если вы сейчас используете header("Location: $final_url"); — это и есть перенаправление. Чтобы «остаться», просто не вызывать header() и вместо этого применить один из подходов выше.
- Для серверных запросов учитывайте CORS/политику API и возможные ограничения у удалённого сервера (авторизация, rate limit и т.д.).

Если напишите, какой код сейчас делает редирект (например header(...) или JS), и что именно вы хотите получить от $final_url (получить HTML, JSON, пробросить пользователя в отдельной вкладке и т.п.), дам точный пример под ваш случай.
Вроде относительно правильный подход - создать ссылку с атрибутом download и вызвать по ней клик, типа такого: <br/> <pre><code class="javascript">const a = document.createElement('a');

a.href = url;
a.download = 'data.json';  // нужное имя файла
a.click();</code></pre>
По коду у вас открытие страницы делает браузер с помощью javascript. <br/> <br/> Что бы ссылка скачивалась а не открывалась в браузере (исключение, специально настроенные в браузере типы файлов, например pdf по умолчанию в браузерах открывается, но это настраивается), то сервер при формировании ответа по этой ссылке в headers задать два заголовка Content-Type и Content-Disposition: attachment <br/> <pre><code class="php">header('Content-Type: application/xml');
header('Content-Disposition: attachment; filename=filename.xml');</code></pre> <br/> в данном случае тип данных application/xml а имя файла filename.xml (оно будет предложено в диалоге сохранения) <br/> <br/> Повторю, эти заголовки должны быть отданы сервером по ссылке (в твоем случае это $linkFile) и если то не ваш сервер то у вас мало вариантов, кроме как проксировать их через себя. <br/> <br/> p.s. есть еще вариант, он подходит если файлы по ссылке не большие (влезают в оперативную память у клиента) и главное удаленный веб сервер не запрещает кросс запросы CORS то можно загрузить файл на javascript и отдать его как blob <br/> <pre><code class="javascript">fetch('https://example.com/test.xml')
  .then(r =&gt; r.blob())
  .then(blob =&gt; {
    const url = URL.createObjectURL(blob);
    const a = document.createElement('a');
    a.href = url;
    a.download = 'test.xml';
    a.click();
    URL.revokeObjectURL(url);
  });</code></pre> <br/> кстати если файл в том же домене, то можно просто создать тег с атрибутом download, не используя blob <br/> <br/> Вроде бы больше нет никаких способов, либо content-disposition либо формировать blob и тег a с атрибутом download
Похожие вопросы