Помогите исправить ошибку в скрипте на PHP

12
B
На сайте с 17.04.2010
Offline
103
1498

Здравствуйте!

Скрипт распределяющий трафик. Кладется в директорию куда льется трафик, рядом кладется текстовик со списком ссылок, по которым скрипт равномерно распределяет вновь пришедших. Привязываются куки, что бы один и тот же человек попал на ранее посещенную страницу. Скрипт должен поддерживать реф.хвосты, но в текущем виде отказывается работать, ругается на заголовки (последняя строка скрипта). Если последнюю строку заменить на

header('Location: '.$goto);
работает, трафик распределяет, но хвосты обрудает. Помогите найти ошибку. Скриптик полезный, помогает в А/В тестировании.


<?php
define('USE_COOKIE',true);
$f=file("./links.txt"); //файл с ссылками
$cur=IntVal(file_get_contents("count.txt"));

//unset($_COOKIE["mainUrl"]);

$goto = '';
if (USE_COOKIE && isset($_COOKIE["mainUrl"]) && strlen($_COOKIE["mainUrl"])>0 && in_array($_COOKIE["mainUrl"],$f)) {
//Повторные посещения шлем тудаже
$goto = $_COOKIE["mainUrl"];
} else {

$count=count($f);
$cur++;
if ($cur < $count) {
file_put_contents("count.txt", $cur);
} else {
file_put_contents("count.txt", "0");
}
if (USE_COOKIE) setcookie("mainUrl", $f[$cur-1], time()+(60*60*24*30));
$goto = $f[$cur-1];
}
header('Location: '.$goto.'?'.$_SERVER['QUERY_STRING']);
Делаю лендинги и не только. Маркетолог. Обучаю. Ответы на вопросы по Elementor (/ru/forum/1015634). Можно стучаться мне прямо в ВК (https://vk.com/valeost). Ничего не продаю, не навязываю
[umka]
На сайте с 25.05.2008
Offline
456
#1
benmer:
ругается на заголовки

Предполагается, что текст ошибки все определят телепатически? :)

Лог в помощь!
B
На сайте с 17.04.2010
Offline
103
#2
'[umka:
;12712250']Предполагается, что текст ошибки все определят телепатически? :)

Действительно, не описал происходящую ситуацию в полной мере ) Постараюсь подробнее.

Странно, но ошибку уже не выдает (может наделал чего ручками корявыми..) Выдает просто белый экран. Код скрипта, выдающего белый экран:

<?php

define('USE_COOKIE',true);
$f=file("./links.txt");
$cur=IntVal(file_get_contents("count.txt"));

$goto = '';
if (USE_COOKIE && isset($_COOKIE["mainUrl"]) && strlen($_COOKIE["mainUrl"])>0 && in_array($_COOKIE["mainUrl"],$f)) {

$goto = $_COOKIE["mainUrl"];
} else {

$count=count($f);
$cur++;
if ($cur < $count) {
file_put_contents("count.txt", $cur);
} else {
file_put_contents("count.txt", "0");
}
if (USE_COOKIE) setcookie("mainUrl", $f[$cur-1], time()+(60*60*24*30));
$goto = $f[$cur-1];
}
header('Location: '.$goto.'?'.$_SERVER['QUERY_STRING']);
?>

Этот, неработающий скрипт сейчас лежит по адресу http://crfnd.ru/

В корне лежит файлик links.txt с нехитрым содержимым

http://ya.ru/

http://mail.ru/

Если немного модифицировать скрипт до такого вида:

<?php

define('USE_COOKIE',true);
$f=file("./links.txt");
$cur=IntVal(file_get_contents("count.txt"));

$goto = '';
if (USE_COOKIE && isset($_COOKIE["mainUrl"]) && strlen($_COOKIE["mainUrl"])>0 && in_array($_COOKIE["mainUrl"],$f)) {

$goto = $_COOKIE["mainUrl"];
} else {

$count=count($f);
$cur++;
if ($cur < $count) {
file_put_contents("count.txt", $cur);
} else {
file_put_contents("count.txt", "0");
}
if (USE_COOKIE) setcookie("mainUrl", $f[$cur-1], time()+(60*60*24*30));
$goto = $f[$cur-1];
}
header('Location: '.$goto);
?>

