Ошибки в обработке текстовой БД

Sir-J

Новичок
Ошибки в обработке текстовой БД

Здравствуйте.
При разработке скрипта у меня возникли проблемы,
хочу проконсультироваться.
Дело заключается в следующем.
У нас есть База данных (в формате txt)
в которой содержатся все приборы с ценами, к примеру:
прибор##цена##описание##и т.д.
Как вы поняли, разделитель - ##
Дело в том, что на страничке слева должно быть древовидное меню,
а справа - сам прайс-лист.
Я пытаюсь сначала открывать файл, затем обрабатывать и закрывать.
Далее я открываю файл заново и обрабатываю его уже для серидины страницы.
Ну так вот, обработав один раз PHP отказывается обрабатывать файл (а он примерно 2 Мб)
второй раз и выдает ошибку.
Нет ли такого способа, чтобы справится с обработкой каждой строки только один раз,
а не открывать файл 2 раза???
Пробовал ставить sleep, но нет никакого толка.
Жду советов.
Заранее спасибо.
PHP:
<?
$lines = file('./kipadmin/dbase/production.txt');
$fl = fopen ("./kipadmin/dbase/production.txt", "r");
{
foreach ($lines as $line_num => $line_num)
{
$date = fgets($fl);
list($id,$name,$link,$price,$n,$opisglav,$opis,$tehnglav,$tehn,$uslglav,$usl,$garglav,$gar,$komplglav,$kompl,$field,$img1,$img2,$img3) = split('##', $date);

if ($id == "3")
{
echo "<a href=\"prod.php?&stroka=".($line_num+2)."\">результат</a>";
}

}

}
fclose($fl);

$lines = file('./kipadmin/dbase/production.txt');
$fl = fopen ("./kipadmin/dbase/production.txt", "r");
{
foreach ($lines as $line_num => $line_num)
{
$date = fgets($fl);
list($id,$name,$link,$price,$n,$opisglav,$opis,$tehnglav,$tehn,$uslglav,$usl,$garglav,$gar,$komplglav,$kompl,$field,$img1,$img2,$img3) = split('##', $date);

if ($id == "1")
{

echo "
<a href=\"prod.php?&stroka=".($line_num+2)."\">результат 2</a>
";
}

}

}
fclose($fl);
?>
 

kvf77

Red Devil
кто тебе мешает обрабатывать его за один раз, просто создавать два разных массива? а потом работать уже с этими массивами. это практичнее и быстрее
 

Кром

Новичок
>кто тебе мешает обрабатывать его за один раз, просто создавать два разных массива?

Два разных массива тут не нужны.

Sir-J, ты отдаешь себе отчет в том, что делают эти строки?
>$lines = file('./kipadmin/dbase/production.txt');
>$fl = fopen ("./kipadmin/dbase/production.txt", "r");

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

Profic

just Profic (PHP5 BetaTeam)
Sir-J
Код который ты привел открывает файл 4 (ЧЕТЫРЕ) раза
 

P.Anton

Новичок
Ну дак открой файл один раз. Запиши его содержимое в массив и работай с массивом.

//-------
Пробовал ставить sleep, но нет никакого толка.

А вот это для чего, я так и не понял... Причем тут sleep-то?

-~{}~ 28.07.05 18:05:

$arrFileContent = file('bububu.ru');
$arrData = array();
for ($iI=0; $iI<count($arrFileContent); $iI++) {
list ($arrCurrData['iId'],$arrCurrData['iBububu'],....) = explode("##",arrFileContent[$iI]);
$arrData[] = arrCurrData;
}
 

Sir-J

Новичок
бррррр...
совсем запутался...
я думал, что fopen нужен для открытия и чтения файла,
а file для чтения его строк...
Ошибался, большое спасибо.
Только вот все-равно не очень понял.
Вы можете, если не трудно, ошибки в моем коде сделать, т.е. так что-ли?
PHP:
$arrFileContent = file('bububu.ru');
$arrData = array();
for ($iI=0; $iI<count($arrFileContent); $iI++) {
list ($arrCurrData['iId'],$arrCurrData['iBububu'],....) = explode("##",arrFileContent[$iI]);
$arrData[] = arrCurrData;
}
// тут распологается основной код??
 

phobos

Новичок
тебе уже всё написали
просто добавь print_r ($arrData);
и сразу станет понятно что делает код.
 
Сверху