All in One SEO Pack 1.4.6.15: пустой экран при неверном запросе

Пермалинк так сложился

Вчера вечером нашёл, а сегодня утром окончательно разобрался с одной очень интересной ошибкой плагина . проявляется в версии 1.4.6.15, но, возможно, более ранние версии тоже ей подвержены. Для проявления ошибки необходима определённая структура пермалинков: я столкнулся с ошибкой на такой структуре: /%category%/%postname%/. Тем не менее, структура — условие необходимое, но не достаточное: я не на всех сайтах смог воспроизвести ошибку. Возможно, причиной этому являются сторонние темы и/или плагины. Тем не менее, в причинах её возникновения я разобрался.

Проявляется ошибка следующим образом: при переходе на сайт по неверной ссылке (например, http://example.com/wpadmin) отображается пустая страница, а в логе ошибок присутствует примерно такое сообщение:

[-]
View Code Text
PHP Catchable fatal error:  Object of class WP_Error could not be converted to string in /wp-content/plugins/all-in-one-seo-pack/all_in_one_seo_pack.php on line 950

Не буду ручаться за номер строки (я добавлял отладочный код для идентификации ошибки, а после удаления кода количество пустых строк могло не совпасть), но код, соответствующий данной строке, выглядит так:

[-]
View Code PHP
  1.        } else if (is_category() && !is_feed()) {
  2.             $category_description = $this->internationalize(category_description());
  3.             $category_name = ucwords($this->internationalize(single_cat_title('', false)));
  4.             $title_format = get_option('aiosp_category_title_format');
  5.             $title = str_replace('%category_title%', $category_name, $title_format);
  6.             $title = str_replace('%category_description%', $category_description, $title);
  7.        } else if (is_page()) {

Ошибка проявляется в предпоследней строке. Я не стал углубляться в логику канонического переписывания URL, но получается так, что считает, что wpadmin — это имя категории. Я так и не понял, почему он не выдаёт 404 (возможно, виноват сторонний ), но факт остаётся фактом. Так как эта категория не существует, функция category_description() возвращает WP_Error, а не строку. Теоретически, ошибка могла проявиться в методе internationalize(), но это редкий случай.

Итак, чтобы исправить ошибку, нам нужно добавить простую проверку результата, возвращаемого функцией category_description().

Получим такой :

--- all_in_one_seo_pack.php.orig        2008-12-18 07:04:43.000000000 +0200
+++ all_in_one_seo_pack.php     2008-12-18 07:05:39.000000000 +0200
@@ -789,6 +789,10 @@
        }

        function internationalize($in) {
+               if (false == is_scalar($in)) {
+                       return '';
+               }
+
                if (function_exists('langswitch_filter_langs_with_message')) {
                        $in = langswitch_filter_langs_with_message($in);
                }
Автор: ; опубликовано в: Патчи; метки: All in One SEO Pack, WordPress, ошибка, патч, плагин
18
Дек
2008

RSS Комментарии к статье «All in One SEO Pack 1.4.6.15: пустой экран при неверном запросе» (14)  »

  1. mindofdead

    а как посмотреть этот лог ошибок, где?

    приобрел хостинг, ставлю чистый вордпресс 2.7 (пробовал и 2.6.5), даже без плагинов – часто пустые страницы при переходах по страницам. неверные запросы в никуда.

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

  2. Здравствуйте, Владимир!

    Просто уже не знаю, куда писать…
    Установила себе тему (отсюда http://topwpthemes.com/classicmag/), русифицировала. Тема простояла полдня, а потом сбросилась на дефолтную. Так повторялось несколько раз. Была мысль, что в теме есть ошибка. Однако после установки другой темы произошло то же самое. Возникло подозрение, что есть конфликт с каким-то плагином. Вычислить его мне так и не удалось, а проблемы пошли дальше. Раньше все ЧПУ у меня были вида http://maldiva.ru/?p=123. Но новая тема с такими ЧПУ выдавала ошибку 404, поэтому пришлось выбрать произвольный вид /index.php/%postname%/. После этого ни одна тема вообще не хочет работать с ЧПУ другого вида, только с произвольным вариантом. Почему???
    На мыло стали приходить сообщения такого характера: Bad Link To /index.php/%25d0%25b4%… Раньше такого никогда не было. С чем это связано?

    На форумах поддержки WP ответа я так и получила(((( Очень прошу вас, помогите, пожалуйста, разобраться. Подскажите, где искать проблему?

  3. eugen

    Здравствуйте. Аналогичная проблема с all-in-one-seo-pack
    При урле http://mysite.com/?person=432825 выдает ошибку Catchable fatal error: Object of class WP_Error could not be converted to string in /public_html/wp-content/plugins/all-in-one-seo-pack/aioseop.class.php on line 285
    код следующий

    [-]
    View Code PHP
    1.     } else if (is_category()) {
    2.         $description = $this->internationalize(category_description());
    3.     }
    4.  
    5.     if (isset($description) && (strlen($description) > $this->minimum_description_length) && !(is_home() && is_paged())) {
    6.         $description = trim(strip_tags($description));
    7.         $description = str_replace('"', '', $description);
    8.            
    9.         // replace newlines on mac / windows?
    10.         $description = str_replace("\r\n", ' ', $description);

    Может вы сможете помочь или подсказать.
    Спасибо

    • Евгений, найдите метод internationalize() (строка 536 или где-то рядом) и добавьте в него простую проверку:

      [-]
      View Code PHP
      function internationalize($in) {
          if (!is_scalar($in)) {
              return '';
          }
      // Остальная часть метода
      }

      Если нужна помощь, пишите.

  4. eugen

    Да спасибо все получилось

  5. eugen

    Здравствуйте.
    Немного не по теме. No есть с плагином Gogle sitemap.xml
    Выдает следующую ошибку Warning: fopen(/home/******l/site.com/sitemap.xml) [function.fopen]: failed to open stream: Permission denied in /home/******/site.com/wp-content/plugins/google-sitemap-generator/sitemap-core.php on line 1692
    Если вам не трудно. Можите помочь разобраться в чем проблема.
    Спасибо

    • Евгений, каталог /home/******l/site.com/ и файлы /home/******l/site.com/sitemap.xml* должны быть доступны на запись web-серверу. Судя по всему, это означает, что права на каталог должны быть 0777, а на сайтмапы — 0666.

Пожалуйста, не используйте эту форму для комментирования! Данная форма предназначена исключительно для ботов.

Оставить комментарий к записи «All in One SEO Pack 1.4.6.15: пустой экран при неверном запросе»

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

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Оставляя комментарий, вы выражаете своё согласие с Правилами комментирования.

Подписаться, не комментируя

गते गते पारगते पारसंगते बोधि स्वाहा