Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.04.2012, 20:14
Новичок на форуме
Отправить личное сообщение для vovka_3000 Посмотреть профиль Найти все сообщения от vovka_3000
 
Регистрация: 14.04.2012
Сообщений: 3

Помогите советом новичку ,плз.
Есть текстовый файл 1.txt этот файл формируется функцией php и обновляется раз в минуту .

Нужно с помощью Jquery обновлять div на странице содержимым текстового файла ..при этом обновлять только тогда когда данный файл полностью дописан

Все что нашлось в поисковике работать не стало а времени на мануал катастрофически не хватает ..

Сорри за банальность ... Буду благодарен за ссылки на рабочий код и любую помощь..
Ответить с цитированием
  #2 (permalink)  
Старый 14.04.2012, 20:18
Аспирант
Отправить личное сообщение для atlantis Посмотреть профиль Найти все сообщения от atlantis
 
Регистрация: 18.03.2012
Сообщений: 95

Что значит
Сообщение от vovka_3000
обновлять только тогда когда данный файл полностью дописан
?
Ответить с цитированием
  #3 (permalink)  
Старый 14.04.2012, 20:33
Аспирант
Отправить личное сообщение для atlantis Посмотреть профиль Найти все сообщения от atlantis
 
Регистрация: 18.03.2012
Сообщений: 95

А получить содержимое файла можно попробовать через .load() (точно не знаю, не пробовал).
Ответить с цитированием
  #4 (permalink)  
Старый 14.04.2012, 20:41
Новичок на форуме
Отправить личное сообщение для vovka_3000 Посмотреть профиль Найти все сообщения от vovka_3000
 
Регистрация: 14.04.2012
Сообщений: 3

когда полностью дописан имелось ввиду чтобы не вывести на страницу текст из тхт когда файл тхт переписывается ( обновляется) потому как текст в нем вместе с тегами и если он не будет дописан то страница будет кривая ...
Ответить с цитированием
  #5 (permalink)  
Старый 14.04.2012, 21:38
Аспирант
Отправить личное сообщение для atlantis Посмотреть профиль Найти все сообщения от atlantis
 
Регистрация: 18.03.2012
Сообщений: 95

Ну я думаю, что если файл открыт в PHP, в момент подключения к нему на JS, то он по идее не будет доступен.
Ответить с цитированием
  #6 (permalink)  
Старый 14.04.2012, 21:47
Аватар для Раед
''
Отправить личное сообщение для Раед Посмотреть профиль Найти все сообщения от Раед
 
Регистрация: 11.12.2011
Сообщений: 636

Сообщение от atlantis
Ну я думаю, что если файл открыт в PHP, в момент подключения к нему на JS, то он по идее не будет доступен.
А вот я так не думаю. Что бы он не был доступен ПХП ещё должен его заболокировать
Ответить с цитированием
  #7 (permalink)  
Старый 14.04.2012, 23:18
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

Cron который будет запускать скрипт генерации каждую минуту, и работать в холостую даже если вдруг на сайте не окажется посетителей, это идея расточительная в плане ресурсов сервера.

В твоём случае предпочтителен что то вроде следующего алгоритма.

Клиент обращается к файлу txtgen.php
txtgen.php смотрит когда в последний раз был создан текстовый файл.

если больше минуты назад: Значит он создаёт этот файл и только потом возвращает данные из него.

Если меньше минуты назад тогда он возвращает содержимое уже существующего файла.

Если файл в процессе изменения тогда он возвращает служебное сообщение, к примеру текст "wait".

Преимущества этого подхода очевидны.
Текстовый файл формируется только тогда когда он действительно нужен, а не молотит в холостую всегда.

На клиенте скрипт приблизительно будет выглядеть так
f=function(){
   $("#target").load("txtgen.php",function(){
           setTimeout(f,60000);
   });   
}
f();


Скрипт с возможностью обработки ожидания примерно так

f=function(){
   $.get("txtgen.php",function(data){
           // если нас просят подождать подождём 2000мс и попробуем снова.
           if (data=="wait"){
                      setTimeout(f,2000);
           } 
           // если нам вернули данные то вставим их в див и заберём следующие  через минуту.
           else {
                     $("#target").html(data);
                     setTimeout(f,60000);
           }
   });   
}
f();


