Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Сравнение строк в файле stristr()


Автор: Alek74 11.4.2006, 18:31
Код

$num = 123456;

$fo = fopen ("num.dat", 'r');
$data = fread ($fo, filesize("num.dat"))

if (!stristr($data,$num)){

$file=fopen("num.dat",'a');

fputs($file,$num."\r\n");
}


Если после этого пытаемся записать в файл число 1234567, то оно записываеться, а вот если число 12345, то нет.
Как выйти из положения используя именно этот алгоритм?

Автор: wsr 11.4.2006, 22:10
Ну во первых открытый файл сначала нужно закрыть!
Код

$num = "123456";
$fo = fopen ( "num.dat", "r" );
$data = fread ( $fo, filesize ( "num.dat" ) );
fclose ( $fo );
if ( !stristr ( $data, $num ) )
{
    $file = fopen ( "num.dat", "a" );
    fputs ( $file, $num ."\r\n" );
    fclose ( $file );
}


А во вторых ( если не находит строку, которая точно есть в файле ) то, это все примудрости stristr и работы с текстовой информацией полученной из файла.

ИМХО БД лучше в 100раз, хотя не буду отрицать, что работа с файлами тоже иногды нужна! smile)

Автор: Wolf1994 11.4.2006, 22:44
Строка "12345" является составляющей "1234567" - естественно она находится в ней и условие отрицающее это не выполняется. Выход - ограничивать аргумент символами разделения. То есть, так будет работать:
Код

$num = "|123456|";
$fo = fopen ( "num.dat", "r" );
$data = fread ( $fo, filesize ( "num.dat" ) );
fclose ( $fo );
if ( !stristr ( $data, $num ) )
{
    $file = fopen ( "num.dat", "a" );
    fputs ( $file, $num ."\r\n" );
    fclose ( $file );
}

- и для "|1234567|" и для "|12345|".
Добавлено @ 22:47
Или, просто, писать:
Код

if ( !stristr ( $data, $num."\r\n" ) )

а лучше:
Код

if ( !stristr ( $data, $num."\n" ) )
//...
fputs ( $file, $num ."\n" );

- всё таки под Юниксом используется "\n"...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)