Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как ограничить размер файла 
V
    Опции темы
geronime
Дата 15.2.2008, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 24.12.2007

Репутация: нет
Всего: нет



Здравствуйте!У меня вапрос, с сервера на делфи методом post каждую секунду отправляются данный(0,1;0,2;0,3;0,5;)на php скрипт 
Код
?php
$dannye=$_POST['inf'];
$file = fopen("log.txt","a");
fputs($file,"Пришедшая от клиента инфа:$dannye  ");
?>
  
врезультате этого со временем lod.txt разрастается до больших размеров, как сделать чтобы размер этоко фойла непревышал  2000 байт, напрмер в фале записанно 1 2 3 4 5 6 7 8 9 приходят данные 10 и остается 2 3 4 5 6 7 8 9 10!
Зарание спосибо!!!Буду очень благодарен любой помощи!!! 
PM MAIL   Вверх
PPS05
Дата 15.2.2008, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 262
Регистрация: 6.11.2005
Где: Беларусь, Минск

Репутация: нет
Всего: 7



Может лучше сделать на базе данных? Дело в том, чтобы сделать как хочешь, придется создавать временный файл, туда перегонять все то, что не удаляется, дописывать и переименовывать, а старый удалять. Просто так начало файла не обрежешь.


--------------------
Ушел с форума и не вернулся.
PM MAIL ICQ   Вверх
Nigel
Дата 15.2.2008, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


познаю мир
**


Профиль
Группа: Участник
Сообщений: 515
Регистрация: 20.11.2007

Репутация: 7
Всего: 19



Вот держи, набросал по-быстромуsmile
Код

$dannye=$_REQUEST['inf'];
$fname = "log.txt";
$limit_size = 2000;

$size = file_exists($fname)?filesize($fname):0;

if($size>$limit_size) {
    $content = file($fname);
    array_shift($content);
    array_push($content,"Пришедшая от клиента инфа:".$dannye."\n");
    if(!($file=@fopen($fname,"w"))) die("Could not open file");
    fwrite($file,implode("",$content));
    fclose($file);
}
else
{
$file = @fopen($fname,"a");
if(!$file) die("Could not open file");
fwrite($file,"Пришедшая от клиента инфа:".$dannye."\n");
fclose($file);
}

PM MAIL   Вверх
geronime
Дата 18.2.2008, 07:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 24.12.2007

Репутация: нет
Всего: нет



Nigel, Огромное спасибо, за помощь, но у меня почему то не работает то что ты предложил,файл log.txt как рос так и растет, что делать не знаю!

   
PPS05, В принципе без разницы как делать лишь бы работало, вот если подскажешь или поможешь как это сделать то буду очень благодарен!!! 
PM MAIL   Вверх
PPS05
Дата 19.2.2008, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 262
Регистрация: 6.11.2005
Где: Беларусь, Минск

Репутация: нет
Всего: 7



С базой я поторопился, вариант Nigel проще...


--------------------
Ушел с форума и не вернулся.
PM MAIL ICQ   Вверх
geronime
Дата 20.2.2008, 07:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 24.12.2007

Репутация: нет
Всего: нет



Но вариант 
Nigel, не работает у меня!
PM MAIL   Вверх
Aikus
Дата 20.2.2008, 08:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 29.11.2007

Репутация: нет
Всего: 1



1. читаешь файл в переменную
2. дописываешь прилетевшие данные
3. если строка слишко длинная обрезаешь её как надо сабстрингом
4. переписываешь файл

ну или БД
PM MAIL   Вверх
geronime
Дата 20.2.2008, 08:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 24.12.2007

Репутация: нет
Всего: нет



Aikus, я плохо разбираюсь в php  smile 
PM MAIL   Вверх
Date
Дата 20.2.2008, 09:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 221
Регистрация: 22.3.2006
Где: Алматы

Репутация: нет
Всего: 3



Цитата(geronime @  20.2.2008,  10:13 Найти цитируемый пост)
Nigel, не работает у меня! 


а ошибку какую пишет?
--------------------
Люди не будьте свиньями, Бросайте мусор в урны.
PM MAIL WWW   Вверх
geronime
Дата 20.2.2008, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 24.12.2007

Репутация: нет
Всего: нет



Ошибки никакой не пишет все нормально рабит, только файл log.txt  как рос так продолжает расти! 
PM MAIL   Вверх
solenko
Дата 20.2.2008, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: 34
Всего: 67



Код

define('MAX_LOG_FILE_SIZE', 200*1024);
function addMsg($msg) {
  //получаем размер файла
  $size = filesize('file.log');
  //открываем файл
  $fh = fopen('file.log', "a+");
  //если размер больше заданного
  if ($size + sizeof($msg) > MAX_LOG_FILE_SIZE) {
    //вычисляем смешение для того, чтобы получить нужную длинну файла в итоге
    $offset = MAX_LOG_FILE_SIZE - $size + sizeof($msg);
    //устанавливаем указатель
    fseek($fh, $offset, SEEK_END);
    //читаем все что было в файле
    $content = fread($fh, MAX_LOG_FILE_SIZE);
    //добавляем наше сообщение
    $content .= $msg;
    //урезаем файл до нулевой длинны
    ftruncate($fh, 0);
  }else {
     $content = $msg;
  }
  fwrite($fh, $content, sizepf($content));
  fclose($fh);
}


Пример написан на коленке и призван не дать готовое решение, а просто показать путь к одному из решений.


--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
geronime
Дата 20.2.2008, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 24.12.2007

Репутация: нет
Всего: нет






solenko, спасибо большое! Будем пробовать, глядишь разберусь! smile 

Это сообщение отредактировал(а) geronime - 20.2.2008, 09:37
PM MAIL   Вверх
FractalizeR
Дата 20.2.2008, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 27.12.2007
Где: Россия/Москва

Репутация: 2
Всего: 4



Еще вариант - сделать как в log rotate. Перед каждым открытием файла проверяем его размер. Если он очень велик, переименовываем его в архивный, а текущий начинаем заново.


--------------------
Чтобы поблагодарить или наоборот поругать участника форума лучше пользоваться значками "+" и "-", изменяющими репутацию. Они находятся слева от поста под именем пользователя.
PM MAIL   Вверх
geronime
Дата 21.2.2008, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 24.12.2007

Репутация: нет
Всего: нет



Всем огромное спасибо!!!!! smile 
Решил задачу следующим способом
Код

<?php
$msg=$_POST['inf'];
$lines = file("log.txt"); 
while(count($lines) > 40) array_shift($lines); 
$lines[] = $msg; 
file_put_contents("log.txt", $lines);
?>
 

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0544 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.