User Tools

Site Tools


ru:faq

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
ru:faq [2017/11/25 11:01]
admin [Abnormally high notrade prod]
ru:faq [2024/03/08 21:53] (current)
admin [How to test script]
Line 1: Line 1:
 +====== FAQ ======
 +
 +====== How to send traffic ======
 +
 +Стандартная практика - слать прямо на корень домена те 
 +  http://mycj.com/, 
 +скрипт берет домен трэйдера из рефера. 
 +
 +Но, при необходимости, можно слать и указывая тредера явным образом, те 
 +
 +  http://yourdomain.com/?id=trader.com
 +
 +, где trader.com - это домен трейдера.
 +
 +
 +===== Skimming 101 =====
 +
 +В сетингах есть понятие скиминга 101. Ясно что скимить больше 100% невозможно. 101 означает "скиминг равен дефолтному". Дефолтный задается там же в сетингах. Те если дефолтный 60, а у норефа стоит 101 - значит у норефа будет так же 60 скиминг. А вот если поставить что то отличное от 101 - уже будет свой, персональный.
 +
 +
 +===== Skimming params =====
 +
 +В скиминге можно указывать дополнительные параметры в виде skim#options, где options это var=value&var2=value=2 и так далее. В данный момент это сделано для [[ru:new_rotation_settings#tube_embeded_switch_rules|Tube switch rules]] но может пригодится и в будущем.
 +
 +Если у вас включен tube_embeded_switch_rules то первый клик должен уходить на спонсора. Это удобно, но если серфер пришел к вам напрямую с поисковика, то вам хотелось бы оставить его себе. Или например если ссылка на галеру у вас находится на другом сайте и переход оттуда - вам так же хотелось бы оставить у себя на сайте. те для определенных случаев вам хотелось бы выключить опцию tube_embeded_switch_rules. Для этого указываем ским например 
 +
 +  100#tube_embed_switch_rules=off
 +  
 +В этом случае будет 100% на контент, tube_embed_switch_rules=off - переход на спонсора выключен.
 +
 +Если вам надо что бы  правило действовало только на первый клик, то можно указать ским как 
 +
 +  100#tube_embed_switch_rules=off,100
 +  
 +те tube_embed_switch_rules выключен только для первого клика.
 +
 +===== Приоритет скиминга =====
 +
 +Ским указанный в урле имеет приоритет над всеми остальными вариантами.
 +Если ским в урле не указан - проверяются персональные сетинги трейдеров.
 +Если и тут ским не указан - используется дефолтный ским из сетингов.(CJSettings - Content Settings - Default skimming)
 +
 +Но при желании это поведение можно менять, порядок выбора скима меняется в сетингах. Можно таскать параметры вверх вниз по приоритетности.
 +
 +
 +===== Skimming list =====
 +
 +Можно выставить ским на каждый клик. Например, 100,60 значит что первый клик будет ским 100, 2й клик - ским 60. Обратите внимание, что последняя цифра повторяется. Те 3, 4й и тп будут 60. Если надо иначе - надо перечислять столько раз, сколько надо, те 100,60,100,60,100,60,100,60 и тп
 +
 +
 +Прямо в перечислении можно указывать трейдеров, например 
 +
 +  100,trader.com,60,sell,50
 +
 +2й клик пойдет на трейдера, 4й на продажу
 +
 +
 +Так же можно указывать некоторые параметры например
 +
 +  100#skip_sell=true,50
 +
 +тут надо обратить внимание на #skip_sell=true, те на первом клике продажи трафа не будет, даже если она настроена в traffic rules - traffic sell
 +
 +
 +===== URL variables =====
 +
 +Во всех урлах трейдеров, продажи трафа, редиректа и тп можно пользоваться переменными окружения, а именно $_GET и $_SERVER . Например, продажа трафа, у вас стоит урл http://broker.com/, вы хотите трекать продажу как то , можно сделать например http://broker.com/?from={SERVER_HTTP_HOST} и будет передавать имя текущего домена. Удобно при копировании настроек на другие домены.
 +
 +Или например хотите передавать с какой страницы клик: out.php?url=http://gallery.com/?from={GET_slug} где slug - это переменная из урла страницы, на которой произошел клик.
 +
 +
 +Пример с реврайтом
 +У вас урл http://domain/gallery/cool_gallery.html - это реврайт. 
 +Реальный урл - http://domain/scj/cgi/out.php?url=content&slug=cool_gallery (дальше могут быть еще параметры в зависимости от вашего реврайта), тут GET параметры url и slug.
 +
 +Вы продаете траф на http://broker.com/, по каким-то причинам вы хотите передать брокеру slug.
 +Для этого меняем урл брокера на http://broker.com/?broker_parameter_for_slug={GET_slug}
 +при клике {GET_slug} будет заменен на cool_gallery и клик уйдет на  урл http://broker.com/?broker_parameter_for_slug=cool_gallery 
 +
 +
 +===== Real Skimming =====
 +
 +Показывает соотношение между кликами которые в реальности ушли на галеры к кликам которые ушли на трейд.
 +Real Skimming может отличаться от установленного скиминга как в большую так и в меньшую сторону.
 +Например, если у вас топ трейдеров - это 100% ским на трейдеров, соответственно если у вас например дефолтный ским 50 и есть топ трейдеров со скимом 100, то реальный ским будет например 40.
 +Тоже самое актуально и в обратную сторону. Например если у вас на индексе тумбы категорий, по которым серфер 100% уходит на урл (в данном случа это страница соотв категории), то Real Skimming будет больше 50.
 +
 +===== Last Clicks =====
 +Это параметр который показывается какой % пользователей после ухода на этого трейдера больше не кликал на вашем сайте.
 +Технически можно представить как показатель внешней проды.
 +
 +
 +===== First Click =====
 +
 +Что бы первый клик уходил всегда на контент надо поставить ским например 100,50 - это значит первый клик ским 100 2й и следующие - 50
 +===== Mysql Settings =====
 +базы находятся в scj/includes/config.php. 
 +
 +
 +
 +===== Подлив Траффика =====
 +если вы покупаете траффик на подлив (например на трафикхолдер) то для проверки его качества добавьте условного трейдера podliv.com и сделайте его неактивным (Active - No). И после этого сливайте траффик с параметром /?id=podliv.com.
 +
 +Многие покупают траф для подлива, часто методом подбора - сегодня купили этого немного, сегодня этого немного.
 +
 +Есть хороший вариант небольшой автоматизации данного процесса. Покупайте траф БЕЗ id=, те просто шлите на http://your_domain.com/
 +
 +В Settings - Processed Data - Add Notrade as Inactive Traders
 +
 +Скрипт будет добавлять все новые рефы как трейдеров, а вы сможете проследить проду с каждого сайта.
 +
 +Условно покупаем 10к просто вашей ниши, потом смотрим с какого сайта была хорошая прода и далее покупаем целенаправленно только с него.
 +
 +
 +===== Я забыл пароль в админку, как восстановить пароль ? =====
 +
 +Восстановить пароль никак, можно только поменять, для этого надо сделать следующее:
 +
 +Вариант 1, если у вас обычная авторизация, те вы **не** жали на "Switch to multiaccess" в Setting - Password
 +
 +  - переименовать /scj/admin/.htaccess в /scj/admin/htaccess
 +  - открыть админку (сейчас у вас не будет спрашивать пароль)
 +  - поменять пароль
 +  - переименовать /scj/admin/htaccess обратно в /scj/admin/.htaccess
 +
 +Это если у вас апач. Если nginx то он не читает .htaccess, все прописано в конфиге nginx. Вы можете либо переписать .htpasswd с того сайта где знаете пароль, либо временно убрать авторизацию в nginx (попросите админа это сделать если не знаете как), выставить новый пароль и снова включить авторизацию в nginx.
 +
 +
 +Вариант 2, если жали на "Switch to multiaccess "
 +
 +  - в каталоге /scj/admin/ создать файл reset.php следующего содержания
 +  - <code> <?php
 +require('../includes/prepare.php');
 +db_query("update admins set password = MD5('admin') where login = 'admin' ");
 +echo 'Done'; </code>
 +  - открыть в браузере /scj/admin/reset.php
 +  - удалить reset.php
 +
 +
 +**Ошибки**
 +Вы нажали на "Switch to multiaccess", переименовали .htaccess - теперь не проходит пароль никакой.
 +
 +тут 2 варианта.
 +
 +1. Каталог закрыт например nginx и пароль стоит там.
 +
 +Проверка - открываем /scj/admin/test.php - если спрашивает пароль - значит оно. 
 +
 +Решение - просите админа убрать эту авторизацию.
 +
 +2. Хост работает через php_fpm
 +
 +Проверка - делаем файл scj/admin/123.php следующего содержания
 +
 +<code>
 +
 +<?
 +   if (isset($_SERVER['PHP_AUTH_USER'])) {
 +      print_r($_SERVER);
 +   } else {
 +   
 +      header('WWW-Authenticate: Basic realm="SmartCJ Admin area."');
 +      header('HTTP/1.0 401 Unauthorized');
 +      echo 'Access Restricted';
 +      exit;
 +
 +   }
 +</code>
 +И открываем в браузере. Должно спросить пароль и отобразить его на экране. Если продолжает спрашивать пароль - значит оно.
 +
 +Решение: http://smartcj.com/wiki/doku.php?id=ru:password#php-fpm_castcgi_multiaccess_problem
 +
 +Либо отключить мультиавторизацию
 +
 +  - в каталоге /scj/admin/ создать файл reset.php следующего содержания
 +  - <code> <?php
 +require('../includes/prepare.php');
 +db_query("update settings set value = '' where name = 'scj_admin_auth' ");
 +echo 'Done'; </code>
 +  - открыть в браузере /scj/admin/reset.php
 +  - удалить reset.php
 +
 +===== У меня изменился ИП, а в админке ограничен доступ по ИП =====
 +
 +Что бы сделать ресет списка надо:
 +
 +  - в каталоге /scj/admin/ создать файл reset.php следующего содержания
 +  - <code> <?php
 +require('../includes/prepare.php');
 +db_query("UPDATE settings SET value = '' WHERE name = 'admin_limit_ip' ");
 +echo 'Done'; </code>
 +  - открыть в браузере /scj/admin/reset.php
 +  - удалить reset.php
 +
 +
 +===== Как сделать неактивного трейдера, которому скрипт мог бы только форсить нужное кол-во хитов =====
 +
 +A. добавть трейдера, сделать его активным, выставить ratio = 0, Eliglible for exout hits = No
 +
 +
 +===== Как импортить трэйдеров из других скриптов ? =====
 +
 +A. Maintanance -> Import Traders : есть импорт из наиболее популярных скриптов, если из вашего нет - дайте мне знать, добавим.
 +
 +===== Что такое поле Bookmarks ? =====
 +
 +A. Теоретически это % серферов трейдера, которые добавили ваш сайт в букмарки. Считаем сл. образом: когда приходит серфер мы ему ставим куку на неделю со значением трейдера. Если серфер приходит _без_рефа_ и у него стоит эта кука, мы предполагаем что при предыдущем визите он добавил нас в букмарки.
 +
 +
 +===== Как устроить трейд через SmartCJ, сохранив при этом "прямые" линки ? =====
 +
 +**Для простых линков на галеры или внутренние страницы сайта:**
 +
 +Допустим у нас есть следующий линк
 +
 +  <a href="/somepage.html">Link Desc</a>
 +
 +мы добавляем небольшой JS в страницу
 + 
 +  <script type="text/javascript">
 +  function scj_click(out_param, url) {
 +  var a = new Image;
 +  a.src="out.php?"+out_param+"="+url;
 +  return true;
 +  }
 +  </script>
 +
 +а в саму линку добавляем следующий код
 +
 +  <a href="/somepage.html" onClick="return scj_click('url', this.href);">Link Desc</a>
 +
 +**Для топлиста трейдеров** надо добавить такой же JS однако вид линки должен быть немного другим
 +
 +  <a href="http://trader.com/" onClick="return scj_click('member', 'trader.com');">Link Desc</a>
 +  где trader.com - это домен трейдера.
 +
 +
 +===== Как сделать полный дапм баз (mysqldump) =====
 +
 +Надо зайти в шел (ssh) и дать сл команду
 +  mysqldump -uLOGIN -pPASS DBNAME > dump.sql
 +
 +где LOGIN, PASS and DBNAME соотв. ваши данные доступа к мускл.
 +После этого, дабы было меньше скачивать, можно упаковать полученный файл.
 +  gzip dump.sql
 +
 +
 +
 +Загрузить бекап 
 +
 +  mysql -uLOGIN -pPASS DBNAME < dump.sql  
 +
 +===== How to move to another server =====
 +
 +Проще всего :
 +  - проапдейтить на старом серваке до последнего апа
 +  - поставить с 0 на новом
 +  - перенести дамп мускл
 +  - скопировать сами тумбы
 +
 +Если вам все же нравится копирование, то 
 +  - скопировать с пермишенами
 +  - проверить пути и пароли в scj/admin/.htaccess, common.php, includes/config.php
 +
 +**Master - Slave**
 +
 +Обратите внимание, что у слейва в базе записано имя базы мастера. На практике это означает следующее: при переносе надо что б имя базы мастера не поменялось. Если оно все же меняется, то после переноса слейва в админке слейва, в сетингах, поменять данные базы мастера 
 +
 +
 +keywords: перенос скрипта
 +
 +
 +===== Как переименовать папку скрипта =====
 +
 +Если у вас новый инсталл то имя для папки выбирается при инсталле.
 +
 +Если скрипт уже стоит то можно переименовать папку, но при этом надо не забыть поменять пути в 
 +
 +  * includes/config.php
 +  * **все** common.php 
 +  * admin/.htaccess  
 +  * rewrites - если у вас Apache то htaccess, если nginx то в его конфиге
 +
 +
 +===== "Прокладка" для out.php  =====
 +
 +Иногда возникает необходимость в реализации или тестировании какой-то функциональности, которой еще нет в скрипте. Если это касается кликов то проще всего сделать следующим образом. Например, нам надовыставить персональный ским для галер на домене gallery.com (при этом ским для галер на доменах gallery1.com gallery2.com остается дефолтным).
 +
 +  * out.php переименовываем в out_scj.php
 +  * out.php делаем такой
 +<code>
 +<?php
 +
 +if ($_GET['url']) {
 +$tmp = parse_url($_GET['url']);
 +if ($tmp['host'] == 'gallery.com') $_GET['p'] = 50;
 +}
 +
 +include('out_scj.php');
 +</code>
 +
 +
 +===== Античит при продаже трафа  =====
 +
 +Тестовое решение для фильтрации читового трафа при продаже. Фильтруем по наличию JS и загрузке картинок. Если JS нет - будем слать 100% на урл (гали).
 +
 +  - Настраиваем [[User Vars]] "Определить % серферов без JS и картинок", user.php ставит куку user_var (можно сделать другой вариант)
 +  - CJ Settings - other settings - Traffic Check : Cheat Hit -  cookie doesnt exists - пишем user_var. Теперь, если у юзера не сработал JS в п.1 , значит не будет куки, если нет куки - считаем как чит клик
 +  - В сетингах Sys. Traders - cheat_clicks - ставим персональный ским 100 - значит все читклики всегда на гали
 +  - Traffic Sell ставим продажу _только_ с trade кликов. Учитывая что продажа будет только с трейд кликов - на трейд станет уходить немного меньше хитов, возможно надо будет уменьшить общий ским.
 +
 +
 +
 +Если вам дают список ИП с читом, а вы не можете найти их - скорее всего причина в том, что по дефолту скрипт хранит данные за последние 24 часа. Это время можно увеличить в сетингах Keep Links, hours 
 +
 +
 +
 +===== Как сделать "ротацию страниц" только для определенных трейдереров =====
 +
 +Например, у нас есть страницы niche_page1.html and niche_page2.html, которые мы бы хотели ротировать только для определенных трейдеров. Делается это так:
 +  * создаем файл например trader.php на корне домена
 +<code>
 +<?
 +$pages = array(
 + '/usr/home/domain.com/niche_page1.html',
 + '/usr/home/domain.com/niche_page2.html',
 +);
 +
 +include($pages[rand(0, count($pages)-1)]);
 +</code>
 +  * прописываем ПУТЬ (!!!) к trader.php как персональную страницу трейдера
 +
 +
 +===== Какая разница между Trade by country и Quality settings =====
 +
 +Это 2 отдельные системы управления качеством траффика. Quality settings - это скидки для определенных стран. Например, клики для страны А считаются с дискаунтом 50%, это значит что 2 клика будут засчитаны как 1. Значит будет меньше прода, меньше задолженность, трейдер получит меньше возврат.
 +
 +Trade by country - это возможность трейдеру слать теже страны (по качеству), что и он шлет нам. 
 +
 +Те если включены обе системы то трейдеру условно будет возвращать Китай да еще и меньше чем он нам прислал.
 +
 +Имеет ли смысл использовать сразу обе - надо проверять на конкретном сайте на практике.
 +
 +
 +
 +
 +===== Можно ли трейдить с топами =====
 +
 +Да, безресетный топ это практический классический сидж.
 +Для ресетных топов существует удобная фича для определения времени, когда надо форсить этот топ. В едит трейдера Other Settings - Site type надо выставить Toplist и скрипт будет проверять раз в сутки общее кол-во хитов на топе с целью определить время ресета. Все замеченные ресеты пишутся там же в едит, а так же видны в trade когда вы наводите мышь на домен трейдера (в попапе).
 +
 +===== Почему нет вебинсталла и почему апдейты не ставяться от рута =====
 +
 +Вебинсталл: Обычно взломы происходят с веба через скрипты где не проводится проверка входных данных. При этом обычно делают вебшел - заливают скрипт в каталог, в который может писать вебсервер. Вебсервер обычно может писать в каталог, который имеет овнера сам вебсервер либо пермишены на запись (0777). Если скрипт ставится с веба все файлы и каталоги получают овнера = вебсервер. Минус этого в том, что если где-то сломают то мало того что шел могут положить в любой каталог скрипта, так еще и могут подменить out.php например и забирать часть трафа себе, а владелец сайта об этом не будет и подозревать. Если ставить скрипт из шела, то файлы и каталоги получают овнера = юзер и соответственно с веба их изменить нельзя.
 +
 +Апдейты и рут: попытка нести хорошее в люди :) Если вы спросите у любого админа он вам скажет, что правильное поведение - никогда не ходить на сервак от рута. Ходят от юзера всегда, если надо пермишены рута делают su (sudo). Чем это плохо в конкретном нашем случае: если скрипт становится от рута, а крон от юзера - крон не сможет менять файлы (тк овнер рут). Если поставлено от рута и крон от рута, то все работает хорошо. Но тут есть проблема: если в скрипте найдут дырку, а от этого никто не застрахован, злоумышленник получит в руки скрипт, который запускается от рута, а значит сможет внедрить руткит - программа которая позволит управлять вообще всем серваком так, что не будет заметно не только самому овнеру сервака, но и зачастую админу.
 +
 +
 +===== Можно ли запускать кроны не каждую минуту =====
 +
 +Скрипт расчитан на то, что б кроны запускались каждую минуту. Ин\аут не работают с базой, дабы нагрузка на мускл никак не отражалась на трейде, и каждую минуту крон обрабатывает клики за минуту и кладет их в базу, обсчитывает трейдеров и прочее. Теоретически можно это делать не каждую минуту и пусть приоритеты трейдеров расчитываются реже. Но кроме этого в разные минуты запускаются какие-то определнные действия, например запись хистори. Не запуститься крон в эту минуту - не будет записи хистори, не запуститься в 00 - не будет ресета стат за пред час, и так далее. те cron.php важно запускать каждую минуту.
 +
 +Запуск rotation.php менее критичен. Он кладет статистику тумб в базу, те статистика тумб будет обновляться так часто как вы его запускаете.
 +===== Сколько сайтов потянет сервер такой-то ... ? =====
 +
 +Вопрос из разряда "сколько коробочек влезет в жигули ?" это на 100% зависит от веса коробочек, их размера и желания максимально отптимально их там распихивать.
 +
 +===== Mysql Backup =====
 +
 +Скрипт делает бекап автоматически раз в сутки и сохраняет посление 3 дня, те удаляет более поздние.
 +
 +Время бекапа скрипт пытается поставить на рендомное время, что бы если на серваке несколько копий то они не делали бекап все одновременно. Однако если базы большие или время рендомно пересеклось, скрипты могут делать бекап одновременно, что нагружает сервак.
 +
 +Если у вас такое кол-во скриптов или такой размер баз, что бекапы нагружают сервак, то наилучший вариант это выключить автобекап в скрипте и поставить бекап баз в крон но то время, когда на серваке наименьшая нагрузка.
 +
 +Из общий рекомендаций:
 +1. ставить бекап на время когда нагрузка наименьшая
 +2. делать бекапы по очереди, что бы в один момент времени работал только 1 mysqldump
 +3. делать бекап физически на другой винт относительно того где находятся сами базы.
 +===== Abnormally high notrade prod =====
 +
 +У notrade может быть очень высокая прода, те много кликов при малом количестве инов.
 +
 +Вопрос заключается в том, что часто в notrade клики попадают хиты сделанные через переводчик гугла. Ситуация получается примрено следующая:
 +
 +  * юзер пришел от от трейдера, мы запомнили что условно ИП 123.123.123.123 от трейдера asd.com
 +  * на индексе (или категории, в целом не важно) браузер у юзера видит что сайт на английском, при этом юзер например из Индии, и предлагает начать переводить сайт
 +  * юзер соглашается - с этого момента весь траффик начинает приходить с googleusercontent.com и IP гугла
 +
 +Как тут видно в этот момент мы получаем 2 проблемы:
 +  - notrade показывает нереальную продуктивность
 +  - появляется ошибка в проде трейдеров
 +
 +Теоретически, учитывая что прода для всех трейдеров уменьшается пропорционально, на общую работу это не влияет, однако страдает отображение статистики notrade
 +
 +Что бы этого избежать надо в код добавить 
 +
 +  <meta name="google" value="notranslate">
 +  
 +Судя по документации гугла это должно помочь.
 +
 +
 +===== Feeders =====
 +
 +Как считать траффик от фидеров:
 +
 +1. самый простой варинат - создаем трейдера условно feeder.com и шлем как http://domain.com/?id=feeder.com? вся стат по траффику видна у трейдера feeder.com
 +
 +2. Траф приходит из разных источников и они меняются. Такой траффик по дефолту считается в notrade. Но можно его автоматически делить. В сеттингах  "Add Notrade as Inactive Feeder Traders" и каждый домен будет добавлен как новый фидер. 
 +
 +Тут есть 2 варианта:
 +
 +- as separate trader - каждый будет как отдельный трейдер, но тогда в основном экране trade появиться очнеь много трейдеров и это уже не особенно удобно
 +- as subfeeder - тут надо слать http://domain.com/?id=feeder.com (feeder.com надо предварительно создать), тогда все рефы со своей стат будут видно в статистике feeder.com как subfeeders
 +
 +
 +**Если траф приходит без рефа или реф изменен** то обычно в урле передается какой-то параметр. Тогда достаточно превратить этот параметр в реф и заработают указанные выше способы.
 +
 +Например, траф приходит как http://domain.com/?site_id=12345 
 +
 +Добавляем в common.php 
 +
 +<code>
 +if (isset($_GET['site_id'])) {
 +   $_SERVER['HTTP_REFERER'] = 'http://feeder-' . $_GET['site_id'] . '.com/';
 +}
 +</code>
 +
 +
 +те реф в этом случае будет http://feeder_12345.com/ и легко понять откуда этот траффик. При этом если в урле больше параметров то реф можно сформировать так, что бы учесть эти все параметры, условно 
 +
 +  $_SERVER['HTTP_REFERER'] = 'http://feeder-' . $_GET['site_id'] . '-' .  $_GET['some_other_parameter'] . '.com/';
 +
 +
 +создав такой реф, что б по нему было ясно откуда пришел траффик
 +
 +
 +===== Recaptcha check =====
 +
 +Есть интересный вариант проверки качества трафа с использованием речапчи от гугла. Суть в том, что гугл пишет какой % трафа он считает нормальным, не ботовым.
 +
 +1. Идем на https://developers.google.com/recaptcha, регаемся и получаем 
 +Recaptcha V3 Site key
 +Recaptcha V3 Secret key
 +
 +
 +2. вписываем эти значения в Rotation - Settings - Social 
 +
 +3. на любой странице, но в 99% это конечно будет индекс и страница категории добавляем код
 +
 +<code>
 +<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
 +<script src="https://www.google.com/recaptcha/api.js?render=<!--TUBE_RECAPTCHA_SITE_KEY-->"></script>
 +
 +<script>
 +req_flag = false;
 +recaptcha_code = '';
 +
 +
 +if ('<!--RECAPTCHA_MAX_RATE-->') {
 +    if (Math.random() > '<!--RECAPTCHA_MAX_RATE-->') req_flag = true;
 +}
 +
 +
 +grecaptcha.ready(function() {
 +    grecaptcha.execute('<!--TUBE_RECAPTCHA_SITE_KEY-->', {action: 'index_page'}).then(function(token) {
 +       recaptcha_code = token;
 +    });
 +});
 +
 +
 +$(document).ready(function(){
 + $('.gallery_link').each(function() {
 + $(this).click(function(){
 +     if (req_flag || recaptcha_code === '') return;
 +     req_flag = true;
 +
 +        $.post('/',
 +         {
 +                'action': 'check_recaptcha',
 +                'recaptcha_code': recaptcha_code,
 +        },
 +         function (data) {
 +           
 +         }
 +         );
 +     
 + });
 + });
 +
 +
 +});
 +
 +
 +
 +</script>
 +</code>
 +
 +
 +на линках на галеры или категории добавляем class='gallery_link' как в примере ниже
 +
 +
 +<code>
 +<thumb num=1-10>
 +<a class='gallery_link' href='/gallery/<!--GALLERY_SLUG-->/index.html'> <!--GALLERY_ID--> </a> <br>
 +</thumb>
 +</code>
 +
 +можно конечно gallery_link заменить на что угодно, смысл в том что в JS мы вешаем событие по определению чита на эти линки  $('.gallery_link').each(function() {
 +
 +
 +4. в админке идем в Settings - layouts - и включаем колонку Google Recaptcha
 +
 +Все, теперь можно видеть процент хорошего трафа в Trade - колонка recaptcha
 +
 +
 +====== PATH and URL ======
 +
 +Одна из частых проблем - это непонимание (или невнимательность ?) разницы между УРЛом и Путем.
 +
 +[[http://en.wikipedia.org/wiki/URL|URL]] - это нечто вида http://domain.com/blabla/, те расположение файла в интернете.
 +
 +[[http://en.wikipedia.org/wiki/Path_(computing)|PATH]] - это расположение файла на диске.
 +
 +Рассмотрим простой пример:
 +на диске сервера каталог с вашими доменами обычно находится примерно как /home/user/domain.com/. Допустим там же лежит файл 1.html. Путь к нему /home/user/domain.com/1.html
 +УРЛ к этому же файлу http://domain.com/1.html
 +
 +
 +
 +Периодически возникают вопросы по относительным и абсолютным путям. Относительный путь - это путь относительно текущего положения в системе, оно может менятся. Путь вида /home/user/domain.com/1.html  (тут / в начале пути указывает на корень файловой системы) - это абсолютный путь, он не меняется.
 +
 +
 +
 +Это выражается например в ротаторе, где для сорханения тумб 2 параметра: URL to data and PATH to data.
 +Вы хотите что б были не в каталоге scj (урл до тумб получается http://domain/scj/thumbs/1/2.jpg) , а в /thumbs что б путь получался http://domain/thumbs/1/2.jpg
 +У вас домен в /home/user/domain.com/.
 +
 +  * ПУТЬ к сохранению тумб - это /home/user/domain.com/thumbs/
 +  * УРЛ - http://domain.com/thumbs или просто /thumbs
 +
 +
 +====== Script Update version 1 -> 2 ======
 +
 +Первая ветка скрипта (1.X) больше не развивается и в 2016 году мы полностью перешли на ветку 2. Если у вас есть скрипт версии 1, то что бы перейти на версию 2 надо 
 +
 +  - поставить скрипт версии 2 на тот же домен (но в другую папку), где и версия 1 (понадобится отдельная база)
 +  - проапдейтить версию 1 до последней доступной версии
 +  - в шеле зайти в scj/bin и запустить php scj_1to2_db_converter.php
 +
 +Скрипт спросит данные где расположена версия 1 и скопирует оттуда все данные.
 +
 +Не забудьте, что если у вас есть свой код в common.php то его так же надо скопировать.
 +
 +====== PHP update ======
 +
 +Из-за изменений в IonCube теперь для каждой версии пхп надо готовить отдельный файл, те написанное под 5й пхп не будет работать на 7м и тд.
 +
 +Когда вы инсталите скрипт то он определяет какая у вас версия пхп и скачивает файлы под вашу версию. Если потом вы смените версию пхп то будет писать что скачанные файлы расчитаны на другую версию пхп (ту на которой был инсталл).
 +
 +
 +Суть что надо сделать: заменить все пхп файлы скрипта на файлы для нужной версии.
 +
 +Варианты как это сделать:
 +
 +1. самый простой:
 +  * делаем бекап
 +  * обновляем пхп
 +  * ставим скрипт с 0, он скачивает файлы под нужную версию
 +  * поднимаем бекап
 +
 +2. для любителей копировать файлы
 +  * ставим на 1 домен версию под нужную версию пхп
 +  * копируем *.php файлы на остальные домены (кроме common.php and config.php)
 +
 +3. если доменов много с трафом
 +  * делаем 2 версии пхп, дефолтная - старая, условно 5
 +  * ставим 7й пхп
 +  * делаем копию доменов, но на 7м пхп, туда инсталлим все как было и переключаем на новую версию по доменно
 +
 +
 +
 +====== Domain change ======
 +
 +Все данные хранятся в базе, поэтому
 +
 +  - инсталлим скрипт на новый домен
 +  - копируем бекап на новый домен и восстанавливаем
 +  - Settings - CJ Pages меняем на актуальный путь
 +
 +Все.
 +
 +
 +
 +====== Optimize DB ======
 +
 +Пункт просто запускает команду optimize для базы, в большнстве случаев это имеет смысл для MyISAM таблиц, подробнее и официально можно прочесть по ссылке https://dev.mysql.com/doc/refman/8.0/en/optimize-table.html
 +
 +Truncate удаляет все данные из таблицы.
 +
 +====== SimilarWeb Stats ======
 +
 +Скрипт может собирать статистику по вашим трейдерам с SimilarWeb. Для этого надо получить бесплатно API key 
 +
 +  * бесплатно регистрируемся на similarweb
 +  * идем в меню Account - API  - Generated Keys
 +  * создаем новый ключ и вписываем его в Settings - Anticheat - Similarweb Api Key
 +
 +
 +====== How to hide the script ======
 +
 +1. В папку scj кладем .htaccess 
 +
 +<code>
 +RewriteEngine On
 +RewriteCond %{REMOTE_ADDR} !^123\.255\.123\.255
 +RewriteCond %{REMOTE_ADDR} !^xxx\.xxx\.xxx\.xxx
 +RewriteRule ^(.*)$ - [L,R=404]
 +</code>
 +
 +и оно будет выдавать всем, кроме указанных ИП - 404.
 +
 +Если вы юзаете nginx - это прописывается в его конфиг.
 +
 +Тут важно прописать сюда и ИП вашего серваке, иначе Global Admin не сможет собирать статистику.
 +
 +
 +2. Если тумбы у вас по дефолту были в scj/thumbs то надо либо физически их вынести в нужное вам место, либо сделать симлинку.  Если вы знаете, что такое симлинка то без проблем сделаете самостоятельно, если не знаете, что это такое - лучше физически перенесите.
 +
 +После этого надо что б скрипт был в курсе того, куда вы перенесли
 +
 +- быстро: в базе в rot_galleries таблице поменять урл, если не знаете как в базе поменять, лучше вариант 2
 +- медленее - list thumbs - massedit - меняем часть урла тумб. Как обычно лишним не будет сделать бекап.
 +
 +После этого в  Rotation -> Setting -> Graber Settings есть поля:
 +URL to data и PATH to data
 +URL, соотво-но, меняем на /имя_новой_папки
 +PATH - на /home/_path_to_domain/имя_новой_папки
 +
 +
 +====== How to change naming of parameters in URL ======
 +
 +Допустим у нас есть параметр 
 +
 +  &url=http://gallery
 +
 +но мы хотим как-то хитро зашифровать параметр. Для этого надо:
 +
 +1. в темплейте у нас например
 +
 +  &url=/gallery/<!--GALLERY_SLUG-->/index.html
 +
 +это надо заменить на
 +
 +  &url=<?=your_super_function('/gallery/<!--GALLERY_SLUG-->/index.html');?>
 +
 +2. в результате ваша функция как-то зашифрует указанный текст и получится допустим
 +
 +  &url=sdfskldfkejhfklewhfklwerhfklwerhf
 +  
 +
 +3. в коммон надо для скрипта расшифровать то что вы сделали, например
 +
 +  if (isset($_GET['url'])) $_GET['url'] = your_decode_function($_GET['url']);
 +
 +Все.
 +
 +
 +====== Landing Pages ======
 +
 +В общей стат и стат каждого трейдера есть список урлов на которые приходит траф.
 +
 +====== Page Track ======
 +
 +При перемещении по сайту можно следить на какие линки приходит траф, для этого добавляем в линк &page_track=.. 
 +
 +====== How to test script ======
 +
 +Всегда имеет смысл проверить что все работает как задумано. 
 +
 +  * Включите в CJ Settings  - Add debug comments, будет видна дополнительная информация про каждый клик.
 +  * если надо протестировать правила для определенной страны в common.php для своего IP можно добавить 
 +
 +<code>
 +  if ($_SERVER['REMOTE_ADDR'] == 'your IP') {
 +     $_SERVER['GEOIP_COUNTRY_CODE'] = 'country_code!';
 +  }
 +</code>  
 +  
 +и так можно тестировать работу правил для нужной страны.
 +
 +
 +