То все работает почти как надо - проверить можно здесь: http://crfnd.ru/index2.php

Скрипт заботливо отправляет нас по указанных ссылкам, но при этом режет хвост, т.е. при переходе по ссылке http://crfnd.ru/index2.php/?referer этот самый реферер отсекается.

domen4you
На сайте с 08.03.2013
Offline
53
#3

Элемент $_SERVER['QUERY_STRING']

В элемент $_SERVER['QUERY_STRING'] заносятся параметры, переданные скрипту, если строка запроса представляет собой адрес

http://www.mysite.ru/test/index.php?id=1&test=wet&id_theme=512

то в элемент $_SERVER['QUERY_STRING'] попадёт весь текст после знака "?". Например, при обращении к скрипту, представленному ниже, помещая в строке запроса произвольный текст после знака "?" получим страницу с введённым текстом.

<?php

echo $_SERVER['QUERY_STRING']; // id=1&test=wet&id_theme=512

?>

B
На сайте с 17.04.2010
Offline
103
#4

domen4you, извините, это справочная информация или рекомендация к действию? Если второе, то мне пока непонятно что нужно сделать.

domen4you
На сайте с 08.03.2013
Offline
53
#5
benmer:
domen4you, извините, это справочная информация или рекомендация к действию? Если второе, то мне пока непонятно что нужно сделать.

что вы ожидаете увидеть, на месте переменной QUERY_STRING ?

B
На сайте с 17.04.2010
Offline
103
#6
domen4you:
что вы ожидаете увидеть, на месте переменной QUERY_STRING ?

Как раз и хочу увидеть

domen4you:
весь текст после знака "?"

То есть если crfnd.ru/index2.php редиректит меня на ya.ru, то хотелось бы чтобы crfnd.ru/index2.php/?ref редиректил меня соответственно на ya.ru/?ref

t0os
На сайте с 25.02.2008
Offline
64
#7

Попробуй погасить ошибку:

@header('Location: '.$goto.'?'.$_SERVER['QUERY_STRING']);

Так делать неправильно, конечно, но, похоже, где-то выдается notice или warning, из-за этого и не редиректит.

А вообще можно перед header сделать так:

ob_start();
B
На сайте с 17.04.2010
Offline
103
#8
t0os:
Попробуй погасить ошибку:
@header('Location: '.$goto.'?'.$_SERVER['QUERY_STRING']);

А вообще можно перед header сделать так:
ob_start();

Ни то, ни другое, ни вместе не помогли делу )

siv1987
На сайте с 02.04.2009
Offline
427
#9

isset($_COOKIE["mainUrl"]) && strlen($_COOKIE["mainUrl"])>0

! empty($_COOKIE["mainUrl"])

IntVal

intval

mainUrl http%3A%2F%2Fmail.ru%2F%0D%0A

%0D%0A - https://www.google.ru/search?client=opera&rls=ru&q=%250D%250A&sourceid=opera&ie=utf-8&oe=utf-8&channel=suggest

$f = file("./links.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

....

$goto = trim($f[$cur-1]);

if (USE_COOKIE) setcookie("mainUrl", $goto, time()+(60*60*24*30));

domen4you
На сайте с 08.03.2013
Offline
53
#10
benmer:
Как раз и хочу увидеть
То есть если crfnd.ru/index2.php редиректит меня на ya.ru, то хотелось бы чтобы crfnd.ru/index2.php/?ref редиректил меня соответственно на ya.ru/?ref

в этой переменной ничего нет, потому что в неё попадают данные из адресной строки, при таком обращении crfnd.ru/index2.php там будет NULL.

Если crfnd.ru/index2.php?ref=123 только так там что-то будет

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий