Intereting Posts
Получение имен файлов в каталоге Yii: Множественный порядок по условиям Используйте $ _POST для получения входных значений на одной странице Codeigniter: разрешение загруженных изображений – 600 на веб-сервере, изображения не отображаются на веб-сайте Многократная приставка PHP Корзина WooCommerce – проверка категорий условных элементов Извлечение данных из двух таблиц. изображения не работают как сканировать изображение на php или javascript? jQuery-скрипт плагина wordpress не работает в содержимом, загруженном через ajax создать определенную папку для загрузки на основе роли пользователя и ограничить доступ к другой папке в laravel elfinder php manual visibilty пример путают предотвратить кнопку возврата после выхода из системы Выделение слов в Javascript – Почему они не будут выделены после полной загрузки страницы? Как разместить сайт в обслуживании? Unix timestamp VS datetime

PHP unset get parameter?

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-адрес без параметров запроса.