2012-06-30 3 views
1

Во-первых, я хочу дать вам общее представление о том, что я пытаюсь сделать:PHP заканчивает выполнение скрипта автоматически

Я пытаюсь сделать бесплатный веб-хостинг, сделать какую-то работу для меня. Я создал одну php-страницу и MySQL db. Основная идея моей PHP страницы у меня есть время цикл с условием $ выключения, а некоторый счетчик внутри время цикла для отслеживания ли код работает или не

<?php 

/* 

Connect to database etc. etc 

*/ 

$shutdown = false; 
// Main loop 
while (!$shutdown) 
{ 
    // Check for user shutdown request 
    $strq = "SELECT * FROM TB_Shutdown;"; 
    $result = mysql_query($strq); 
    $row = mysql_fetch_array($result); 
    if ($row[0] == "true") 
    { 
     $shutdown = true; // I know this statement is useless but nevermind 
     break; 
    } 

    //Increase counter 
    $strq = "SELECT * FROM TB_Counter;"; 
    $result = mysql_query($strq); 
    $row = mysql_fetch_array($result); 

    if (intval($row[0]) == 60) 
    { 
     // Reset counter 
     $strq = "UPDATE TB_Counter SET value = 0"; 
     $result = mysql_query($strq); 

      /* 

     I have some code to do some works at here its not important just curl stuff 

      */ 

    else 
    { 
     // Increase counter 
     $strq = "UPDATE TB_Counter SET value = " . (intval($row[0]) + 1); 
     $result = mysql_query($strq); 
    } 

     /* 

    I have some code to do some works at here its not important just curl stuff 

     */ 

    // Sleep 
    sleep(1); 
} 

?> 

И у меня есть check.php, который возвращает меня значение из TB_Counter.

Проблема в следующем: я отслеживаю таблицу TB_Counter каждую секунду. Через некоторое время он останавливается. Если я закрою свой webbrowser (который я назвал своей основной в то время как php loop page), он останавливается примерно через 2 минуты. Если не через 5-7 минут, я получаю сообщение об ошибке «соединение было сброшено» на остановке браузера и цикла.

Что мне делать, чтобы моя петля длилась вечно?

ответ

1

Вам необходимо разрешить выполнение PHP полностью. Существует вариант в файле PHP.INI, который говорит:

max_execution_time = 30; 

Это устанавливает максимальное время в секундах сценарий разрешено запускать , прежде чем он завершается синтаксическим анализатором. Это помогает предотвратить плохое написание скриптов . Значение по умолчанию 30. При запуске PHP из командной строки по умолчанию является 0.

Функция set_time_limit:

Установите количество секунд сценарий разрешено запускать. Если это результат , скрипт возвращает фатальную ошибку. Предел по умолчанию - 30 секунд или, если он существует, значение max_execution_time, определенное в файле php.ini .

Чтобы проверить, если PHP работает в безопасном режиме, вы можете использовать это:

echo $phpinfo['PHP Core']['safe_mode'][0] 

Если будет огромный процесс, вы можете рассмотреть возможность запуска на Cron как CronJob. Небольшое объяснение на это:

Cron - очень простой модуль Linux, который позволяет запускать команды в заданные моменты времени или интервалы. В Windows это называется запланированными задачами. Название Cron на самом деле происходит от того же слова, из которого мы получаем слово хронология, что означает порядок времени.

Используя Cron, разработчик может автоматизировать такие задачи, как рассылку рассылок, которые могут быть лучше отправлены в нерабочие часы, автоматически обновлять статистику или регенерировать статические страницы из динамических источников. Системные администраторы и веб-хосты могут захотеть генерировать отчеты о квотах на своих клиентах, выполнять автоматическое выставление счетов по кредитным картам или аналогичные задачи. У Крона есть что-то для всех!

Read more about Cron

+0

Хорошо, я попытался установить его set_time_limit (0); но это не сработало. Может быть, сервер не позволяет мне установить лимит времени? Есть ли способ получить time_limit после того, как я установил его, чтобы проверить, разрешено ли мне изменять? – user1492948

+0

Да, теперь попробуйте запустить скрипт, любую разницу? –

+0

См. Мое редактирование извините! – user1492948

0

Вы можете использовать функцию php set_time_limit().

+0

Я действительно пробовал это // Время установки set_time_limit (0); Но не работал. Он по-прежнему останавливается – user1492948

+0

Возможно и возможно, что администратор сервера отключил эту функцию, запустив php в безопасном режиме. Проверьте его с помощью phpinfo(). –

0

Вы не должны обращаться с этим из браузера. Запуск cron каждую минуту, делая нужные вам проверки, будет лучшим решением.

Рядом с этим, почему вы обновляете каждую секунду? Просто запишите временную метку, чтобы вы знали, когда был сделан запрос?

Сделать что-то для выполнения навсегда не выполнимо. Более важно обеспечить безопасность вашего бизнес-процесса. Поэтому, может быть, было бы разумно разместить здесь ваше деловое дело, вам, кажется, нужно считать секунды и сделать что-то в течение минуты, но это не совсем ясно. Так что вам нужно делать?

+0

Хорошо, что я никогда не слышал о «cron ». Будем смотреть на это спасибо! – user1492948

+0

Чтобы начать работу, на Linux-машине просто введите crontab -l, который предоставит вам список существующих cronjob. Вероятно, нет. Вы вводите это, например, для сеанса SSH, поэтому терминал. Затем введите crontab -e, который позволит вам редактировать кроны. Это список задач в определенное время, например каждую минуту. Если это PHP, вы должны сделать исполняемый файл с, например, chmod 0755 (проверьте права доступа!), И вам нужно добавить путь к PHP, например/usr/bin/php, в начало файла. Проверьте путь в своей среде. –

+0

Хорошо, проблема в том, что я пытаюсь сделать это бесплатно. Существует много бесплатных услуг веб-хостинга, но я не знаю, как вводить эти команды в свою Linux-машину? Ха-ха, я думаю, мне нужно иметь VPS для этого? Не так ли? – user1492948

Смежные вопросы