Master-X
Регистрация
|
Вход
Форум
|
Новости
|
Статьи
Главная
»
Форум
»
Программинг, Скрипты, Софт, Сервисы
»
Тема:
Подскажите как до редиректа можно запустить php скрипт.
Новая тема
Ответить
цитата
25/12/13 в 00:53
Retox
Допустим есть PHP редирект, осуществляющий перенаправление, сразу при заходе сёрфера без задержки.
Но нужно из редиректа запустить php скрипт который будет работать ~ секунд 20.
Желательно что бы была возможность добавить get параметры к урлу этого скрипта.
Дёргаемый скрипт простукивает IP сёрфера с помощью CURL, добавляя стандартные порты (80, 8080, 3128 ...) - на предмет прокси это или нет. С таймаутом в 7 секунд, вот и выходит 20 > секунд.
Пробовал разные варианты:
инклуды...
загрузка с помощью echo file_get_contents ($scrypt_name);
exec ('wget '.$sctrpt_name);
Всё это откладывает выполнение редиректа на 20 секунд.
А хотелось бы что бы редирект прошел, а скрипт анализа получив параметры продолжал работать.
Всем заранее благодарен за советы
Рейтингом не обижу
Последний раз редактировалось: Retox (
25/12/13 в 17:53
), всего редактировалось 5 раз(а)
цитата
25/12/13 в 01:05
Yacc
Если редирект на твою страницу, то с нее аяксом дернуть нужный скрипт.
цитата
25/12/13 в 01:09
Retox
Yacc:
- не редирект на страницу шопа, партнёрки.
цитата
25/12/13 в 01:14
^Krot
Последний раз редактировалось: ^Krot (
26/11/19 в 01:07
), всего редактировалось 1 раз
цитата
25/12/13 в 01:20
Yacc
Retox писал:
не редирект на страницу шопа, партнёрки.
Сделай прокладку у себя, там аякс и редирект на шоп.
А вообще надо задачу полностью, возможно там все проще можно сделать.
цитата
25/12/13 в 01:31
Retox
^Krot:
я немного не понял, ведь после редиректа , в обоих случаях уже нечего не выполняется. При предложенном варианте
<?php
$str = <<< HTML_END
<SCRIPT LANGUAGE="JavaScript">
var userLanguage = navigator.language;
location.replace('http://site.com?s=idxxxx);
</SCRIPT>
HTML_END;
print_r ($str);
$handle = fopen("http://domain.com/check.php?data=xxxxxxxx", "r");
?>
<?php
header("Location: ".http://site.com?s=idxxxx);
$handle = fopen("http://domain.com/check.php?data=xxxxxxxx", "r");
?>
цитата
25/12/13 в 01:42
Retox
Yacc:
- дополнил вопрос
Прокладка не вариант, с неё конверсия выше. Но суммарно количество продаж c того же трафа ниже, нежели при прямом сливе, часть трафа теряется даже если работать над CTR прокладки...
цитата
25/12/13 в 01:45
Yacc
Код:
<SCRIPT LANGUAGE="JavaScript">
$.get('script.php', {data: 'data'}, function(response) {
console.log(response);
});
var userLanguage = navigator.language;
location.replace('http://site.com?s=idxxxx);
</SCRIPT>
цитата
25/12/13 в 01:49
^Krot
Последний раз редактировалось: ^Krot (
26/11/19 в 01:06
), всего редактировалось 1 раз
цитата
25/12/13 в 02:00
Retox
Yacc:
- Всё супер, прям как надо, "анализитор" фоном на сервере отрабатывает и редирект не задерживает
цитата
25/12/13 в 02:12
Pentarh
Retox писал:
Дёргаемый скрипт простукивает IP сёрфера с помощью CURL, добавляя стандартные порты (80, 8080, 3128 ...) - на предмет прокси это или нет. С таймаутом в 7 секунд, вот и выходит 20 > секунд.
Это блокирующий последовательный опрос.
Нужно по другому
1. fsockopen на все порты + stream_set_blocking($stream,0) + stream_set_timeout
2. Дальше опрашивать по stream_select()
За 7 секунд таймаута опросишь все порты параллельно.
пс. 80 порт часто на домашних роутерах открыт.
цитата
25/12/13 в 04:20
idk2045
Retox писал:
exec ('wget '.$sctrpt_name);
Всё это откладывает выполнение редиректа на 20 секунд.
обычно как-то так работает скрипт в фоне
Код:
exec('/usr/bin/php myscript.php 2>/dev/null &')
цитата
25/12/13 в 10:20
AWD
я опять бухой.
но тем не менее - не будет работать жаба после редиректа. как может работать то, что уже на прошлой странице?
игнор_юзер_аборт (ignore_user_abort) поможет. а там уж как хотите - file, exec...
и насчет пробива по портам - абсолютно не правильно и не нужно. тс потом откажется, проверенно.
смотри сюда: секи порт - до 5000 - прямой ип. после 5К - 90% прокси (остальные либо под нат, либо программеры, которые могут юзать порты).
кстати, грозный, ты юзаешь систему, а не пхп. а это четыре маленькие разницы. ну, или две большие.
вообщем, игнор юзер аборт(тру), потом редирект. все.
цитата
25/12/13 в 13:07
Retox
Pentarh:
- А похожий вариант какие подводные камни имеет?
<?php
$ip = "213.110.196.195";
$ports = array ('8080','3128');
foreach ($ports as $port)
{
$fp = @fsockopen($ip,$port,$errno,$errstr,7);
if ($fp)
{
file_put_contents ("proxy.txt", $ip.":".$port."\n",FILE_APPEND);
fclose($fp);
die;
}
}
?>
80 - действительно у меня самого открыт на роутере
Ещё интересно фаервол у пользователя не будет кидать алерты о сканировании портов?
цитата
25/12/13 в 14:05
Yacc
Имхо надо сначала пытаться отсечь прокси как-то так
Код:
function isProxy() {
return ( ! (isset($_SERVER['HTTP_CONNECTION']) and strtolower($_SERVER['HTTP_CONNECTION']) == 'keep-alive' and isset($_SERVER['HTTP_CACHE_CONTROL']) and $_SERVER['HTTP_CACHE_CONTROL'] == 'max-age=0')) ? ((isset($_SERVER['HTTP_ACCEPT_ENCODING']) and $_SERVER['HTTP_ACCEPT_ENCODING'] != 'gzip, deflate') ? 'proxy' : 'vpn') : false;
}
Потом по диапазону ip и только после этого, порты сканить.
цитата
25/12/13 в 14:25
AWD
вообще-то для решения задачи, нужно ее получить. а в случае тс - нет задачи. просто порты. тс, и не забудь 818... ты порты в википедии прочитал? а приватные? короче, танунах!
задача: кардер (ну или просто любимец сёбы) хочет пробить мусора. вопрос: как его идентифицировать? ответ - я знаю. никак. там тоже есть умы....
цитата
25/12/13 в 14:29
AWD
Yacc писал:
Имхо
ты давно юзал прокси? такую чушь выдадут только прокси тобой настроенные. тупо бредятина.
цитата
25/12/13 в 14:34
Retox
...
Последний раз редактировалось: Retox (
25/12/13 в 17:54
), всего редактировалось 1 раз
цитата
25/12/13 в 14:39
idk2045
записывай все ипы в базу, и отдельным скриптом анализируй
нафига в реалтайме систему грузить?
цитата
25/12/13 в 14:39
Yacc
AWD писал:
такую чушь выдадут только прокси тобой настроенные.
Когда-то пользовался чем-то подобным, публичные прокси детектились на ура. Сейчас, да, не пользуюсь, код написал по памяти прямо в редакторе постов и честно говоря не проверял. Но память у меня хорошая.
Последний раз редактировалось: Yacc (
25/12/13 в 14:40
), всего редактировалось 1 раз
цитата
25/12/13 в 14:40
arma
Если у тебя на сервере php-fpm,
то есть волшебная ф-ция:
Код:
fastcgi_finish_request
http://www.php.net/manual/en/function.fastcgi-finish-request.php
поле вызова которой можно закинуть долгоиграющую логику в бэкграунд.
Она пошлет юзеру весь нужный вывод, после чего процесс будет жить, выполняя все долгоиграющие вещи.
цитата
25/12/13 в 15:43
arma
Еще как вариант запуска процессов в фоне:
shell_exec
proc_open
exec
Главное не забыть '&', чтобы пустить процесс в фон:
Код:
shell_exec("php script.php > /dev/null &");
Но имхо лучше писать в базу IPшники, а уже потом их чекать другим скриптом (отдельный php процесс запустить демоном и в случае появления в БД IPшников - чекать их).
Btw,
опасно массово чекать адреса на открытые порты, хостеру может не понравиться, в какие-то блэк листы попадешь и абуза прийдет.
Новая тема
Ответить
Эта страница в полной версии