#php #redirect #if-statement
#php #перенаправление #if-оператор
Вопрос:
Я создаю свою собственную проверку лицензий, поскольку я часто забываю, когда взимать плату с людей за программное обеспечение каждый месяц. Это находится в зачаточном состоянии.
У меня есть оператор if, который проверяет переменную POST с другого сайта, прежде чем сайт сможет запуститься. (Я знаю, что если нужный человек понял это, он может манипулировать этим, но такого человека нет!)
У меня есть такие операторы, работающие в фоновом режиме, каждый раз, когда страница загружается, это часть приложения. Однако я не могу найти чертов способ обойти это.
Вот в чем проблема. Когда он успешно совпадает и переменная возвращает yes, у меня есть die(). Это выводит пользователя со страницы, над которой он работает, и перенаправляет их на мой скрипт проверки. Я этого не хочу. Если переменная возвращает yes, я просто хочу, чтобы скрипт прекратил работу (ничего не делал, кроме остановки), а не перенаправлял на пустую страницу, потому что я поставил die.
Другими словами, я не хочу, чтобы скрипт выдавал ответ.
Вот фрагмент, с которым я работаю.
Я хочу, чтобы он вернулся на страницу, на которой он был раньше. Этот скрипт является include, и пользователь не должен знать, что он запущен. Если скрипт завершается, он переводит пользователя на пустую страницу.
Вот весь процесс.
License.php отправляет эту форму:
<form name="hidsys" method="post" action="../rauth/rauth.php">
<input type="hidden" name="siteid" value="<? echo $value; ?>">
<input type="hidden" name="keytype" value="a6request">
</form>
<script language="JavaScript" type="text/javascript">
setTimeout("document.hidsys.submit(hidsys)" ,1);
</script>
Вот моя функция и переменные:
function rauth($url)
{
$ch = curl_init();
$timeout = 5;
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
$timestamp = date("Y-m-d h:i", $timestamp 10800);
$token = sha1($_POST['siteid']);
$rogue = sha1(time());
$authKey = md5($_POST['siteid']);
$skeletonKey = $token.$authKey;
$value = 'cca';
Он обращается к rauth.php:
<?php
// Declarations
$id = $_POST["siteid"];
$rauth_returned = rauth('http://www.mysite.com/rauth/index.php?siteid=' . $id . 'amp;token=' . $token . 'amp;time=' . $timestamp);
if (isset($_POST["siteid"])) {
if( strstr($rauth_returned, 'no')) {
exit('You are not authorized');
}
else if( !strstr($rauth_returned, 'yes')) {
exit('There was an error');
}
}
else {
exit("You can't view this page directly");
}
header('Location:' . $HTTP_REFERER);
?>
И это индекс сайта, который он запрашивает, «авторизован» он или нет:
<?php
if (isset($_GET["siteid"])){
$site = $_GET["siteid"];
switch ($site)
{
case cca:
echo 'yes';
die();
case ccgay:
echo 'no';
die();
default:
echo 'absno';
die();
}
}else{
echo "No data to process.";
die();
}
?>
Каждый раз, когда файл (index.php ) в направлении, отличном от выполнения этих файлов, он сообщает license.php для запуска в фоновом режиме, чтобы просто проверить, разрешено ли его запускать или нет. Каждая ссылка и каждый раз, когда сайт открывается, сообщает license.php чтобы пройти описанный выше процесс. Возможно, я написал это действительно глупо, но мне просто нужно что-то, что поможет мне помнить, когда люди не платят, я думаю.
Комментарии:
1. в вашем фрагменте нет перенаправления
2. Исправлено ваше форматирование для вас.
3. Я хочу, чтобы он вернулся на страницу с указанием. Если я помещаю getenv («HTTP_REFERER»), он показывает URL, но если я указываю заголовку перейти, он остается пустым.
4. Что заставляет вас думать, что это перенаправление? Это просто пустая страница… это и есть редактирование die()…
5. Мне не нужна пустая страница! Я хочу, чтобы он оставался на странице, на которой он включен. Его изначально не было в этом скрипте. Это «фоновый» процесс, который выполняется в фоновом режиме. Как только он умирает, он переводит пользователя с исходной страницы на скрипт и отображает пустую страницу.
Ответ №1:
Вместо die()
использования header()
:
header('Location: http://www.example.com/');
ОБНОВЛЕНО:
Попробуйте это:
posix_kill(posix_getpid(),9);
Комментарии:
1. Выполняется проверка на всех страницах приложения. Он также выполняется каждый раз, когда пользователь открывает каждую страницу. Это не сработает.
2. @JD Audi — вы хотите перенаправить, как вы предлагаете перенаправлять, не отправляя заголовок Location обратно клиенту?
3. @JD Audi — смотрите мой обновленный ответ. Обратите внимание, это работает только в системах UNIX / Linux.
4. @JD Audi — Я очень смущен тем, чего вы хотите достичь. В вашем первоначальном вопросе говорится: «Если переменная возвращает yes, я просто хочу, чтобы скрипт прекратил работу (ничего не делал, кроме остановки)». Функция posix_kill() делает именно это. Прошу прощения, если я неправильно понял ваш вопрос; пожалуйста, дайте мне знать, как я могу помочь в дальнейшем.