С нами с 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('Уже в каталоге!'); |
- вообще перестает работать.
При обновлении страницы с кодом - она записывает очередную копию в файл-базу, а это не нужно.
Если не тяжело, подскажите пожалуйста механизм проверки на дублирование перед записью.
Заранее большое спасибо!
|
|
|
|
💀💀💀
С нами с 31.05.10
Сообщения: 4689
Рейтинг: 728
|
Добавлено: 06/04/12 в 17:34 |
|
|
|
|
Криптопохуист
С нами с 05.04.03
Сообщения: 17158
Рейтинг: 6019
|
Добавлено: 06/04/12 в 17:35 |
Открой для себя sqlite
|
|
|
|
Добрых Дел Мастер
С нами с 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
|
Добавлено: 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 сказал, либо читать построчно, сравнивать и если нашел дубль, то сразу выходить.
|
|
|
|
С нами с 07.10.01
Сообщения: 4835
Рейтинг: 3672
|
Добавлено: 06/04/12 в 23:22 |
Pentarh писал: | Открой для себя sqlite |
+1
Очень удобно для небольших проектов.
По сути - SQL (со всеми его прелестями), но база в одном файле (как с текстовыми БД).
|
|
|
|
tuberotator.com
С нами с 12.09.06
Сообщения: 804
Рейтинг: 1478
|
Добавлено: 06/04/12 в 23:29 |
вполне может подойти очень простая конструкция при небольшой базе, а вобще большие базы в таком формате не совсем правильно держать...
if(stristr($zapis, $fh)) {
echo dubl;
}else{
........
}
или
stripos($fh, $zapis);
.....
или
для более сложных задач preg_match
я думаю это будет проще и быстрее чем загонять в массив а потом перебирать
но все зависит от того какая у тебя база и данные
|
|
|
|
С нами с 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); |
|
|
|
|
С нами с 24.05.09
Сообщения: 1788
Рейтинг: 508
|
Добавлено: 07/04/12 в 03:05 |
Блин, вот я туплю:
При каждом обновлении - создается картинка с новым именем (стаб+текущее время). Конечно они все разные будут
Большое спасибо за помощь, работает, тестил на "123"
Буду думать теперь, как бы теперь файлы называть, чтобы при каждом обновлении не создавался новый
|
|
|
|
Криптопохуист
С нами с 05.04.03
Сообщения: 17158
Рейтинг: 6019
|
Добавлено: 07/04/12 в 03:09 |
Ты мазохист чтоле? SQLite юзай тебе говорят.
|
|
|
|
С нами с 27.09.03
Сообщения: 5454
Рейтинг: 2506
|
Добавлено: 07/04/12 в 03:25 |
Pentarh писал: | SQLite юзай тебе говорят. |
нафига тут sqlite.. человек даже не сказал объем базы, там может макс тыща записей. зачем усложнять код.
|
|
|
|
С нами с 24.05.09
Сообщения: 1788
Рейтинг: 508
|
Добавлено: 07/04/12 в 04:12 |
Pentarh: не умею я
grozny: не могу сказать, т.к. все от трафа зависит
|
|
|
|
С нами с 27.09.03
Сообщения: 5454
Рейтинг: 2506
|
Добавлено: 07/04/12 в 15:41 |
Yabuti писал: | grozny: не могу сказать, т.к. все от трафа зависит |
ну если просто зависит, т.е. на данный момент нету большого трафа, то надо юзать самое простое решение. будет траф переделаешь на базу.
|
|
|
|
Добрых Дел Мастер
С нами с 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
|
Добавлено: 07/04/12 в 16:17 |
FXIX писал: | пока с файлами не наебутся - не поймут что база - единственно верное решение вообще под все связанное с программингом.
ее боятся. и бегают от нее. |
А потом возникает вторая стадия, когда в базу пихают все подряд и обращаются туда по любому чиху. В результате страница вордпресса с плагинами генерит по 100-300 запросов в базу
Кстати столкнулся с ситуацией, что sqlite на многих дедикейтах банально отсутствует. Его админы выпиливают по принципу "все равно мускуль будет".
p.s. а логи все равно удобнее в текстовый файл писать. Потом уже кроном извлечь в базу и строить любые выборки.
|
|
Пишу на php/mysql/django за вменяемые деньги.
Обращаться в личку.
|
6
|
|
|
С нами с 24.05.09
Сообщения: 1788
Рейтинг: 508
|
Добавлено: 07/04/12 в 16:59 |
Будет база, но попозже, когда научусь.
Я вообще в php как-то разочаровался, очень легко поломали скрипт Да и код сложно оставлять читабельным, после 50 строк стало сложно ориентироваться в нем (возможно, из-за нулевого опыта).
Засел на Интуите за курс Питона, перепишу под него, как смогу кодить и базу прикручу
|
|
|
|
С нами с 27.09.03
Сообщения: 5454
Рейтинг: 2506
|
Добавлено: 07/04/12 в 17:38 |
Yabuti писал: | Да и код сложно оставлять читабельным, после 50 строк стало сложно ориентироваться в нем (возможно, из-за нулевого опыта). |
не ленись давать переменным длинные но интуитивные имена, отступай больше строк между логическими блоками
|
|
|
|
www.phpdevs.com
С нами с 24.10.02
Сообщения: 16633
Рейтинг: 16105
|
Добавлено: 07/04/12 в 19:43 |
Yabuti писал: | Засел на Интуите за курс Питона, перепишу под него, как смогу кодить и базу прикручу |
На питоне другие буквы используются ?
|
|
Пишу на 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: да
|
|
|
|
С нами с 25.12.03
Сообщения: 1003
Рейтинг: 462
|
Добавлено: 08/04/12 в 14:28 |
Откройте для себя сериализацию
|
|
|
|
С нами с 27.09.03
Сообщения: 5454
Рейтинг: 2506
|
Добавлено: 08/04/12 в 15:05 |
begemot писал: | Откройте для себя сериализацию |
так она нихуйова тормозит на больших объемах данных
|
|
|
|
С нами с 25.12.03
Сообщения: 1003
Рейтинг: 462
|
Добавлено: 08/04/12 в 17:41 |
grozny вывод - на больших не использовать
|
|
|
|