Симптомы: при добавлении комментария начинается тупняк на минуту, и вылетает либо пустой экран, либо сообщение об ошибке. Вот такое:
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, все заработало.
Так что, не забываем проверять версию.
Эта регулярка проверяет является ли email корректным с точки зрения его написания. Каких-либо проблем комментирование этого фрагмента вызвать не должно. Проверка либо не будет выполняться вообще, либо будет выполняться способом по-умолчанию.
Если проблемы вызывает именно эта строчка, то можно попробовать убедиться, соответствует ли система, на которой работает сайт, следующим требованиям: PCRE > 8.0, PHP >= 5.3.2, 5.2.14. Вероятно проблема в несоответствии требованиям.
С таким еще не сталкивался, и надеюсь, что не столкнусь.