Php в лом расписывать. Напишу псевдокодом.
$time=getFileTime();// Эту функцию пишите сами она забирает из какой нибудь таблицы данные о времени создания файла.

// файл как раз сейчас пишут, попросим клиента подождать ;)
if ($time==0) echo "wait";



// Прошло меньше минуты, значит достаточно вернуть содержимое файла.
else if ($time+60>time() ) {
     // читаем файл  в переменную txt;
     // ....
     //выводим то что прочитали
     echo $txt;

     // неуверен но может быть достаточно встроить файл через include,  вроде должно быть быстрее чем чтение
} 


// прошло больше минуты,  нужно сгенирировать файл
else {      
      setFileTime(0);//(эту  функция пишите сами) на время генерации пометим файл как находящийся в процессе перезаписи

      // здесь мы генерируем файл, копия файла должна оказаться в переменной $txt, либо выводить сразу echo по строчке  
      // ....

      setFileTime(time());//(эту  функция пишите сами) после того как файл готов, сохраним в базу время создания 
     echo $txt;
}

//setFileTime и getFileTime это функции в которых я инкапсулировал работу с состоянием файла, 
// я вижу это как сохранение и чтение из базы данных числового значения в таблице. Числовое потому что функция time 
//возвращает количество секунд прошедших от какой то то там даты вроде от 1970 года )) .


PS. В сессию писать состояние файла бессмысленно во первых потому что файл общий для нескольких сессий, во вторых данные в сессии будут недоступны другому процессу этой сессии, пока будет активен процесс генерации файла. Именно по этому я пишу состояние в бд, однако это не означает что нельзя придумать другой способ хранения данных. К примеру можно черпать информацию о создании файла из файловой системы. А вот где зафиксировать факт начала записи кроме бд, я затрудняюсь ответить. Хотя можно файл переименовывать но это как то уж шибко криво. С бд как то попроще.
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 15.04.2012 в 01:04.
Ответить с цитированием
  #8 (permalink)  
Старый 15.04.2012, 01:28
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

Я заинтерисовался запиранием файлов. Вот что нарыл.

функция запирания http://www.php.su/functions/?flock

а вот здесь чувак изо всех сил пытается использовать эту функцию, только у него не фига толкового не получается ). Поэтому в итоге он как и я, использует некий триггер,только я пишу в бд , а он в файловую систему . Недостаток в том что он останавливает скрипт в цикле в случае недоступности файла, до того момента пока файл ни будет доступен. А в хорошо спроектированной системе, ситуации холостого хода возникать не должны. Ибо холостой ход тоже тратит процессорное время.

Утро upd:
Поправка, не совсем верно раскритиковал решение чувака.
В его решении while(!$array=file($path)){sleep(1);} цикл исполняется раз в секунду, за счёт использования sleep, и не чаще. То есть решение в ряде случаев приемлимо, оно щадяще относится к процессорному времени, хоть и не жалеет память.

Можно позаимствовать идею и изменить решение из 7го топика.

вместо if ($time==0) echo "wait";
написать while($time==0){sleep(1); $time=getFileTime();}
соответственно на клиенте использовать первый javascript пример а не второй, так как обработка wait на клиенте будет уже не нужна.

Вопрос будет ли такое решение лучше ?. Думаю будет, но только если sleep используется в начале скрипта, как у нас.
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 22.04.2012 в 00:09.
Ответить с цитированием
  #9 (permalink)  
Старый 15.04.2012, 10:16
Новичок на форуме
Отправить личное сообщение для vovka_3000 Посмотреть профиль Найти все сообщения от vovka_3000
 
Регистрация: 14.04.2012
Сообщений: 3

Огромное спасибо за подробный ответ!!
Поковыряю на досуге в этом направлении )
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите плис новичку в ajax urel AJAX и COMET 6 12.01.2013 21:36
Выезжающая картинка. помогите плз новичку(( animus Элементы интерфейса 4 22.04.2011 14:31
Помогите новичку serly Общие вопросы Javascript 1 13.04.2011 10:47
Помогите новичку с выпадающим списком interest Элементы интерфейса 5 19.05.2010 13:15
ССЫЛКИ (Помогите новичку) meggen (X)HTML/CSS 8 30.11.2009 10:51