#php
#php
Вопрос:
Я пытаюсь перенаправить данные с одной страницы на другую без использования cURL, возможно ли это?
На данный момент я попытался
header('HTTP/1.1 307 Temporary Redirect');
header('Location: new-location.php');
Это работает хорошо, но выдает глупое всплывающее окно, какие-либо другие методы?
Я пробовал использовать curl, но ничего не происходит, не уверен, включен ли он на моем сервере!
Комментарии:
1. Пересылать данные? Опубликованные вами вызовы заголовка просто перенаправляют и не используют cURL. Я что-то упускаю?
2. @stefgosselin: По-видимому, слово «без».
3. Да, я знаю, что они делают простое перенаправление, но оно переносит данные с собой. единственная проблема в том, что он выдает глупое всплывающее окно, предупреждающее пользователя
4. @Lunar: По какому показателю это «глупо»?
5. @Lunar — Посмотрите на ссылку из netcoder. Ваш выбор — реально сохранить их в переменной СЕАНСА или добавить данные POST к URL-адресу и прочитать их как строку GET.
Ответ №1:
Я думаю, что следующий — единственный возможный способ добиться этого, вместо перенаправления с заголовком location отправьте этот html:-
<!DOCTYPE html>
<html>
<body onload="document.forms[0].submit()">
<form action="new-location.php" method="post">
<?php foreach( $_POST as $key => $val ): ?>
<input type="hidden" name="<?= htmlspecialchars($key, ENT_COMPAT, 'UTF-8') ?>" value="<?= htmlspecialchars($val, ENT_COMPAT, 'UTF-8') ?>">
<?php endforeach; ?>
</form>
</body>
</html>
Комментарии:
1. Javascript не очень надежен для отправки форм, для этого лучше использовать серверные сценарии.
2. @stefgosselin: итак, что вы предлагаете написать на PHP, чтобы пересылать данные POST?
3. @MarcoDemaio — Смотрите мой ответ ниже. Хотя мой ответ был отклонен, я склоняюсь к обработке перенаправлений на стороне сервера.
Ответ №2:
Вы могли бы использовать следующее для пересылки данных post на другой URL. Обратите внимание, что ответ записывается в переменной $data, с которой вы можете делать все, что захотите.
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.domain.tld/urltopostto.php");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 100);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($_POST));
$data = curl_exec($ch);
curl_close($ch);
Комментарии:
1. Не могли бы вы просто поместить
return $data;
и эффективно завершить вызов POST?
Ответ №3:
Если я правильно понимаю проблему, и вы работаете на сервере Apache с mod_rewrite
включенным, вы могли бы использовать перезапись URL. Вы могли бы установить метод запроса в качестве условия и переписать исходный URL-адрес на альтернативный:
RewriteCond %{REQUEST_METHOD} ^POST
RewriteRule ^index.php new-location.php [L]
Ответ №4:
Использование cURL или fopen() являются распространенными предложениями, но ни один из них фактически не «перенаправляет» пользователя на другую страницу.
Чтобы действительно перенаправить пользователя на другую страницу с неповрежденными данными $ _POST, вы можете динамически создать промежуточную страницу, содержащую форму с данными post и JS-код, который отправляет форму немедленно (вместе с кнопкой или ссылкой для отправки формы, если у пользователя не включен JS).
Затем вы перенаправляете пользователя на эту промежуточную страницу, и она перенаправляет пользователя на целевую страницу с неповрежденными данными #_POST. Если промежуточная страница не имеет видимого содержимого, пользователь не будет знать, что оно там есть.
Целевая страница может разорвать связь с промежуточной страницей, поэтому нет шансов на повторную отправку.
Ответ №5:
Может быть, просто, может быть, вы можете попробовать это таким образом:
header("Status: 200");
header("Location: new-location.php");
exit;
Комментарии:
1. Вызов заголовка не будет отправлять данные, если вы не установите переменную в конце вашего URL-адреса, а-ля GET .. заголовок(«Location: new-location.php?var1=$var1amp;var2 = $ var2»); Некрасиво, но это сработало бы. Вы также могли бы использовать сеансы.
2. Тогда вы не ответили на вопрос. 🙂
3. У вас есть 2 варианта из того, что я могу собрать, javascript, как указано выше (я не рекомендую) или сеансы.
4. «Вызов заголовка не отправит данные, если вы не установите переменную в конце вашего URL, аналогичную GET .. заголовок(«Location: new-location.php?var1= $ var1amp; var2 = $ var2»); Некрасивый, но это сработало бы. Вы также могли бы использовать сеансы. «в конце концов, это сработало для меня, спасибо
5. @Lunar — Если это то, что сработало для вас, может быть, установите ответ в качестве предпочтительного ответа?. Выбранное решение в настоящее время опирается на javascript и, хотя оно работает, кажется менее надежным, чем 100% перенаправление на стороне сервера.