PHP - strstr () возвращает false, но $ haystack содержит $ Need

Это очень странная ошибка, я безуспешно пытаюсь ее исправить. Я пытаюсь проверить, содержит ли ссылка строку:

$actual_link = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
echo $actual_link;

Результат:

http://xxx.xxx.xxx.xxx/plesk-site-preview/***********.com/xxx.xxx.xxx.xxx/

Потом:

if (strstr($actual_link,"plesk-site-preview")  ){
echo"<meta name='robots' content='noindex'>";
}

Проблема в том, что strstr возвращает false, несмотря на то, что подстрока plesk-site-preview содержится в http://xxx.xxx.xxx.xxx/plesk-site-preview/***********.com/xxx.xxx.xxx.xxx/.

Как я могу исправить эту ошибку?

Обновлено:

Я вставил перед if (strstr($actual_link,"plesk-site-preview") ){ следующую строку для тестирования:

$actual_link='http://xxx.xxx.xxx.xxx/plesk-site-preview/***********.com/xxx.xxx.xxx.xxx/';

Теперь код работает! Кажется, что строка, присвоенная переменной $ actual_link, теряется перед оператором IF.

Попробуйте if (strstr($actual_link,"plesk-site-preview") !== FALSE ){

NineBerry 15.09.2018 23:41

@NineBerry, я вставил ваш код, но ошибка осталась! Обратите внимание, что мой код точен, и между echo $actual_link; и оператором IF больше нет строк кода.

Daniele 15.09.2018 23:53

Вы нашли ответ на этот вопрос>?

Mawg says reinstate Monica 12.11.2018 08:25

@Mawg, нет, я не могу исправить эту ошибку.

Daniele 12.11.2018 17:56

Вы пробовали проверить результат с помощью !== False? Это должно работать

Mawg says reinstate Monica 12.11.2018 20:09
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
5
553
2

Ответы 2

документальный говорит

string strstr ( string $haystack , mixed $needle [, bool $before_needle = FALSE ] )

Returns part of haystack string starting from and including the first occurrence of needle to the end of haystack.

Returns the portion of string, or FALSE if needle is not found.

И вы кодируете

if (strstr($actual_link,"plesk-site-preview")) 

Возможно, это должно быть

if (strstr($actual_link,"plesk-site-preview") != "") 

поскольку он возвращает строку, а не логическое значение в случае успеха.

Хм, на самом деле было бы лучше

 if (strstr($actual_link,"plesk-site-preview") !== FALSE)

Чтобы использовать строгую проверку типов, используйте !==

NineBerry 15.09.2018 23:44

@Mawg Я заменил свой код на if (strstr($actual_link,"plesk-site-preview" != FALSE) ), но ошибка не исправлена! Также обратите внимание, что вы забыли ) в своем коде.

Daniele 15.09.2018 23:45

@NineBerry верна, != должен быть !==. Дело в том, что многие функции PHP возвращают FLASE в случае сбоя, и правильный способ тестирования - !== FALSE; это общий образец

Mawg says reinstate Monica 15.09.2018 23:50

Конечно, если бы вы использовали отладчик, вам бы не пришлось нас об этом спрашивать :-)

Mawg says reinstate Monica 15.09.2018 23:51

Если вам нужно проверить наличие подстроки в строке, вы можете использовать strpos, например:

if (strpos($actual_link, "plesk-site-preview")){
    echo"<meta name='robots' content='noindex'>";
}

Этот способ лучше, потому что strpos быстрее, чем strstr

Я пробовал использовать ваш код, но ошибка не исправлена!

Daniele 15.09.2018 23:47

@Daniele, это условие правильное. Вы можете проверить это, например: if (strpos($actual_link, "plesk-site-preview")){ echo "Substing finded"; } Вам следует проверить другой код.

Maksym Fedorov 15.09.2018 23:54

@Daniele, я это проверил. Мой код: $actual_link = "http://84.200.70.56/plesk-site-preview/***********.com/84.2‌​00.70.56/"; if (strpos($actual_link,"plesk-site-preview") ){ echo "Substring found"; } и он работает

Maksym Fedorov 16.09.2018 00:04

Попробуйте напечатать переменную $ actual_link перед оператором if

Maksym Fedorov 16.09.2018 00:17
strpos($actual_link, "plesk-site-preview") !== FALSE решит вашу проблему
Martin 10.11.2018 18:28

Другие вопросы по теме