function getUrlCurrently() { $pageURL = (@$_SERVER["HTTPS"] == "on") ? "https://" : "http://"; if ($_SERVER["SERVER_PORT"] != "80") { $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"]; } else { $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; } return $pageURL; }
Я использую эту функцию для определения текущего URL страницы. Я хочу знать, можно ли расширить эту функцию, чтобы отключить заранее определенный параметр $ _GET.
Все мои значения $ _GET хранятся в массиве. Поэтому я могу получить доступ к определенным значениям, используя
$my_array[0]
Это дорого и нереально использовать мою предложенную логику для выполнения этой задачи?
EDIT: Я хочу только напечатать URL, чтобы использовать его в качестве ссылки.
У моего url есть параметры GET.
Обновите свою функцию:
function getUrlCurrently($filter = array()) { $pageURL = isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == "on" ? "https://" : "http://"; $pageURL .= $_SERVER["SERVER_NAME"]; if ($_SERVER["SERVER_PORT"] != "80") { $pageURL .= ":".$_SERVER["SERVER_PORT"]; } $pageURL .= $_SERVER["REQUEST_URI"]; if (strlen($_SERVER["QUERY_STRING"]) > 0) { $pageURL = rtrim(substr($pageURL, 0, -strlen($_SERVER["QUERY_STRING"])), '?'); } $query = $_GET; foreach ($filter as $key) { unset($query[$key]); } if (sizeof($query) > 0) { $pageURL .= '?' . http_build_query($query); } return $pageURL; } // gives the url as it is echo getUrlCurrently(); // will remove 'foo' and 'bar' from the query if existent echo getUrlCurrently(array('foo', 'bar'));
сfunction getUrlCurrently($filter = array()) { $pageURL = isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == "on" ? "https://" : "http://"; $pageURL .= $_SERVER["SERVER_NAME"]; if ($_SERVER["SERVER_PORT"] != "80") { $pageURL .= ":".$_SERVER["SERVER_PORT"]; } $pageURL .= $_SERVER["REQUEST_URI"]; if (strlen($_SERVER["QUERY_STRING"]) > 0) { $pageURL = rtrim(substr($pageURL, 0, -strlen($_SERVER["QUERY_STRING"])), '?'); } $query = $_GET; foreach ($filter as $key) { unset($query[$key]); } if (sizeof($query) > 0) { $pageURL .= '?' . http_build_query($query); } return $pageURL; } // gives the url as it is echo getUrlCurrently(); // will remove 'foo' and 'bar' from the query if existent echo getUrlCurrently(array('foo', 'bar'));
Не уверен, что вы действительно хотите с этим сделать, но $_GET
(и другие супер-глобалы) не доступны только для чтения:
unset()
значения. Обратите внимание, однако, что изменение $_GET
часто не считается хорошей практикой: когда читаешь какой-то код, он ожидает, что в $_GET
исходит из параметров в URL-адресе, а не из вашего кода.
Например, вы можете абсолютно сделать что-то вроде этого:
unset($_GET['my_item']);
Чтобы собрать ссылку с параметрами GET в массиве, попробуйте:
unset($my_array['key']); $url = getUrlCurrently() . '?' . http_build_query($my_array);
сunset($my_array['key']); $url = getUrlCurrently() . '?' . http_build_query($my_array);
См. http://www.php.net/manual/en/function.http-build-query.php
Это связано с $ _GET. Вы можете просто использовать существующие глобальные данные $ _SERVER или getenv, например:
function GetCurrentUrl($debug=FALSE) { $pageURL = (strtolower($_SERVER["HTTPS"]) == "on") ? "https://" : "http://"; if ($_SERVER["SERVER_PORT"] != "80") { $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"]; } else { $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; } // DEBUG if ($debug) { $msg = "DEBUG MODE: current URL= ".$pageURL ; if (function_exists('debug_msg')) { debug_msg($msg , $debug) ; }else { echo $msg ; } } return $pageURL; }
EDIT: но я вижу, откуда вы пришли с вашим заявлением $ _GET. Вы имеете в виду, что URI содержит некоторые параметры. Вы получите их с помощью $ _SERVER ['REQUEST_URI'] или, как лучше всего, с помощью http_build_query
EDIT2: Кроме того, что касается одной точки вашего вопроса, вы можете также добавить работу для настройки «переписывающей» функции, как описано в этом интересном примере руководства по php .
Не будет ли проще пользователь $_SERVER['SCRIPT_URI']
?
Он возвращает полный URL-адрес без параметров запроса.