Реклама на сайте Advertise with us

PHP, как проверять перез записью на дублирование в файле?

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:



С нами с 24.05.09
Сообщения: 1788
Рейтинг: 508

Ссылка на сообщениеДобавлено: 06/04/12 в 17:24       Ответить с цитатойцитата 

Всем привет!

Подскажите пожалуйста, как сделать так, чтобы не записывать в базу дубли уже существующих строк?

Т.е. у меня этот код записывает одну строку в файл-базу:

Код:
$zapis = "http://memino.ru/img/".$filename."|".$overtext."|".$overtext2."|"."\r\n";
$fh = fopen("baza.txt", "a");
fwrite($fh, $zapis);
fclose($fh);


Пробовал добавлять
Код:
$fh = array_map('trim', $fh);
if (array_search($zapis, $fh) !== false)
die('Уже в каталоге!');

- вообще перестает работать.

При обновлении страницы с кодом - она записывает очередную копию в файл-базу, а это не нужно.

Если не тяжело, подскажите пожалуйста механизм проверки на дублирование перед записью.

Заранее большое спасибо! smail04.gif

---

-1
 

💀💀💀

С нами с 31.05.10
Сообщения: 4688
Рейтинг: 727

Ссылка на сообщениеДобавлено: 06/04/12 в 17:34       Ответить с цитатойцитата 

Попробуй использовать это:
http://www.php.net/manual/en/function.in-array.php

5
 

Криптопохуист

С нами с 05.04.03
Сообщения: 17156
Рейтинг: 6019

Ссылка на сообщениеДобавлено: 06/04/12 в 17:35       Ответить с цитатойцитата 

Открой для себя sqlite

4
 

Добрых Дел Мастер

С нами с 03.05.08
Сообщения: 3143
Рейтинг: 1227

Ссылка на сообщениеДобавлено: 06/04/12 в 17:36       Ответить с цитатойцитата 

читаешь файл в массив. потом
array_search ( mixed $needle , array $haystack)

если true то не пишешь.

ты запись(строку) хочешь найти в $fh(ресурсе)...

пришел к победе коммунистического труда

4
 

www.phpdevs.com

С нами с 24.10.02
Сообщения: 16633
Рейтинг: 16105


