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 секунд.

А хотелось бы что бы редирект прошел, а скрипт анализа получив параметры продолжал работать.
Всем заранее благодарен за советы icon_wink.gif
Рейтингом не обижу smail54.gif

Последний раз редактировалось: 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: - дополнил вопрос icon_wink.gif
Прокладка не вариант, с неё конверсия выше. Но суммарно количество продаж 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: - Всё супер, прям как надо, "анализитор" фоном на сервере отрабатывает и редирект не задерживает smail54.gif
цитата
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 - действительно у меня самого открыт на роутере icon_wink.gif

Ещё интересно фаервол у пользователя не будет кидать алерты о сканировании портов?
цитата
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 писал:
такую чушь выдадут только прокси тобой настроенные.

Когда-то пользовался чем-то подобным, публичные прокси детектились на ура. Сейчас, да, не пользуюсь, код написал по памяти прямо в редакторе постов и честно говоря не проверял. Но память у меня хорошая. icon_smile.gif

Последний раз редактировалось: 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,
опасно массово чекать адреса на открытые порты, хостеру может не понравиться, в какие-то блэк листы попадешь и абуза прийдет.


Эта страница в полной версии