Warning: set_time_limit() error

Главные вкладки

Аватар пользователя Buxus Buxus 12 мая 2007 в 17:12

Очень часто вылетает ошибка вида:
* warning: set_time_limit() has been disabled for security reasons in /var/www/login/example.site/includes/common.inc on line 1982.
* warning: set_time_limit() has been disabled for security reasons in /var/www/login/example.site/modules/gsitemap/gsitemap.module on line 640.
* warning: set_time_limit() has been disabled for security reasons in /var/www/login/example.site/modules/image/contrib/image_import/image_import.module on line 173.
Все в принципе работает и так нормально,
но меня эти warning`и просто бесят. Я абсолютно не силен в грамоте MySql и PHP, но судя по написанному выше у хостера отключена эта функция set_time_limit() вообще. Обратился с запросом в сапорт хостера на что мне ответили:

Зачем вам тайм-лимит больше 600 секунд?
Это очень большое время,
врядли правильно работающий сайт будет что-то делать более 10 минут.


Я полез в средину модулей, где обнаружил такой код (gsitemap.module):

function gsitemap_output_chunk($chunk) {
Т  global $base_url;
  if (!ini_get('safe_mode')) {
    set_time_limit(240);
  }
  $range = gsitemap_get_c....

и в common.inc:

function drupal_cron_run() {
  // If not in 'safe mode', increase the maximum execution time:
  if (!ini_get('safe_mode')) {
    set_time_limit(240);
  }
// Fetch the cron semaphore
  $semaphore = vari...

Т.е., судя из ответа сапорта, set_time_limit() работает (но не факт), тогда какие 600? — у меня ведь только 240... И у меня вызрел зловещий план — просто-напросто закомментировать эту строку с set_time_limit(), если уж она ни на что не влияет, а только лишь светит мой логин разной контре.
Вопрос знатокам — мой план верен? Если да, то как правильно закомментировать и что именно (только строку или что-то еще)? Или у вас есть свой вариант решения этой проблемы?

Комментарии

Аватар пользователя Ромка Ромка 12 мая 2007 в 18:11

Функция set_time_limit устанавливает максимальное время выполнения скрипта. Нормальный скрипт, отдающий данные клиенту, выполняется не больше секунды, так что в саппорте тебе дали правильный ответ.

То что ты закомментируешь соответствующие строки в скриптах Друпала врядли повлиеяет на наличие/отсутствие ошибок, так как настройки веб-сервера имеют более высокий приоритет над настройками задаваемыми внутри скрипта, хостер вообще может запретить смену максимального времени выполнения скрипта пользователем.

Функция drupal_cron_run() связана с запуском крона. У тебя, случайно, не включен модуль, который запускает скрипты для крона после захода пользователя на сайт?

Аватар пользователя vadbars@drupal.org vadbars@drupal.org 12 мая 2007 в 20:04

Функция set_time_limit() в ваших примерах срабатывает при установленном режиме safe_mode. Что, у вашего хостера включен этот режим?

Если все работает, но только бесят предупреждения - поставьте "php_value error_reporting 7" в .htaccess. "Проверено Занусси..."

Аватар пользователя Buxus Buxus 12 мая 2007 в 22:42

TO vadbars@drupal.org К сожалению Занусси на этот раз подвела... у меня эта строка была прописана и проблемы не решала. На счет safe_mode у хостера я не в курсе.
TO Ромка Видимо хостер действительно запретил использование и переопределение set_time_limit(), а ее вызов и приводил к ошибке. Я на свой страх и риск закомментировал строку с вызовом set_time_limit() во всех модулях и это проблему разрешило. Так что ошибки больше не появляются, даже при запуске cron.

Аватар пользователя igdrasil@drupal.org igdrasil@drupal.org 13 мая 2007 в 11:44

Функция set_time_limit() в ваших примерах срабатывает при установленном режиме safe_mode.

наоборот, при выключеном, при включенном safe mode set_time_limit не работает вообще

2автор пока работает - можете смело закомментировать, скорее всего у хостера просто запрещена эта функция... только почаще делайте бакап базы данных - если скрипт прервется при ее обновлении - ничего хорошего не выйдет