Передовик Master-X (01.09.2005) Передовик Master-X (16.09.2005) Передовик Master-X (01.10.2005) Передовик Master-X (16.08.2006) Передовик Master-X (16.10.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 06/04/12 в 19:36       Ответить с цитатойцитата 

Советую писать в файл как есть и не заморачиватся над дублями. А дубли фильтровать уже при извлечении данных из файла. Весьма внушительно сэкономишь нагрузку на процессор.

Пишу на php/mysql/django за вменяемые деньги.
Обращаться в личку.

6
 



С нами с 27.09.03
Сообщения: 5454
Рейтинг: 2506

Ссылка на сообщениеДобавлено: 06/04/12 в 22:33       Ответить с цитатойцитата 

если производительность не важна, т.е. файл маленький, или запускается скрипт редко, то сойдет такое:
Код:
$zapis = 'hello world';
$lines = file('baza.txt');
$lines = array_map('trim', $lines);
if (!in_array($zapis, $lines))
  file_put_contents('baza.txt', $zapis."\n", FILE_APPEND);

иначе надо оптимизировать, либо как Stek сказал, либо читать построчно, сравнивать и если нашел дубль, то сразу выходить.

4
 



С нами с 07.10.01
Сообщения: 4835
Рейтинг: 3672


Передовик Master-X (16.06.2008)
Ссылка на сообщениеДобавлено: 06/04/12 в 23:22       Ответить с цитатойцитата 

Pentarh писал:
Открой для себя sqlite

+1
Очень удобно для небольших проектов.
По сути - SQL (со всеми его прелестями), но база в одном файле (как с текстовыми БД).

Лучшие в Рунете: товарная партнёрка - от 4 рублей за клик.
CPA агрегатор - тысячи отличных офферов!

6
 

tuberotator.com

С нами с 12.09.06
Сообщения: 804
Рейтинг: 1478


Передовик Master-X (01.01.2015) Передовик Master-X (16.01.2015)
Ссылка на сообщениеДобавлено: 06/04/12 в 23:29       Ответить с цитатойцитата 

вполне может подойти очень простая конструкция при небольшой базе, а вобще большие базы в таком формате не совсем правильно держать...

if(stristr($zapis, $fh)) {
echo dubl;
}else{
........
}

или

stripos($fh, $zapis);
.....
или

для более сложных задач preg_match

я думаю это будет проще и быстрее чем загонять в массив а потом перебирать

но все зависит от того какая у тебя база и данные

4
 



С нами с 27.09.03
Сообщения: 5454
Рейтинг: 2506

Ссылка на сообщениеДобавлено: 07/04/12 в 00:18       Ответить с цитатойцитата 

вы тока человека не путайте таким использованием $fh
в исходном примере это просто указатель на файл, а не содержимое.
а так вариант выше я думаю действительно самый простой.

Код:
$zapis = 'hello world';
if (stristr(file_get_contents('baza.txt'), $zapis) === false)
  file_put_contents('baza.txt', $zapis."\n", FILE_APPEND);

4
 



С нами с 24.05.09
Сообщения: 1788
Рейтинг: 508

Ссылка на сообщениеДобавлено: 07/04/12 в 03:05       Ответить с цитатойцитата 

Блин, вот я туплю:
Цитата:
http://memino.ru/img/memino.ru-1333756874.jpg|ЗАПИЛИ|МНЕ БЫСТРА БЛЕА|
http://memino.ru/img/memino.ru-1333756876.jpg|ЗАПИЛИ|МНЕ БЫСТРА БЛЕА|
http://memino.ru/img/memino.ru-1333756878.jpg|ЗАПИЛИ|МНЕ БЫСТРА БЛЕА|

При каждом обновлении - создается картинка с новым именем (стаб+текущее время). Конечно они все разные будут trollface.png

Большое спасибо за помощь, работает, тестил на "123" smail54.gif

Буду думать теперь, как бы теперь файлы называть, чтобы при каждом обновлении не создавался новый icon_biggrin.gif

---

-1
 

Криптопохуист

С нами с 05.04.03
Сообщения: 17156
Рейтинг: 6019

Ссылка на сообщениеДобавлено: 07/04/12 в 03:09       Ответить с цитатойцитата 

Ты мазохист чтоле? SQLite юзай тебе говорят.

4
 



С нами с 27.09.03
Сообщения: 5454
Рейтинг: 2506

Ссылка на сообщениеДобавлено: 07/04/12 в 03:25       Ответить с цитатойцитата 

Pentarh писал:
SQLite юзай тебе говорят.

нафига тут sqlite.. человек даже не сказал объем базы, там может макс тыща записей. зачем усложнять код.

4
 



С нами с 24.05.09
Сообщения: 1788
Рейтинг: 508

Ссылка на сообщениеДобавлено: 07/04/12 в 04:12       Ответить с цитатойцитата 

Pentarh: не умею я trollface.png

grozny: не могу сказать, т.к. все от трафа зависит

---

-1
 



С нами с 27.09.03
Сообщения: 5454
Рейтинг: 2506

Ссылка на сообщениеДобавлено: 07/04/12 в 15:41       Ответить с цитатойцитата 

Yabuti писал:
grozny: не могу сказать, т.к. все от трафа зависит

ну если просто зависит, т.е. на данный момент нету большого трафа, то надо юзать самое простое решение. будет траф переделаешь на базу.

4
 

Добрых Дел Мастер

С нами с 03.05.08
Сообщения: 3143
Рейтинг: 1227

Ссылка на сообщениеДобавлено: 07/04/12 в 16:00       Ответить с цитатойцитата 

Pentarh писал:
Ты мазохист чтоле? SQLite юзай тебе говорят.

ага. пока с файлами не наебутся - не поймут что база - единственно верное решение вообще под все связанное с программингом.
ее боятся. и бегают от нее. пока за шкирку силой не притащишь - буду с файлами плюхаться...до потери сознания



таблица логов. поля field1,field2 уникальные. дата вставляется автоматом при записи строки. в коде 1 строка INSERT с аттрибутом IGNORE(не пропустит дубли по уникальным полям) или INSERT ловящий ошибку базы при вставке. любой вариант

пришел к победе коммунистического труда

5
 

www.phpdevs.com

С нами с 24.10.02
Сообщения: 16633
Рейтинг: 16105


Передовик Master-X (01.09.2005) Передовик Master-X (16.09.2005) Передовик Master-X (01.10.2005) Передовик Master-X (16.08.2006) Передовик Master-X (16.10.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 07/04/12 в 16:17       Ответить с цитатойцитата 

FXIX писал:
пока с файлами не наебутся - не поймут что база - единственно верное решение вообще под все связанное с программингом.
ее боятся. и бегают от нее.


А потом возникает вторая стадия, когда в базу пихают все подряд и обращаются туда по любому чиху. В результате страница вордпресса с плагинами генерит по 100-300 запросов в базу icon_surprised.gif

Кстати столкнулся с ситуацией, что sqlite на многих дедикейтах банально отсутствует. Его админы выпиливают по принципу "все равно мускуль будет".

p.s. а логи все равно удобнее в текстовый файл писать. Потом уже кроном извлечь в базу и строить любые выборки.

Пишу на php/mysql/django за вменяемые деньги.
Обращаться в личку.

6
 



С нами с 24.05.09
Сообщения: 1788
Рейтинг: 508

Ссылка на сообщениеДобавлено: 07/04/12 в 16:59       Ответить с цитатойцитата 

Будет база, но попозже, когда научусь.

Я вообще в php как-то разочаровался, очень легко поломали скрипт trollface.png Да и код сложно оставлять читабельным, после 50 строк стало сложно ориентироваться в нем (возможно, из-за нулевого опыта).

Засел на Интуите за курс Питона, перепишу под него, как смогу кодить и базу прикручу icon_cool.gif

---

-1
 



С нами с 27.09.03
Сообщения: 5454
Рейтинг: 2506

Ссылка на сообщениеДобавлено: 07/04/12 в 17:38       Ответить с цитатойцитата 

Yabuti писал:
Да и код сложно оставлять читабельным, после 50 строк стало сложно ориентироваться в нем (возможно, из-за нулевого опыта).

не ленись давать переменным длинные но интуитивные имена, отступай больше строк между логическими блоками smail101.gif

4
 

www.phpdevs.com

С нами с 24.10.02
Сообщения: 16633
Рейтинг: 16105


Передовик Master-X (01.09.2005) Передовик Master-X (16.09.2005) Передовик Master-X (01.10.2005) Передовик Master-X (16.08.2006) Передовик Master-X (16.10.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 07/04/12 в 19:43       Ответить с цитатойцитата 

Yabuti писал:
Засел на Интуите за курс Питона, перепишу под него, как смогу кодить и базу прикручу


На питоне другие буквы используются ? icon_smile.gif

Пишу на php/mysql/django за вменяемые деньги.
Обращаться в личку.

-1
 

Добрых Дел Мастер

С нами с 03.05.08
Сообщения: 3143
Рейтинг: 1227

Ссылка на сообщениеДобавлено: 07/04/12 в 20:17       Ответить с цитатойцитата 

Stek писал:
p.s. а логи все равно удобнее в текстовый файл писать. Потом уже кроном извлечь в базу и строить любые выборки.


ну смотря какие логи. логи ошибок - можно в файл. в парсере курл не открыл страницу - допизды. в следующий заход откроет. страница в базе висит как не распарсенная.

а логи с данными только в базу. тут вроде логи с данными )

пришел к победе коммунистического труда

5
 



С нами с 24.05.09
Сообщения: 1788
Рейтинг: 508

Ссылка на сообщениеДобавлено: 08/04/12 в 06:32       Ответить с цитатойцитата 

Stek: да icon_neutral.gif

---

-1
 



С нами с 25.12.03
Сообщения: 1003
Рейтинг: 462

Ссылка на сообщениеДобавлено: 08/04/12 в 14:28       Ответить с цитатойцитата 

Откройте для себя сериализацию icon_smile.gif

Sutra - лучшая система управления трафом

1
 



С нами с 27.09.03
Сообщения: 5454
Рейтинг: 2506

Ссылка на сообщениеДобавлено: 08/04/12 в 15:05       Ответить с цитатойцитата 

begemot писал:
Откройте для себя сериализацию

так она нихуйова тормозит на больших объемах данных

-1
 



С нами с 25.12.03
Сообщения: 1003
Рейтинг: 462

Ссылка на сообщениеДобавлено: 08/04/12 в 17:41       Ответить с цитатойцитата 

grozny вывод - на больших не использовать

Sutra - лучшая система управления трафом

1
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »