Operation timed out after 15006

Тази техническа статия обяснява как да се справите с проблема, при която страницата на донора не се зарежда, а в логовете на модула се появява грешка от вида “Operation timed out after 15006” (Операцията изтече след 15006).

Често този проблем възниква при работа с XML или YML файлове в XML обработчика, тъй като тези файлове могат да бъдат големи и да съдържат десетки хиляди редове, което означава, че е необходимо доста време за обработка на такъв файл.

Разшифровка на лога:

  • “НЕГАТИВНЫЙ ответ” – Запитът беше неуспешен, модулът не получава отговор от донора.
  • “Код на отговора = 28” – Вътрешен код на грешка на cURL (за по-опитни потребители).
  • “Текст на отговора = Operation timed out after 15006” – Разшифровка на грешката на cURL, която означава, че за 15 секунди донорът не успя да завърши предаването на данни. Докато цялата страница не бъде предадена напълно, cURL не може да я предостави за работа на модула SimplePars.

Решение: По подразбиране, модулът SimplePars задава време за очакване на отговор от заявката в 15 секунди, но можете да го увеличите на 25 секунди. За да го направите, отидете в раздела “Настройки на заявките” и изберете максималното време за изпълнение на заявката на 25 секунди. Не забравяйте да запазите настройките!

simplepars 53 1 - Operation timed out after 15006

Ако след промяната на времето за заявката грешката остане:

  • Установете максималното време за изпълнение на PHP скриптове на вашия хостинг. Ако е 30 секунди или по-малко, този проблем няма да бъде решен без увеличаване на времето на хостинга. Това не зависи от модула SimplePars, тъй като дори ако иска да изчака по-дълго отговора от донора, уеб сървърът сам ще спре изпълнението на работата.
  • Ако на вашия хостинг е разрешено изпълнение на скриптове за повече от 30 секунди или хостингът ви е променил настройките, можете да направите промени в модула, за да увеличите времето за изпълнение.

За Opencart 2:

  1. Отворете файла “/admin/view/template/catalog/simplepars_browser.tpl”.
  2. Намерете реда:
    <option value="25" <?php echo ($browser['timeout'] == 25)?'selected':''?>>25 сек
    
  3. След него добавете:
    <option value="250" <?php echo ($browser['timeout'] == 250)?'selected':''?>>250 сек
    

Сега можете да изберете време за заявката от 250 секунди.

За Opencart 3:

  1. Отворете файла “/admin/view/template/catalog/simplepars_browser.twig”.
  2. Намерете реда:
    <option value="25" {{ browser['timeout'] == 25?'selected':''}}>25 сек
    
  3. След него добавете:
    <option value="250" {{ browser['timeout'] == 250?'selected':''}}>250 сек
    

Ако използвате кеширан шаблон, не забравяйте да изчистите кеша. Това се отнася само за Opencart 3. Сега можете да изберете време за заявката от 250 секунди.

След направените промени ще имате налично време за изпълнение на 250 секунди за заявката.

simplepars 53 2 - Operation timed out after 15006

Важно: Обърнете внимание, че по този начин можете да зададете всяко време за изпълнение, но то не трябва да надвишава 85% от максималното време за изпълнение на скриптове на вашия хостинг.

Ако това не реши проблема, проблемът вероятно не е в модула или хостинга, а донорът просто отказва да предостави отговор. В такъв случай трябва да използвате настройките за заявките, за да избегнете блокировки.

Бележка: cURL е вградена библиотека в операционната система за изпращане на заявки. SimplePars използва тази библиотека за заявките към външни уебсайтове. Тази библиотека не е разработена от автора на модула SimplePars и не може да бъде коригирана от него. За повече информация относно cURL, вижте Уикипедия.