число-генератор с записью в файл

Award

Новичок
число-генератор с записью в файл

Помогите реализовать тоже самое что и на JAVA, только на PHP
Суть - выводить числовое значение из заданного диапазона каждые 10 секунд, дописывая новое в файл и сбрасывать раз в сутки (например 00:00).
PHP:
var a_download=1, a_download_disp=5, var_download=0; 
var idt; 
function tick(){ 
    var_download=a_download = a_download + Math.floor(a_download_disp * Math.random()); 
    document.getElementById('download').innerHTML = var_download; 
    window.setTimeout('tick()',10000); 
}
Только значение "a_download" берётся из файла на сервере "downloads.txt".

За рабочий код с меня на 3 пива ;)
 

DiMA

php.spb.ru
Команда форума
> За рабочий код с меня на 3 пива

Табличка у врача: Конфеты не пью, цветами не закусываю.

1. освой Cron
2. запусти свой скрипт от туда (каждую минуту) и сделай блокировку от повторного запуска
3. while() + sleep(10) + file_put_contents() тебе поможет
 

Award

Новичок
Дим, спасибо за совет, но данная реализация не подходит, необходим всё же PHP code
 

DiMA

php.spb.ru
Команда форума
а й-а чито, на исто-о-онском нап-п-писал? Это был пхп.

замени первый пункт запуском с веб-сервера и отправкой скрипта в фон
 

Award

Новичок
а й-а чито, на исто-о-онском нап-п-писал? Это был пхп.
Юмор оценил...

Признаться в PHP я слаб. По этому вопросу (или предложенными отдельными функциями) с мануалом провожусь около месяца, поэтому прошу помощи в написании.
 

DiMA

php.spb.ru
Команда форума
Я вижу, что слаб. И вижу где именно (везде .-). Поэтому написал 3 шага к решению проблемы. Что где не понятно - спросишь конкретно.

1. как что-то запустить
2. как не наплодить копий
3. как просто разово чето сделать
 

SiMM

Новичок
> По этому вопросу (или предложенными отдельными функциями) с мануалом провожусь около месяца
Ничего страшного - мы никуда не торопимся.

> прошу помощи в написании
Вы уж определитесь - "прошу помощи в написании" или "сделайте это за меня" - это несколько разные вещи. Для второго варианта имеет смысл указать сумму гонорара, к тому же это будет значить, что Вы ошиблись подфорумом.
 

dimagolov

Новичок
SiMM, гонорар уже озвучен - 3 пива :)

только вы нифига не поняли задачу. задача, судя по всему, не только в том, чтобы на сервере генерить это значение, но и отображать его всем клиентам. а это тянет куда на большее, чем на 3 пива.
 

nexen

Новичок
<?php
set_time_limit(0);
function w($out){
$o=fopen('rand.txt','a');
fwrite($o,$out."\r\n");
fclose($o);
}
function clean(){
$o=fopen('rand.txt','w+');
fclose($o);
}
$tick=10;
while(1){
sleep($tick);
date('H:i:s')=='00:00:00'?clean():$out=rand(100,200);
w($out);
}
php?>

p.s.
в функции rand() поменяй числа на нужный диапазон, переменную $tick можешь заменить по желанию если вдруг понадобится промежуток более 10 сек. Если же тебе надо чтобы каждые 10 секунд в файле находилось единственное значение поменяй 'a' на 'w+' в функции w(); в этом случае и функция clean(); не понадобится, и значение также будет доступно из файла, можно например проинклюдить файл куда будет нужно . . .
 

Award

Новичок
Автор оригинала: nexen
PHP:
<?php
set_time_limit(0);
function w($out){
$o=fopen('rand.txt','w+');
fwrite($o,$out."\r\n");
fclose($o);
}
$tick=10;
while(1){
sleep($tick);
date('H:i:s')=='00:00:00'?clean():$out=rand(1,5);
w($out);
}
php?>
Спасибо nexen, интересная реализация. Как правильно заметил dimagolov - "задача не только в том, чтобы на сервере генерить это значение, но и отображать его всем клиентам", к тому же в javascript примере есть auto increasement :rolleyes:
 

nexen

