Некоторое время назад завел сайт под CloudFlare, включил SSL (без проблем не обошлось, но это отдельная тема). В итоге, все отлично заработало, раздражало только, что при включении режима обслуживания сам не могу нормально смотреть фронтэнд, так как CF прячет реальный IP, и то что он прописан как служебный в Престе не дает никакого эффекта. А в перспективе (сайт пока under construction) это грозило кривой статистикой.
Гуглил запросы, содержащие в разных комбинациях слова Prestashop Clouflare IP, но ничего вразумительного не находилось. Написано в основном про какой-то мод для апача, который самим CF давно не поддерживается, да и сайт пока на shared хостинге, так что мне оно без пользы.
И вот сегодня наткнулся каким-то чудом на вот это
Для просмотра ссылки Войди или Зарегистрируйся
Как-то сразу почуял, что это очень похоже на то что мне надо. Почесал репу, приведенный в статье код адаптировал под CF, тупо заменив
'HTTP_X_SUCURI_CLIENTIP' на 'HTTP_CF_CONNECTING_IP', получилось вот такое:
----
<?php
class Tools extends ToolsCore
{
/**
* Get the server variable REMOTE_ADDR, or the first ip of HTTP_X_FORWARDED_FOR (when using proxy)
*
* @Return string $remote_addr ip of client
*/
public static function getRemoteAddr()
{
// This condition is necessary when using CloudFlare, don't remove it.
if (isset($_SERVER['HTTP_CF_CONNECTING_IP']) AND $_SERVER['HTTP_CF_CONNECTING_IP'])
{
if (strpos($_SERVER['HTTP_CF_CONNECTING_IP'], ','))
{
$ips = explode(',', $_SERVER['HTTP_CF_CONNECTING_IP']);
return $ips[0];
}
else
return $_SERVER['HTTP_CF_CONNECTING_IP'];
}
return $_SERVER['REMOTE_ADDR'];
}
}
----
по описанной в статье инструкции сохранил это в файл /override/classes/Tools.php и удалил /var/cashe/prod/class_index.php
Произошло чудо - оно работает
Почему чудо - потому что я ничего в этом не понимаю )))
Решил написать сюда, с двумя целями:
1. вдруг кому-нибудь пригодится;
2. может, местные гуру что поправят-допишут в этом коде, т.к. код оригинальной
function getRemoteAddr() в Престе существенно сложнее, и потом где-нибудь вылезет косяк.