Неверная длина строки $ _SERVER [‘SERVER_NAME’]

Поэтому я пытаюсь проверить, содержит ли имя сервера Apache определенную строку, и заметил очень странное поведение (например, нет совпадений в операторе if, даже если строки выглядели точно совпадающими). С помощью var_dump() Я посмотрел на мою переменную, содержащую имя сервера, и, к своему удивлению, я увидел это:

string(11) "test.local:5757"

Строка состоит всего из 11 символов, если вы не считаете цифры. Если я объявлю переменную, используя 'test.local:5757' вместо $_SERVER['SERVER_NAME']Я получаю правильную длину, 15.

Я попытался добавить пустую строку в конец, чтобы «сбросить» строку, я даже попытался добавить дополнительные буквы в строку, которые в итоге подсчитываются, но 5757 все еще не считается.

Кто-нибудь когда-либо испытывал что-то подобное раньше?

Изменить: Извините, это произошло после публикации, что я не включил достаточно информации.

Одна из основных деталей, которую я не упомянул, это то, что я использую CodeKit поверх MAMP. Моя локальная установка MAMP находится по адресу localhost и URL моего проекта CodeKit test.local:5757', Тем не менее, кажется, что порт 5757 появляется, когда я эхо переменную, которая объявлена ​​как $_SERVER['SERVER_NAME'], Даже незнакомец это эхо $_SERVER['SERVER_NAME'] . ':' $_SERVER['SERVER_PORT'] печать test.local:5757при изменении двоеточия на любой другой символ, например $_SERVER['SERVER_NAME'] . '>' $_SERVER['SERVER_PORT'], печать test.local:5757>80,

Вот еще несколько примеров того, что я вижу:

$host = $_SERVER['SERVER_NAME'];
echo $host;
// prints 'test.local:5757'


$host = $_SERVER['SERVER_NAME'] . ':' . $_SERVER['SERVER_PORT'];
echo $host;
// prints 'test.local:5757'


$host = $_SERVER['SERVER_NAME'] . '&' . $_SERVER['SERVER_PORT'];
echo $host;
// prints 'test.local:5757&80'


$host = $_SERVER['SERVER_NAME'];
echo $host;
// prints 'test.local:5757'
$bool = false;
if ($host == 'test.local:5757') $bool = true;
echo $bool;
// prints false;


$host = $_SERVER['SERVER_NAME'];
var dump($host);
// prints string(11) test.local:5757

Извините за то, что не помечены как связанные с CodeKit. Любая помощь очень ценится!

4

Решение

Здесь есть хорошее объяснение https://github.com/bdkjones/CodeKit/issues/440 который заканчивается

Короче говоря, в этом нет ничего плохого -> MAMP имеет правильный заголовок хоста.

Поскольку вы пытаетесь различить test.local и localhost, вы можете использовать:

if (strpos($_SERVER['HOST_NAME'],'localhost') !== false) {
echo 'localhost';
} else {
echo 'not localhost';
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]