Новичок
ну а в чем заминка ? раз уж ты убрал функцию clean(); то убери условие и "\r\n" тоже убираем
PHP:
<?php
set_time_limit(0);
function w($out){
$o=fopen('rand.txt','w+');
fwrite($o,$out);
fclose($o);
}
$tick=10;
while(1){
sleep($tick);
$out=rand(1,5);
w($out);
unset($out);
}
php?>
теперь каждые 10 секунд в файл записывается одна строка - произвольное число заданного диапазона. в любом другом скрипте получаешь ее и выводишь - допустим так

PHP:
<html>
<head>
<meta http-equiv='refresh' content='10'>
</head>
<body>
<?php
$dat=file('rand.txt');
echo "<h2 style='position:absolute;top:50%left:50%'>".$dat[0].'<h2/>';
php?>
</body>
</html>
данная конструкция будет обновлять страницу пользователя каждые 10 сек и выводить число в центр экрана, никто тебе не мешает реализовать вывод на яваскрипт
 

Award

Новичок
nexen
ну а в чем заминка?
Выложил как есть вот тут. Сначала "засунул" основной скрипт в index файл, запустил - не остановить (всё удаляю - продолжает генерировать rand.txt). Отредактировал index, оставил только вывод из rand.txt. Не понимаю, я что-то не то делаю... :confused: Как правильно запустить? :rolleyes: сорри, я что-то туплю.
 

nexen

Новичок
да вроде ничего сложного -

1)все должно лежать в одной папке с правами на запись,либо укажи путь к папке и файлу куда генератор будет писать данные и где будет лежать скрипт вывода

2)генератор и вывод это два разных файла, поэтому и запускаться должны отдельно

3)однажды запущеный генератор будет работать до перезапуска сервера - естественно желательно держать его в папке куда доступ имеешь только ты
 

cDLEON

Онанист РНРСlub
Жалко, конечно, что домохозяйки-советчики не знают что такое flock
 

Award

Новичок
Автор оригинала: nexen
да вроде ничего сложного -

1)все должно лежать в одной папке с правами на запись,либо укажи путь к папке и файлу куда генератор будет писать данные и где будет лежать скрипт вывода
OK
2)генератор и вывод это два разных файла, поэтому и запускаться должны отдельно
OK
можешь посмотреть , как это работает пока я все это не снес к чертям собачим
Посмотрел, работает правильнее чем у меня на сайте, вероятно я запускал скрипт несколько раз разной модификации. Кстати, по прежнему нет постоянного увеличения от начального значения взятого в файле. Отличный пример - это код javascript у меня, но опять же, после refresh страницы значение счётчика должно продолжать расти, а не обнуляться :confused:
 

nexen

Новичок
Кстати, по прежнему нет постоянного увеличения от начального значения взятого в файле.
насколько я помню задача была

Суть - выводить числовое значение из заданного диапазона каждые 10 секунд, дописывая новое в файл и сбрасывать раз в сутки (например 00:00).
теперь подробнее - о каком начальном значении идет речь ?
 

Award

Новичок
Автор оригинала: nexen
теперь подробнее - о каком начальном значении идет речь ?
Ок, твой скрипт генерирует число от 1 до 5 и пишет его в файл rand.txt. Это число мы выводим на сайт. После обновления через 10 секунд генерируется новое число от 1 до 5 и ЗАМЕНЯЕТ существующее в rand.txt а смысл - СУММИРОВАТЬ с прошлым значением.
Вот такой пример на пальцах: 3 через 10 сек 3+2= 5 через 10 сек 5+4= 9 через 10 сек 9+1=10 и т.д.
 

nexen

Новичок
Автор оригинала: Award
Вот такой пример на пальцах: 3 через 10 сек 3+2= 5 через 10 сек 5+4= 9 через 10 сек 9+1=10 и т.д.
это должно было быть написано в первом твоем посте!

код скрипта вывода оставляем без изменения , основной код меняем на

PHP:
<?php
set_time_limit(0);
function w($out){
$o=fopen('rand.txt','w+');
fwrite($o,$out);
fclose($o);
}
function clean(){
$o=fopen('rand.txt','w+');
fclose($o);
}
$tick=10;
while(1){
sleep($tick);
if(date('H:i:s')=='00:00:00'){
clean();
}
else{
$out=rand(1,5);
$dat=file('rand.txt');
$out=$out+$dat[0];
w($out);
}
}
php?>
 
Сверху