Поэтому я пытаюсь проверить, содержит ли имя сервера 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. Любая помощь очень ценится!
Здесь есть хорошее объяснение https://github.com/bdkjones/CodeKit/issues/440 который заканчивается
Короче говоря, в этом нет ничего плохого -> MAMP имеет правильный заголовок хоста.
Поскольку вы пытаетесь различить test.local и localhost, вы можете использовать:
if (strpos($_SERVER['HOST_NAME'],'localhost') !== false) {
echo 'localhost';
} else {
echo 'not localhost';
}
Других решений пока нет …