Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Черный список сайтов 
V
    Опции темы
neoks
Дата 24.1.2012, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 5.7.2010

Репутация: нет
Всего: 1



В чем суть, есть переменная и в ней название сайта, есть список сайтов которые не должны пройти в базу.
Я чета игрался, игрался и все равно каким то макаром проходят сайты.

Вот код
Код


$host_s = 'denver.ru';

$black_list = explode("\n",@file_get_contents(ROOT_DIR.'/data/cache/black_list.txt'));

    unset($blackpoint);
            
            foreach($black_list as $val_b){
                if($val_b !== ''){
                    
                    if(stristr($host_s,trim($val_b))){
                        
                        $r_host = explode('.',$host_s);
                
                        if($r_host[0] !== substr($val_b,0,strlen($r_host[0]))){
                            
                            $blackpoint = true;
                        } 
                    }
                }
            }


            if(!$blackpoint){
            .....
            }


Тут еше подвог в том что нуно еше блочить и поддомены, например если в списке есть .denver.ru то сайты test.denver.ru уже не должны пройти.
Вообшем помогите разобраться раз и навсегда с этим кодом, Спасибо  smile 

Это сообщение отредактировал(а) neoks - 24.1.2012, 14:15
PM MAIL   Вверх
ShadowStep
Дата 24.1.2012, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 21.1.2012

Репутация: нет
Всего: нет



Я конечно может что-то не понял, но

Код

                        if($r_host[0] !== substr($val_b,0,strlen($r_host[0]))){
                            
                            $blackpoint = true;
                        }


Вот это как раз наоборот сработает, то есть если сайт есть в блэк-листе,  то он пройдет
Может все таки вот так:?

Код

                        if($r_host[0] == substr($val_b,0,strlen($r_host[0]))){
                            
                            $blackpoint = true;
                        }


PM MAIL   Вверх
Valinur
Дата 25.1.2012, 00:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 102
Регистрация: 21.9.2007
Где: Москва

Репутация: 4
Всего: 6



Код

<?php
function is_blask($host, $array_host)
{
    foreach( $array_host as $black_host )
    {
        if ( ( $pos = stripos( $host, $black_host ) ) !== false )
        {
            if ( $pos == 0 )
                return true;    // в черном списке
            elseif( $pos > 0 and $host[$pos-1] == '.' )    // в черном списке по поддомену
                return true;
            else
                continue;   // продолжаем поиск
        }
    }
        
    return false;
}

$host_test_1 = 'myhost.com';        // не должен пройти
$host_test_2 = 'www.myhost.ru';     // должен пройти

/**
 * Содержимое файла следующее

onlymyhost.com
www.myhost.com
test.com

myhost.ru

*/

// типо прочитали из файла и получили массив
$black_hosts = array (
    'onlymyhost.com',
    'www.myhost.com',
    'test.com',
    '',
    'myhost.ru');
    
// зачистка пустых строк, чтобы этого не делать в функции
array_filter( $black_hosts, function($value) { return trim($value) == '';} );

/**
 * Вообще, вот эта строчка кода лишняя. Они здесь лишь потому, что 
 * "...например если в списке есть .denver.ru то сайты test.denver.ru уже не должны пройти..."
 * А вообще, корневой домен лучше задавать как denver.ru. Без точки в начале строки.
 */         
array_map( function($value) { return trim( $value, '.' ); }, $black_hosts);      

  
$is_black_1 = is_blask( $host_test_1, $black_hosts );
$is_black_2 = is_blask( $host_test_2, $black_hosts );

var_dump( $is_black_1 );
var_dump( $is_black_2 );
?>

результар работы
Код

bool(false) bool(true) 

как и должно быть

Это сообщение отредактировал(а) Valinur - 25.1.2012, 00:54
--------------------
Не бойтесь совершенства, Вы все равно его не достигнете (с) ...
PM MAIL   Вверх
Gold Dragon
Дата 25.1.2012, 07:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



так... что-то каша какая-то.. 

neoks,  у тебя есть список сайтов (именно доменов) в файле (чёрном списке) - это я понял.
 У тебя есть переменная, которая хранит в которой хранится сайты (домены) которые уже находятся в "утверждённом" списке.

теперь вопросы:
- откуда берутся данные в переменной?
- от куда берётся список (файл) с сайтами? это ты сам набиваешь или импортируешь?
- в каком формате хранятся "сайты" в файле?
- задача пополнить имеющийся список новым списком из файла?


Это сообщение отредактировал(а) Gold Dragon - 25.1.2012, 07:33


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
neoks
Дата 25.1.2012, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 5.7.2010

Репутация: нет
Всего: 1



Valinur, Спасибо, ша протестируем  smile 

Gold Dragon, Все очень просто, есть черный список и есть переменная которая каждый раз меняется, мне нужно было проверять эту переменную на наличие в черном списке )
PM MAIL   Вверх
Gold Dragon
Дата 26.1.2012, 08:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



neoks, ты не ответил в каком формате хранятся данные и в каком формате данные в переменной?

Просто в зависимости от того как ты хранишь разный подход к проверке..

Ну вот могу предложить вариант если в списке только домены в таком виде
Цитата

denver.ru
mail.ru
yandex.ru
www.ru

ну и сам код будет совсем простеньким
Код

// объявляем переменную с результатом
$result = false;
// переменная с адресом
$host_s = 'http://qw.denver.ru/index.php';

// получаем список адресов
$host_array = file("list.txt");

// прогоняем массив с проверкой
foreach($host_array as $host){
    // ищем подстроку
    $result = strpos($host_s, rtrim($host));

    // прерываем если найдена позиция подстроки
    if(is_integer($result)) break;
}

// ну и выводим результат
if(is_integer($result)){
    echo 'Ура! Нашли!';
}else{
    echo 'Увы, ничего нет...';
}



Это сообщение отредактировал(а) Gold Dragon - 26.1.2012, 08:15


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
neoks
Дата 26.1.2012, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 5.7.2010

Репутация: нет
Всего: 1



Gold Dragon формат таков, в переменной $host_s хранится $_SERVER["HTTP_HOST"] и в черном списке идет простой текстовый файл где я пишу какой нужно блокировать.


Простая на вид функция strpos должна вроде все решить, я тоже с нее начинал, но она все равно пропускала домены )
Вообшем все равно спасибо за помощь, я протестировал код Valinur работает отлично!  smile 
PM MAIL   Вверх
Gold Dragon
Дата 26.1.2012, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



neoks, а приведи пример который моя пропускает


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
neoks
Дата 26.1.2012, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 5.7.2010

Репутация: нет
Всего: 1



Gold Dragon,я не говорил что твой код пропускает, не пойми не правильно, просто я не очень доверяю strpos() уж очень часто она меня подводила.  smile  
К то муже я уже внедрил код от Valinur
PM MAIL   Вверх
Gold Dragon
Дата 26.1.2012, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



а, ну тогда ладно.. просто мой короче и проще.. и не должен пропускать ;)

Цитата(neoks @  26.1.2012,  19:33 Найти цитируемый пост)
просто я не очень доверяю strpos() уж очень часто она меня подводила. 
так не бывает.. smile кстати, очень замечательная функция. Я считаю её одной из лучших для проверки /сверки строк... Проблемы возникают в основном (у начинающих) при сравнении.. Обрати внимание что я проверяю и поймёшь где может быть ошибка ;)



--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0849 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.