Кошки рулят
11.02.2015 - 03:00
Дело не в дэнвере - на реальном сервере тоже самое
Кошки рулят
11.02.2015 - 03:37
Ну, ясно же, что чудес не бывает ...
Причина нашлась - список дублировался при добавлении записи в список,
т.е. к тому времени, когда выполнялся код он уже был удвоенным.
А все из-за того, что сначала файл открывался с ключом 'w', а потом захотелось козе уксуса и заменил его на 'a'. Поэтому когда писал и проверял добавление записи все работало, а когда стал удалять, с ключами засуетился и поменял. Тут-то все и началось.
День убил на такую ерунду ... я в бешенстве ...
inpost
11.02.2015 - 03:40
Ты нам код показал с ключом 'w'
В следующий раз показывай корректный код.
_____________
Обучаю веб-программированию качественно и не дорого:
http://school-php.comФрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
sergeiss
11.02.2015 - 04:34
Цитата (Кошки рулят @ 11.02.2015 - 03:37) |
День убил на такую ерунду ... я в бешенстве ... |
Самое главное, что разобрался. И беситься не стОит
Относись философски. Потому что на такие мелочи, на самом деле, уходит много времени. Зачастую по известному соотношению "80/20": 80% работы выполняется за 20% времени, а оставшиеся 20% работы выполняются за оставшиеся 80% времени.
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
Кошки рулят
11.02.2015 - 04:37
Кстати,
$word = 'lalala';
$file = file_get_contents('./file.txt');
$file = str_replace(PHP_EOL.$word.PHP_EOL, PHP_EOL, $file);
file_put_contents('./file.txt', $file);
тоже работает.
Спасибо volter9, FatCat рулит
А можно найти в таком файле-списке
целую строку аналогичным образом?
$file = file_get_contents('./file.txt');
$pos = stripos($file, PHP_EOL.$login.PHP_EOL);
if ($pos === false) {
print("-1");}
else{
print("1");
}
Кошки рулят
11.02.2015 - 04:43
Цитата (inpost @ 10.02.2015 - 23:40) |
Ты нам код показал с ключом 'w' В следующий раз показывай корректный код. |
То, что показал, там и был 'w', 'a' был в другом месте, в том-то и дело.
В этот файл пишется логин при входе и удаляется при выходе. Вот при входе-то, проверяя нет ли уже такого логина в файле я и копировал список, а потом добавлял в него новый логин.
Кошки рулят
11.02.2015 - 05:04
Цитата (sergeiss @ 11.02.2015 - 00:34) |
Самое главное, что разобрался. |
Прием у меня один есть - 100% работает в таких случаях: Берешь чистый лист и начинаешь все заново не глядя на первый вариант.
Главное - правильно понять момент, когда этот прием пора уже и применить ...
А то получилось, что код писал 40 минут с перекуром, а ошибку искал целый день вместе с форумом, вместо того, чтобы уже через час тупого разглядывания кода, начать писать заново и правильно ...
Зато интересный способ показали. А я такие вещи люблю. На одинесных форумах раньше была такая забава: написать какую-нибудь сложную процедуру одним оператором.
Типа как переменную менять 0 на 1 и обратно
Можно
Если а=1 Тогда
а=о;
Иначе
а=1;
КонецЕсли;
а можно
а=1-а;
Или, например, как поменять местами две числовые переменные не вводя третью ...
Сейчас, правда, из-за этого снеговика поганого ни кода красивого никто уже не пишет, ни программистов тех не стало ... Вот это бесит реально!
Хоть профессию бросай.
Займись другой задачей чтобы не терять рабочее время! В добавок, во внерабочее время, жахни пивка пару бутылочек, сходи в кино, отвлекись от труда - расклинит и продолжишь свои нелегкие труды!
П.С. как запрограммировать уже подсказали
.
_____________
Трус не играет в хокей
FatCat
11.02.2015 - 16:00
Цитата (Кошки рулят @ 11.02.2015 - 03:37) |
FatCat рулит |
На самом деле нет.
Сразу не подумал, что искомая строка может быть первой или последней; в этом случае она не найдется.
Или при считывании файла нужно в начало и конец добавлять пустые строки, а записывать с удалением пустот по краям:
$word = 'lalala';
$file = PHP_EOL.file_get_contents('./file.txt').PHP_EOL;
$file = str_replace(PHP_EOL.$word.PHP_EOL, PHP_EOL, $file);
file_put_contents('./file.txt', trim($file));
В данном случае не важно как кодирован перевод строки: "\n" или "\n\r", но при работе с файлом эти различия тоже нужно помнить...
_____________
Бесплатному сыру в дырки не заглядывают...
Игорь_Vasinsky
11.02.2015 - 16:03
str_replace работает с однобайтовыми кодировками - будь там кириллица в юникоде - всё коту под хвост.
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Кошки рулят
11.02.2015 - 16:21
Цитата (FatCat @ 11.02.2015 - 12:00) |
Сразу не подумал, что искомая строка может быть первой или последней; в этом случае она не найдется. |
Все работает. Последняя запись благополучно находится и удаляется.
Кошки рулят
11.02.2015 - 16:27
Цитата (Игорь_Vasinsky @ 11.02.2015 - 12:03) |
str_replace работает с однобайтовыми кодировками - будь там кириллица в юникоде - всё коту под хвост. |
Не очень понимаю о чем ты говоришь. Хоть кириллицей, хоть латиницей - все работает.
Если есть 1С 7.7
http://www.1cpp.ru/forum/YaBB.pl?num=1423158339Запустите обработку и убедитесь лично.
http://www.1cpp.ru/forumfiles/Attachments/1cviter_001.zip
FatCat
11.02.2015 - 17:09
Цитата (Кошки рулят @ 11.02.2015 - 15:21) |
Последняя запись благополучно находится и удаляется |
Значит после "последней" записи есть перевод строки.
Цитата (Игорь_Vasinsky @ 11.02.2015 - 15:03) |
str_replace работает с однобайтовыми кодировками - будь там кириллица в юникоде - всё коту под хвост. |
Вместо одной русской буквы в юникоде, в однобайтной будет 2 символа кракозябр. Для str_replace будет не поиск изамена буквы "а", а поиск и замена "Рђ", но это никак не помешает найти и заменить.
Проблема будет если текст в юникоде, а строка для поиска в винкириллице... или наоборот.
_____________
Бесплатному сыру в дырки не заглядывают...
Кошки рулят
11.02.2015 - 17:29
Цитата (FatCat @ 11.02.2015 - 13:09) |
Значит после "последней" записи есть перевод строки. |
Конечно есть - см. тему
все записи в файл идут с переводом строки
fwrite($file, $tekstr."\n");
Цитата (FatCat @ 11.02.2015 - 13:09) |
Проблема будет если текст в юникоде, а строка для поиска в винкириллице... или наоборот. |
Это понятно, не понятно как проблема может возникнуть.
Файл создается самим скриптом при попытке записи в него
fopen("./file.txt","a+t")
строки добавляются и удаляются одним и тем же скриптом на одном и том же ресурсе. Как при этом может возникнуть конфликт кодировок?
Если я правильно понимаю, кодировка этого файла зависит от оси и настроек пхп сервера на котором выполняется скрипт. Если специально не управлять этими кодировками, она будет всегда одна (умолчальная сервера).
FatCat
11.02.2015 - 17:33
Цитата (Кошки рулят @ 11.02.2015 - 16:29) |
не понятно как проблема может возникнуть |
Если текст в файле и текст с поисковой строкой пришли из разных источников, они могут оказаться в разных кодировках.
_____________
Бесплатному сыру в дырки не заглядывают...
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.