Согласно следующему коду, если $host_name
что-то вроде example.com
PHP возвращает уведомление: Message: Undefined index: host
но на полные URL-адреса, такие как http://example.com
PHP возвращает example.com
. Я пробовал, если заявления с FALSE и NULL, но не работают.
$host_name = $this->input->post('host_name'); $parse = parse_url($host_name); $parse_url = $parse['host'];
Как я могу изменить скрипт, чтобы принять example.com и вернуть его?
Обновите свой php. 5.4.7 Fixed host recognition when scheme is ommitted and a leading component separator is present.
Добавить схему вручную: if(mb_substr($host_name, 0, 4) !== 'http') $host_name = 'http://' . $host_name;
if(mb_substr($host_name, 0, 4) !== 'http') $host_name = 'http://' . $host_name;
Вы можете просто проверить, что схема присутствует, используя filter_var
и добавьте одну, если нет
$host_name = 'example.com'; if (!filter_var($host_name, FILTER_VALIDATE_URL, FILTER_FLAG_SCHEME_REQUIRED)) { $host_name = 'http://' . $host_name; } $parse = parse_url($host_name); var_dump($parse); array(2) { ["scheme"]=> string(4) "http" ["host"]=> string(11) "example.com" }
Просто добавьте схему по умолчанию в этом случае:
if (strpos($host_name, '://') === false) { $host_name = 'http://' . $host_name; } $parse = parse_url($host_name);
это примерная функция, которая возвращает реальный хост независимо от схемы.
function gettheRealHost($Address) { $parseUrl = parse_url(trim($Address)); return trim($parseUrl[host] ? $parseUrl[host] : array_shift(explode('/', $parseUrl[path], 2))); } gettheRealHost("example.com"); // Gives example.com gettheRealHost("http://example.com"); // Gives example.com gettheRealHost("www.example.com"); // Gives www.example.com gettheRealHost("http://example.com/xyz"); // Gives example.com