Помогите плиз.
Можно ли сделать так чтоб ip записалась в file.log (в лог) и сохранилась потом в БД. Если удалить запись из БД хочу чтоб удалилась из файла лога. Как написать такое код?
Конечно можно. Не совсем понятно, ip автоматически должен записываться или вручную? ip кого, посетителей или выборочно?
ip записывается на лог и бд, а вот удалить придется вручную, я хочу что автоматически удалился из лог, когда я удаляю из БД
А в чем проблема главная? Вроде все просто
ibni, можно так сделать
[code]<?php
# забираем ip
$ip = $_SERVER['REMOTE_ADDR'];
# ЗАПИСЬ
# проверяем на существование в БД данного ip
if(mysql_num_rows(mysql_query("SELECT * FROM `ip_table` WHERE `ip` = '{$ip}';") == 0){
# пишем в БД
mysql_query("INSERT INTO `ip_table` SET `ip` = '{$ip}';"
# записываем ip в log - список
$fopen = fopen('./file.log', 'a+');
fwrite($fopen, $ip . "\n"
fclose($fopen);
}
# УДАЛЕНИЕ
# проверяем на существование данного ip в БД
if(mysql_num_rows(mysql_query("SELECT * FROM `ip_table` WHERE `ip` = '{$ip}';")){
# удаляем с БД
mysql_query("DELETE FROM `ip_table` WHERE `ip` = '{$ip}';"
# выводим список существующих ip из БД
$res = mysql_query("SELECT * FROM `ip_table` WHERE `ip`;"
$out = false;
while($row = mysql_fetch_assoc($res)){
$out .= $row['ip'] . "\n";
}
# переписываем log - список
$fopen = fopen('./file.log', 'w+');
fwrite($fopen, trim($out));
fclose($fopen);
}
?>[/code]
Выше fopen, fwrite, fclose можно заменить одним file_put_contents()
Чтобы найти элемент в файлике и удалить его (параллельно с удалением с бд) можно просто получить содержимое файла через file_get_contents() и через str_replace() просто заменить его на NULL - пустую строку или PHP_EOL - перенос.
В зависимости а каком формате там все это храниться.
Можно использовать и JSON.
Можно и так сделать, только зачем лишний раз открывать файл? Когда можно просто с базы взять готовый список и сразу записать при помощи fopen..., так намного производительнее.
Не производительней.
В моем случае не вытаскивается информация по всем записям с бд. Кроме того, там еще и хранение ее в переменной для перезаписи.
Ну и использование устаревшего mysql_ драйвера.
Ещё как производительнее. А если в файле 2000-3000 строк? М? Это уже процесс! А для бд это миг!
Они нигде лишний раз не сохраняются и не занимают память в отличии от твоего варианта. Если ты не знал, то бд так же хранит информацию в файлах и на прямую, без сложных выборок - прямая работа с файлом выигрывает, поскольку нету лишней сущности для выполнения одной и той же операции.