я хочу запускать функцию php на сервере через каждые 3 секунды и обновлять некоторые значения в БД, и эта функция не мешает выполнению других функций - PullRequest
0 голосов
/ 10 мая 2019

основная функция, которая запускается каждые 3 секунды и обновляет значение в функции дБ 1

public function set_cron_value() {
    for($i=1; $i < 20; $i++) {
        $this->db->query('UPDATE users SET pass_change_flag = (pass_change_flag + 1) WHERE u_id = 123');
        sleep(3);
    }
}

эта функция возвращает функцию данных дБ 2

public function get_cron_value() {
    echo $this->db->query('SELECT * FROM users WHERE u_id = 123')->row()->pass_change_flag;    
}

, когда функция 1 выполняет функцию 2остановить и не возвращать ничего до тех пор, пока не завершится выполнение функции 1, есть ли решение, что выполнение функции 1 не повлияло на выполнение других функций

Я использую php frame work codeigniter

спасибо

Ответы [ 2 ]

0 голосов
/ 10 мая 2019

Чтобы запустить скрипт с интервалами, вы можете запланировать CRON JOB.Это будет лучшим решением для запуска скрипта после указанного вами времени.

В зависимости от хостинга вашего сервера вы можете запланировать несколько CRON JOBS с cpanel вашего сайта.

0 голосов
/ 10 мая 2019

Попробуйте это -

// NOT TESTET, just to show concept.
function Reorder()
{
    // query to get all id's, ordered by priority ASC.
    $things = mysql_query("SELECT id FROM table ORDER BY priority ASC");
    // iterate thru all items, and give each a new priority
    $priority = 0;
    while($row = mysql_fetch_assoc($things))
    {
        mysql_query("UPDATE table SET priority = ".$priority." WHERE id = ".$row['id']);
        // add 1 to $priority, then the next item will have a higher priority of 1.
        $priority++;
    }
}

Это для переупорядочения ваших функций, и тогда вы можете просто переместить одну функцию вверх и одну вниз:

// NOT TESTET, just to show concept
function MoveToTop($id)
{
    // get the priority of the item, and the max priority available
    $item = mysql_fetch_assoc(mysql_query("SELECT priority, MAX(priority) AS max_priority FROM table WHERE id = ".$id));
    // move all items above the current item, one prioroty down.
    mysql_query("UPDATE table SET priority = priority - 1 WHERE priority >= ". $item['priority']);
    // set priority of the current item to the max priority
    mysql_query("UPDATE table SET priority = ".$item['max_priority']." WHERE id = ".$id);
    // Reorder() could be called here, to make absolutely sure everything is in order...
}

// NOT TESTET, just to show concept
function MoveToBottom($id)
{
    // get the priority of the item.
    $item = mysql_fetch_assoc(mysql_query("SELECT priority FROM table WHERE id = ".$id));
    // move all items below the current item, one priority up (to make room)
    mysql_query("UPDATE table SET priority = priority + 1 WHERE priority <= ". $item['priority']);
    // position the current item at priority 0 (zero)
    mysql_query("UPDATE table SET priority = 0 WHERE id = ".$id);
    // Reorder() could be called here, to make absolutely sure everything is in order...
}
...