Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Проверка значений из БД и файла
Покинул форум
Сообщений всего: 128
Дата рег-ции: Июль 2011 Откуда: Киев
Помог: 1 раз(а)
[+]
Народ, подскажите как реализовать такое:
Есть некий сайт, база которого состоит к примеру из трех таблиц.
Первая таблица bad_sites содержит два поля (id, site). В эту таблицу администратор заносит домены сайтов (например 'rambler.ru'), которые содержат порно-картинки и т.п.
Вторая таблица bad_words тоже состоит из двух полей (id, word). В эту таблицу администратор вносит всякие неприличные слова.
В третью таблицу пишутся id, ссылка на картинку, title картинки и ключевые слова, которые прошли проверку, тоесть не находятся в первых двух таблицах. Об этой таблице подробней расскажу позже.
Есть некий лог-файл, в который робот пишет какие картинки просматривали пользователи, тайтлы картинок и ключевые слова картинки.
Надо извлечь из лог-файла ссылку на картинку, тайтл и ключевые слова картинок, проверить чтоб эти данные проходили проверку на цензуру, тоесть чтоб сайт и слова не находились в черном списке (напоминаю что сайт и слова находятся в таблицах bad_sites и bad_words) и если все ок, то данные записывались в третью таблицу. В нее собственно записывается ссылка на картинку, тайтл картинки, ключевые слова.
);") or die(mysql_error());//то что прошло проверку пишется в БД
}
}
}
}
Тоесть в БД надо записывать только те ссылки на картинки, тайтлы и alt(ключевые слова), сервера которых, а также ключевые слова и тайтлы не находятся в черном списке (в первой и второй таблице). Где-то в последнем цикле у меня ошибка, записывается ссылка на картинку только первого сайта, который прошел проверку, ключевые слова и тайтлы вообще игнорируются и пишутся в БД... Подскажите что не так во второй части скрипта?
KingStar
Отправлено: 13 Октября, 2012 - 11:48:41
Участник
Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011 Откуда: Беларусь
if(eregi($validate['word'],$array_title[$i])||eregi($validate['word'],$array_alt[$i]))//проверяем по регулярному выражению тайтл и ключевые слова
eregi - с версии PHP 5.3.0 эта функция считается УСТАРЕВШЕЙ. Крайне не рекомендуется полагаться на эту возможность.
----- То что программа работает, не означает что она написана правильно!
Striker
Отправлено: 13 Октября, 2012 - 12:34:15
Частый гость
Покинул форум
Сообщений всего: 128
Дата рег-ции: Июль 2011 Откуда: Киев
Помог: 1 раз(а)
[+]
KingStar
Цитата:
про file не в курсе???
Вкурсе. Чтение с помощью file не совсем подходит. В реальном проекте лог-файл разростается на 100 мб каждый день, представляешь какой будет размер массива для дальнейшей обработки?
Потому выбор пал на file_get_contents... считываем весь файл в переменную, с ним и работаем. В реальном проекте после считывания файл очищается.
Вообщем нет смысла читатьф айл построчно и вообще вопрос не в этом.
Цитата:
eregi - эта функция считается УСТАРЕВШЕЙ.
Знаю, но тем не менее она работает.
Лучше б подсказали каким образом записывать в третью таблицу ссылку, тайтл и ключевые слова, если они не числятся первых двух таблицах...
KingStar
Отправлено: 13 Октября, 2012 - 12:47:24
Участник
Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011 Откуда: Беларусь
Помог: 69 раз(а)
Striker пишет:
Вкурсе. Чтение с помощью file не совсем подходит. В реальном проекте лог-файл разростается на 100 мб каждый день, представляешь какой будет размер массива для дальнейшей обработки?
Потому выбор пал на file_get_contents... считываем весь файл в переменную, с ним и работаем. В реальном проекте после считывания файл очищается.
ты интересный а тем, что ты читаешь файл в переменную с помощью file_get_contents в память, и затем дополнительно получаешь массив с помощью explode все в ту же память - это по твоему рационально и на второе - file_put_contents все ровно какой функцией ты читаешь файл , ну и на компот - скорее всего у тебя проблема все в той же УСТАРЕВШЕЙ функции eregi
помогать - тебе помогаешь, но ты я вижу чихаешь на нашу помощь, пусть даже не по теме
----- То что программа работает, не означает что она написана правильно!
Striker
Отправлено: 13 Октября, 2012 - 12:57:26
Частый гость
Покинул форум
Сообщений всего: 128
Дата рег-ции: Июль 2011 Откуда: Киев
Помог: 1 раз(а)
[+]
KingStar
По поводу того как читать файл у меня вопросов нет. Хотя нет... считай что я читаю файл так как тебе этого хочется, ок? Что дальше, каким образом в третью таблицу загонять данные если в строке нет сходств из таблицы bad_sites и bad_words?
armancho7777777
Отправлено: 13 Октября, 2012 - 12:59:03
Активный участник
Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011 Откуда: Москва
Помог: 221 раз(а)
Striker пишет:
Чтение с помощью file не совсем подходит. В реальном проекте лог-файл разростается на 100 мб каждый день, представляешь какой будет размер массива для дальнейшей обработки?
"Читайте" файл по строчно. fgets (Добавление)
Ну, или храните данные в виде сериализованного массива.
Striker
Отправлено: 13 Октября, 2012 - 13:04:38
Частый гость
Покинул форум
Сообщений всего: 128
Дата рег-ции: Июль 2011 Откуда: Киев
Помог: 1 раз(а)
[+]
armancho7777777
Так и сделал, уже читаю с помощью fgets... лучше помогите со второй частью скрипта.
KingStar
Отправлено: 13 Октября, 2012 - 13:12:19
Участник
Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011 Откуда: Беларусь
Помог: 69 раз(а)
недостаточно инфы, нужно воспроизводить программу. так, пологаясь на догадки, врядле можно что-то конктретно сказать
----- То что программа работает, не означает что она написана правильно!
Мелкий
Отправлено: 13 Октября, 2012 - 13:22:09
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
KingStar пишет:
про file не в курсе???
Справедливости ради замечу, что file_get_contents + explode работает быстрее, чем file. Поэтому если памяти достаточно и не волнуют различия окончаний строк в выходных массивах - это предпочтительный способ.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.