Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Очередь на php

27K
24 июня 2008 года
varilke
36 / / 04.05.2008
Как сделать очередь FIFO? В очереди строки. Один скрипт добавляет строку сверху, второй - снимает снизу. Скрипты могут запуститься кроном одновременно. Достаточно ли текстового файла или нужен mysql?
8
24 июня 2008 года
mfender
3.5K / / 15.06.2005
Не понимаю только, зачем это делать двумя скриптами?
Ну да ладно. А в чём проблема-то? В том, что два скрипта могут запуститься одновременно? Ну, во-первых, совсем не факт, что они одновременно будут использовать файл. А во-вторых, когда одним процессом файл занят, второй будет его ожидать. Так что, делай и не волнуйся.

А так всё просто:

Код:
<?php
// То, что нужно обоим скриптам. Назовём его FIFO.php
define ("FIFO_NAME", "fifo.txt");
define ("STRING_DELIMITER", "\n");

if (!file_exists(FIFO_NAME)){
    file_put_contents(FIFO_NAME, "");
}

function prer(array $arr){
    echo "<pre>";
    print_r($arr);
    echo "<pre>";
}

function append_fifo_item(&$fa, $str){
    array_push($fa, $str);
}

function remove_fifo_item(&$fa){
    array_shift($fa);
}
?>
И сами скрипты, запускаемые кроном. Первый добавляет строку в конец, второй убирает верхнюю:

Код:
<?php
require_once("FIFO.php");

if(is_file(FIFO_NAME) && is_writable(FIFO_NAME) && is_readable(FIFO_NAME)){
    $fifo_array = file(FIFO_NAME);
    append_fifo_item($fifo_array, date("r") . STRING_DELIMITER);
    file_put_contents(FIFO_NAME, $fifo_array);
}
clearstatcache();

prer($fifo_array);
?>
Код:
<?php
require_once("FIFO.php");

if(is_file(FIFO_NAME) && is_writable(FIFO_NAME) && is_readable(FIFO_NAME)){
    $fifo_array = file(FIFO_NAME);
    remove_fifo_item($fifo_array);
    file_put_contents(FIFO_NAME, $fifo_array);
}
clearstatcache();

prer($fifo_array);
?>


я там нарочито сделал вывод содержимого массива в браузер, чтобы было видно результат. в файле такая же ерунда.
27K
24 июня 2008 года
varilke
36 / / 04.05.2008
Спасибо за кристальную простоту)) Да, можно и в одном скрипте написать. Не додумался сразу. А какие ограничения на размер текстового файла? Не будет ли это тормозить, ведь там весь файл считывается каждый раз целиком?
2
24 июня 2008 года
squirL
5.6K / / 13.08.2003
да, собственно, все просто. скрипт сожрет столько памяти (дополнительно) сколько у тебя занимает файл. вот и считай - сколько ты можешь поиметь памяти на сервере.
27K
25 июня 2008 года
varilke
36 / / 04.05.2008
Цитата: mfender
И сами скрипты, запускаемые кроном.

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


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

8
25 июня 2008 года
mfender
3.5K / / 15.06.2005
Цитата: varilke
Не понимаю, как вывести в браузер из скрипта, запущенного кроном?
А двумерный массив можно так же просто прочитать из текстового файла?


вывод в браузер я сделал для демонстрации работы скрипта. уж куда и чего ты выводить будешь - твоё дело.

насчёт двумерного массива. можешь хоть какой массив писать в текстовый файл. но придумай как это сделать. самый простой способ - сериализованный массив (см. serialize() и unserialize())

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог