PHP не установлен получить параметр? - PullRequest
0 голосов
/ 26 июля 2011
 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]

Дорого и нереально ли использовать предложенную логику для выполнения этой задачи?

РЕДАКТИРОВАТЬ: я только хочу напечатать URL, чтобы использовать его в качестве ссылки.
В моем URL есть параметры GET.

Ответы [ 6 ]

7 голосов
/ 26 июля 2011

Не уверен, что вы действительно хотите сделать с этим, но $_GET (и другие суперглобальные) не только для чтения:

  • Вы можете добавлять значения в них,
  • Вы можете переопределить значения,
  • И, конечно, вы можете unset() значения.

Обратите внимание, однако, что изменение $_GET часто не считается хорошей практикой: когда кто-то читает какой-то код, он ожидает, что то, что в $_GET исходит от параметров в URL-адресе, а не от вашего кода.


Например, вы можете сделать что-то вроде этого:

unset($_GET['my_item']);
2 голосов
/ 26 июля 2011

Обновление вашей функции:

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'));
1 голос
/ 26 июля 2011

Это связано с $ _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;
}

РЕДАКТИРОВАТЬ: но я вижу, откуда вы с вашим заявлением $ _GET. Вы имеете в виду URI, содержащий некоторые параметры. Вы получите их по $ _SERVER ['REQUEST_URI'] или, как лучше предложено, используя http_build_query

EDIT2: Кроме того, что касается одной точки вашего вопроса, вы также можете добавить обходной путь для настройки функции, похожей на «перезапись», как описано в этом интересном примере этого руководства .

1 голос
/ 26 июля 2011

Чтобы собрать ссылку с параметрами GET в массиве, попробуйте:

unset($my_array['key']);
$url = getUrlCurrently() . '?' . http_build_query($my_array);

См. http://www.php.net/manual/en/function.http-build-query.php

0 голосов
/ 05 ноября 2018
//your query string is ?a=1&b=2&c=3
function unset_get($param){
    //sets string to (array) $query_string 
    parse_str($_SERVER['QUERY_STRING'],$query_string);

    //removes array element defined by param 
    unset($query_string[$param]);

    //returns modified array as a string 
    return http_build_query($query_string);
}
print unset_get( 'b');
//returns "a=1&c=3"
0 голосов
/ 26 июля 2011

Не будет ли проще для пользователя $_SERVER['SCRIPT_URI']?
Возвращает полный URL без параметров запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...