У меня есть PHP скрипт который всегда весит в безконечном цикле(обработчик Телеграм бота) Когда я его запускаю в консоле на хостинге (php init.php) Он какое-то время работает коректно ,но силу не извесных мне обстаятельств через некоторое время видаёт ошибку 255 и закрывает скрипт. вот код из init.php примечание: 1.на локалке все хорошо работает. 2.Хостинг на убунту.
<?php
require 'bot.php';
$pdo = new PDO('mysql:host='.$server_url.';dbname='.$server_db_name.'', $server_user_name, $server_password);
$bot = new TelBot;
while (true) {
sleep(1);
// echo "1";
$updates = $bot->getUpdates();
if(is_array($updates) || is_object($updates)){
foreach ($updates->result as $update) {
if(!empty($update)){
$id = $update->message->chat->id;
$text = $update->message->text;
echo $text;
$comand = explode(' ', substr($text, 1))[0];
$comandParrams = explode(' ', substr($text, 1))[1];
if(trim($comandParrams) == ''){
$comandParrams = false;
}
//var_dump($comandParrams);
//echo $comand;
switch ($comand) {
case 'start':
$bot-> sendMessage('Привіт, я робот магазину F5!', $id);
$bot-> sendMessage('Ось мох команди: 1./find 100xxx - Переглянути статус ремонту (100ххх - код квитанції) 2./restore - Відновити згублену квитанцію 3./help - продивитися всі команди', $id);
break;
case 'help':
$bot-> sendMessage('Ось мох команди: 1./find 100xxx - Переглянути статус ремонту (100ххх - код квитанції) 2./restore - Відновити згублену квитанцію 3./help - продивитися всі команди', $id);
break;
case 'find':
$findID = $comandParrams;
if($comandParrams == false){
$bot->sendMessage('Не правильний формат команди', $id);
}else{
$res = R::getRow("SELECT `price_our` FROM `remont` WHERE `id_publick` = ".$comandParrams);
if(!$res){
$bot->sendMessage('Ваш телефон не знайдено :/', $id);
}else{
if($res['price_our'] == '' or $res['price_our'] == 'Null' or $res['price_our'] == ' '){
$bot->sendMessage('Ваш телефон в ремонті...', $id);
}else{
if($res['price_our'] != "не зроб" || $res['price_our'] != "не зроблено" || $res['price_our'] != "не зроб."|| $res['price_our'] != "не зроб"|| $res['price_our'] != "X"|| $res['price_our'] != "x"|| $res['price_our'] != "х"|| $res['price_our'] != "Х"){
$bot->sendMessage('Ваш телефон зроблено, ціна: '.$res['price_our'].'грн.', $id);
}else{
$bot->sendMessage('Ваш телефон не не зроблено', $id);
}
}
}
//$res['price_our']
}
break;
case 'restore':
$sql = "DELETE FROM `telegram` WHERE `chat_id` = ".$id;
//echo $sql;
$pdo->query($sql);
$bot-> sendMessage('Ок, тоді в наступному повідомлені надішліть КОД квитанції. Приклад повідомлення: /id 100xxx', $id);
$restore = R::dispense('telegram');
$restore->chatId = $id;
$restore->id_publick = '';
$restore->surName = '';
$restore->phoneNum = '';
R::store($restore);
break;
case 'id':
$idKvit = $comandParrams;
if($comandParrams == false){
$bot->sendMessage('Не правильний формат команди', $id);
}else{
$sql = "UPDATE `telegram` SET `id_publick` = '".$idKvit."' WHERE `chat_id` = ".$id;
//echo $sql;
$pdo->query($sql);
$bot->sendMessage('Тепер напишіть ваш номер телефону який ви вказували коли здавали телефон в форматі: /num 0991234567', $id);
$bot->sendMessage('Також напишіть ваше прізвище в форматі /surn Крaвчук', $id);}
break;
case 'num':
if($comandParrams == false){
$bot->sendMessage('Не правильний формат команди', $id);
}else{
$phoneNum = $comandParrams;
if(strlen($phoneNum) < 10){
$bot->sendMessage('Замало цифр!', $id);
}elseif (strlen($phoneNum) > 10) {
$bot->sendMessage('Забагато цифр!', $id);
}else{
$sql = "UPDATE `telegram` SET `phone_num` = '".$phoneNum."' WHERE `chat_id` = ".$id;
//echo $sql;
$pdo->query($sql);
$res = R::getRow("SELECT * FROM `telegram` WHERE `chat_id` = ".$id);
if($res['sur_name'] == ''){
$bot->sendMessage('Тепер напишіть ваше прізвище в форматі /surn Крaвчук', $id);
}else{
$bot->sendMessage('Щоб підтвердити налаштування напишіть /exec', $id);
}
}
}
break;
case 'surn':
if($comandParrams == false){
$bot->sendMessage('Не правильний формат команди', $id);
}else{
$surname = $comandParrams;
if(strlen($surname) < 6){
$bot->sendMessage('Замало букв!', $id);
}else{
$sql = "UPDATE `telegram` SET `sur_name` = '".$surname."' WHERE `chat_id` = ".$id;
$res = R::getRow("SELECT * FROM `telegram` WHERE `chat_id` = ".$id);
if($res['phone_num'] == ''){
$bot->sendMessage('Тепер напишіть ваш номер телефону який ви вказували коли здавали телефон в форматі /num 0991234567', $id);
}else{
$bot->sendMessage('Щоб підтвердити налаштування напишіть /exec', $id);
}
//echo $sql;
$pdo->query($sql);
}
}
break;
case 'exec':
$bot-> sendMessage('В обробці...', $id);
$res = R::getRow("SELECT * FROM `telegram` WHERE `chat_id` = ".$id);
if(empty($res)){
$bot-> sendMessage('Ви ще не ініцілювали процес створення копії квитанції. Щоб розпочати його напишіть /restore', $id);
}else{
if($res['phone_num'] == ''){
$bot-> sendMessage('Увведіть номер телефону в форматі: /num 0991234567', $id);
}else{
if($res['sur_name'] == ''){
$bot-> sendMessage('Увведіть ваше прізвище в форматі /surn Крaвчук', $id);
}else{
if($res['id_publick'] == ''){
$bot-> sendMessage('У наступному повідомлені надішліть КОД квитанції. Приклад повідомлення: /id 100xxx', $id);
}else{
$link = 'http://f5remont.beget.tech/bot/envelope.php?id='.$res['chat_id'];
//$link = 'тут буде ссилка';
$bot-> sendMessage($link, $id);
}
}
}
}
break;
default:
$bot-> sendMessage('Я вас не розумію...', $id);
break;
}
}
}
}
}
?>
Для начала посмотрите конфигурацию, нет ли там ограничений на время исполнения консольных скриптов: max_execution_time
в php.ini
.
Уберите лимит:
set_time_limit(0);
или
ini_set('max_execution_time', 0);
Оберните код в try catch
и пойманные ошибки (при их наличии) пишите в файл, чтобы была возможность отслеживать что же пошло не так, ну и желательно сделать полновесный демон за которым бы следила система управления службами (демонами) а-ля systemd, supervisor
или что там у вас. Таким образом упавший скрипт будет поднят автоматически.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Суть вопроса такова, я настроил зависимые списки, но если в списке одно значение, то его невозможно выбрать (кликнуть по нему для отправки...
убирал с помошью RewriteRule ^(*?/)category/(
Не могу получить api instagram так как данная функция не доступна для генерации tokenСейчас загружаю всю страницу file_get_contents('https://www