|
|
|
|
|
для: Юлька
(25.08.2009 в 22:51)
| | вот так, но возможно где-то что-то упустил.
работас файлами на самом деле большой геморрой, зря вы и Лена не хотите юзать БД
<?php
// Функция чтения файла
function read_file_func($file){
// Открываем файл если он существует
if(file_exists($file))
{
$f=fopen($file, "r+t") or die("Невозможно открыть файл");
// Блокируем файл (разделяемая блокировка)
flock($f, LOCK_SH); // ждём завершения процесса записи
// В файл теперь никто не пишет, можно читать
if(filesize($file)>0){
$cont=explode("\n",fread($f,filesize($file))); // считываем файл
}
fclose($f); // закрываем файл
}
else
{
$cont="Файл не существует";
}
// Возвращаем значение
return $cont;
}
// Функция записи в файл
function count_write($filename,$peremennaya) {
// Создаём файл если он не существует
// ни в коем случае не используем w или w+
if(!file_exists($filename))
{
fclose(fopen($filename, "a+t"));
}
// Открываем файл для чтения и записи в режиме r+t
// некоторые версии FreeBSD имеют проблемы с режимом а+
// и не могут установить указатель на начало файла при помощи fseek
$f=fopen($filename, "r+t") or die("Невозможно открыть файл");
// Блокируем файл (блокировка с запретом "подвисания")
while(!flock($f, LOCK_EX+LOCK_NB))
{
sleep(1); // ждём одну секунду
}
// Файл заблокирован, можно производить запись
$cont=array();
if(filesize($filename)>0){
$cont=explode("\n",fread($f,filesize($filename))); // считываем файл
}
array_unshift($cont,$peremennaya);
ftruncate($f,0); // очищаем файл
fseek($f,0,SEEK_SET); // переводим указатель в начало файла
$k=0;
foreach($cont as $value){
if($k>4) break;
if($value != ""){
fwrite($f,$value."\n"); // записываем новое значение
$k++;
}
}
fclose($f); // закрываем файл
}
count_write("text.txt",rand(200,500));
print_r (read_file_func("text.txt"));
?>
|
| |
|
|
|
|
|
|
|
для: Юлька
(25.08.2009 в 22:51)
| |
<?php
// Функция чтения файла
function read_file_func($file)
{
// Открываем файл если он существует
if(file_exists($file))
{
$f=fopen($file, "r+t") or die("Невозможно открыть файл");
// Блокируем файл (разделяемая блокировка)
flock($f, LOCK_SH); // ждём завершения процесса записи
// В файл теперь никто не пишет, можно читать
$cont=explode("\n",fread($f,filesize($file))); // считываем файл
fclose($f); // закрываем файл
}
else
{
$cont="Файл не существует";
}
// Возвращаем значение
return $cont;
}
?>
|
Вот так можно читать файлы небольшого размера
____
упс... забыл проверить пустой файл или нет | |
|
|
|
|
автор: Юлька (25.08.2009 в 22:51) |
|
|
для: Valick
(25.08.2009 в 22:32)
| | Покажите пожалуйста кодом с блокировкой | |
|
|
|
|
автор: Юлька (25.08.2009 в 22:50) |
|
|
для: Valick
(25.08.2009 в 22:32)
| | Покажите пожалуйста кодом с блокировкой | |
|
|
|
|
|
|
|
для: Юлька
(25.08.2009 в 22:15)
| | А вот тут проще всего считать файл в массив, сделать с ним всё что хочется (удалить заменить нужные строки) и перезаписать в файл. И раз уж вы все тут на файлах помешались, то не забывайте про блокировку, а не то будет вам несчастье. | |
|
|
|
|
автор: Юлька (25.08.2009 в 22:15) |
|
|
для: Valick
(25.08.2009 в 21:43)
| | А как сделать с аналогичной задачей, только мне надо хранить не все, как Лене, а только 5 запросов. Как сделать, так чтобы в файле они просто заменялись? | |
|
|
|
|
|
|
|
для: Лена Смирнова
(25.08.2009 в 20:24)
| | БД не хочется...
это очень зря, ну да ладно
Я вам предлагаю, использовать два файла
В первый (рабочий) вы пишите запрос, и как только количество запросов в файле равно пяти, то переносите первую строку во второй файл (архив). В итоге рабочий файл содержит 5 последних запросов.. читайте сколько угодно и как угодно. | |
|
|
|
|
|
|
|
для: Trianon
(25.08.2009 в 20:12)
| | Дуглас Адамс, "Автостопом по Галактике"... Тонкий английский юмор в научной фантастике(?)... Надо будет как-нибудь еще почитать... | |
|
|
|
|
|
|
|
для: Лена Смирнова
(25.08.2009 в 20:24)
| | Кроме этого ничего в голову не пришло. Не привык я много думать...
$base = "base.txt";
$f = fopen($base, "r");
$limit = filesize($base);
$len = 10000;
fseek($f, $limit - $len);
$string = fread($f, $len);
$array = explode("\r\n", $string);
$array = array_reverse($array);
$i = 0;
foreach($array as $v)
{
if($i == 5) break;
echo $v."<br />";
++$i;
}
|
| |
|
|
|
|
|
|
|
для: Лена Смирнова
(25.08.2009 в 20:24)
| | Кроме этого ничего в голову не пришло. Не привык я много думать...
$base = "base.txt";
$f = fopen($base, r);
$limit = filesize($base);
$len = 10000;
fseek($f, $limit - $len);
$string = fread($f, $len);
$array = explode("\r\n", $string);
$array = array_reverse($array);
foreach($array as $v)
{
if($i == 5) break;
echo $v."<br />";
} | |
|
|
|
|