Предупреждение: strpos(): Пустая игла в /XXX/post.php на линии XXXX

#php #wordpress #strpos

Вопрос:

У меня есть такая проблема, так как мне пришлось сменить поставщика сервера. Я портировал несколько сайтов на базе WordPress с помощью плагина дубликатора. Теперь везде, где в содержимом страницы я использую тег, он возвращает ошибку

Предупреждение: strpos(): Пустая игла в /XXX/post.php на линии XXXX

Все дело в коде:

 function is_local_attachment($url) {

  if (strpos($url, home_url()) === false) {
    return false;
  }

  if (strpos($url, home_url('/? attachment_id =')) ! == false) {
    return true;
  }

  $id = url_to_postid($url);

  if ($id) {
    $post = get_post($id);
    if ('attachment' == $post-> post_type) {
      return true;
    }
  }

  return false;
}
 

и более конкретно о линии:

 if (strpos($url, home_url()) === false) {
 

У кого-нибудь был такой случай и кто знает, как его решить?

Все было хорошо до переключения сервера. И я хотел бы, чтобы так было и впредь. Я бы предпочел не исправлять ошибку, а найти и устранить то, что привело к ней.

Единственное, что приходит на ум, — это то, не было ли у меня URL-адреса сайта на предыдущем сервере, мне не нужно иметь его на новом-поле пустое.

Комментарии:

1. Пожалуйста, прочтите сообщение об ошибке. Закрывается из-за опечатки.

2. the field is empty …да, именно об этом говорит вам предупреждающее сообщение! Лучше заполнить URL-адрес.

Ответ №1:

Самый простой способ решить эту проблему-включить «защитную оговорку». Что-то вроде этого:

 function is_local_attachment($url) {

  $homeUrl = home_url();

  if (empty($home_url)) {
    return;
  }
  . . .
 

Я не знаю, что home_url() возвращает, но, очевидно, он может возвращать пустую строку, и это вызывает у вас проблемы.

Если вы используете PHP 7.1 или выше, вы можете использовать что-то вроде:

 if (strpos($url, home_url()??' ') === false)
 

Лично я бы не стал этого делать, потому что это труднее читать, но это решило бы вашу проблему.

Ура! 🙂

=C=