Одной строкой вместо файла

e_moon

Новичок
Одной строкой вместо файла

Написал скрипт рейтинга ресурсов в каталоге. Работает, но есть одно неудобство - для каждого голосования необходимо создать 1 $id-файл. Т.е. придеться выгрузить (с запасом) 100 штук файлов. А если со временем количество ресурсов увеличиться, то придеться догружать еще. И так до бесконечности... Вопрос родился сам по себе: как мне простейшим способом (чтоб не пришлось переписывать весь код) заменить целый файл
одной строкой из одного общего файла?

<!--poll-->
<?php
$data="poll/$id.dat"; //$id -ид страницы, на которой вызываться голосование и имя файла

$file = fopen($data, "r+t");
$content=fread($file, filesize($data));
$content=explode('-', $content);
if($choice) $content[0]=$content[0]+$choice;
if($service) $content[1]=$content[1]+$service;
if($atmosphere) $content[2]=$content[2]+$atmosphere;
if($allvotes) $content[3]=$content[3]+1;
?>
<!--poll-->

Заранее всем спасибо.
 

e_moon

Новичок
Не буду спорить - с БД лучше и проще.
А вот если без БД?..
Как бы корректно заменить $data из файла на строку?
 

e_moon

Новичок
Cougar
Ну, как я понял это так:

$result="$a, $b, $c, $d, $e, $id\n";
$content=fread($file, serialize($result));

Правда что-то не так (постоянно обнуляет строку). Расталкуйте истину
 

Cougar

Кошак
e_moon
hint: Сераилизовать можно и массив.
hint2: Есть функция для десераелизации. Найти ее - это тебе домашнее задание :)

А вообще - к своему стыду, я вынужден признать, что я так и не понял, в чём заключается задача. Поэтому всё, что я тут наплёл - вполне возможно, бред.
 

Фанат

oncle terrible
Команда форума
вот я тоже не понял, поэтому не стал писать, что serialize, по моему, не очень удачное решение. Если при хранении оно и экономит пару команд, но вот при поиске тормоза получатся знатные.
 

e_moon

Новичок
Господа, с Вашего позволения, уверну от темы к конкретной проблеме. С serialize буду походу разбираться, но я же хочу САМЫМ ПРОМТЫМ способом. У меня тоже вариант появился (Коственное спасибо Фанат , я внимательно прочел твои советы в [url http://phpclub.ru/talk/showthread.php?threadid=61577]топике по разбитию страниц в гостевой[/url]. Там конечно не о том, но array мне пригодился. Как вывести я разобрался, не могу только правильно ПЕРЕписать нужную строку).

A.P.S. Есть файл в котором куча строк, каждая из которых соответствует конкретному голосованию. Я получаю массив в виде строк (массив читает по \n)...

А пришло в голову самое простое. Так получаеться загрузить нужную строку из массива для $id:
Код:
  $array=file('vote.dat');
  $content=$array[$id];
Одна проблема остаеться - как переписать нужную строку, не задевая остальных???
Сейчас у меня так, но это не работает правильно:
Код:
  $content=implode("-", $content);
  rewind($file);
  fwrite($file, $content);
  fclose($file);
Если не сложно, начертайте вариант.

-~{}~ 29.01.05 19:55:

Может нужно задать строку? Только вот как ее приравнять к стоке из массива?
 

Crys

Двинутый новичок
как переписать нужную строку, не задевая остальных???
Код:
  $array=file('vote.dat');
  $array[$id]="Новая фигня всякая...";
  $t=implode("-",$array);// (тока для строк вроде бы как нужно "\r\n" вместо "-")
  $file=fopen('vote.dat','w');
  fwrite($file, $t);
  fclose($file);
 
Сверху