WordPress: ошибка при добавлении комментария (вылетает по таймауту)

Симптомы: при добавлении комментария начинается тупняк на минуту, и вылетает либо пустой экран, либо сообщение об ошибке. Вот такое:

Fatal error: Maximum execution time of 60 seconds exceeded in /
home/USERNAME/DIR/www/wp-includes/class-phpmailer.php on line 1033

Что характерно, комментарий при этом добавляется.

Все дело вот в этом регэкспе:

/*            case 'pcre8':
                /**
                 * Uses the same RFC5322 regex on which FILTER_VALIDATE_EMAIL is based, but allows dotless domains.
                 * @link http://squiloople.com/2009/12/20/email-address-validation/
                 * @copyright 2009-2010 Michael Rushton
                 * Feel free to use and redistribute this code. But please keep this copyright notice.
                 */
  /*              return (boolean)preg_match(
                    '/^(?!(?>(?1)"?(?>\\\[ -~]|[^"])"?(?1)){255,})(?!(?>(?1)"?(?>\\\[ -~]|[^"])"?(?1)){65,}@)' .
                    '((?>(?>(?>((?>(?>(?>\x0D\x0A)?[\t ])+|(?>[\t ]*\x0D\x0A)?[\t ]+)?)(\((?>(?2)' .
                    '(?>[\x01-\x08\x0B\x0C\x0E-\'*-\[\]-\x7F]|\\\[\x00-\x7F]|(?3)))*(?2)\)))+(?2))|(?2))?)' .
                    '([!#-\'*+\/-9=?^-~-]+|"(?>(?2)(?>[\x01-\x08\x0B\x0C\x0E-!#-\[\]-\x7F]|\\\[\x00-\x7F]))*' .
                    '(?2)")(?>(?1)\.(?1)(?4))*(?1)@(?!(?1)[a-z0-9-]{64,})(?1)(?>([a-z0-9](?>[a-z0-9-]*[a-z0-9])?)' .
                    '(?>(?1)\.(?!(?1)[a-z0-9-]{64,})(?1)(?5)){0,126}|\[(?:(?>IPv6:(?>([a-f0-9]{1,4})(?>:(?6)){7}' .
                    '|(?!(?:.*[a-f0-9][:\]]){8,})((?6)(?>:(?6)){0,6})?::(?7)?))|(?>(?>IPv6:(?>(?6)(?>:(?6)){5}:' .
                    '|(?!(?:.*[a-f0-9]:){6,})(?8)?::(?>((?6)(?>:(?6)){0,4}):)?))?(25[0-5]|2[0-4][0-9]|1[0-9]{2}' .
                    '|[1-9]?[0-9])(?>\.(?9)){3}))\])(?1)$/isD',
                    $address
                );*/

Пытаться понять, что именно делает этот регэксп, и почему он тупит, можно, но это однозначно выше моих способностей. Поэтому я поступил проще: тупо закомментил в файле class-phpmailer.php весь вышеприведенный кусок кода.
Не знаю, что я этим изменил, но теперь все работает.

Дополнение (важное)

Как оказалось, описанная мера не всегда помогает. В некоторых случаях после такой же длинной паузы мы можем попасть на пустую страницу с адресом [sitename]/wp-comments-post.php, на чем все и закончится, хотя комментарий по факту оказывается добавленным.

После очень долгих мучений обнаружил, что все дело было в установленной на хосте версии PHP. Как только поставил 5.3, все заработало.

Так что, не забываем проверять версию.

 

Запись опубликована в рубрике Новости с метками . Добавьте в закладки постоянную ссылку.

2 комментария: WordPress: ошибка при добавлении комментария (вылетает по таймауту)

  1. Влад говорит:

    Эта регулярка проверяет является ли email корректным с точки зрения его написания. Каких-либо проблем комментирование этого фрагмента вызвать не должно. Проверка либо не будет выполняться вообще, либо будет выполняться способом по-умолчанию.

    Если проблемы вызывает именно эта строчка, то можно попробовать убедиться, соответствует ли система, на которой работает сайт, следующим требованиям: PCRE > 8.0, PHP >= 5.3.2, 5.2.14. Вероятно проблема в несоответствии требованиям.

  2. Дмитрий Фич говорит:

    С таким еще не сталкивался, и надеюсь, что не столкнусь.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *