PHP переменная без аргумента? - PullRequest
3 голосов
/ 28 апреля 2010

просто интересно. Я видел сайты с таким типом URL http://www.something.com/?somedata, где 'somedata' является значением некоторой 'не упомянутой' переменной

как я могу сделать что-то подобное? все, что я знаю, это традиционный http://www.something.com/index.php?arg=somedata

спасибо большое

Ответы [ 7 ]

4 голосов
/ 28 апреля 2010

Это просто переменная без значения. Вы можете получить эту строку, используя list($value) = array_keys($_GET); - при условии, что вы гарантировали, что в массиве $_GET (count($_GET) === 1) есть ровно одно значение, в противном случае вы получите ошибку (если $count === 0) или нежелательное поведение (если * 1005) *).

1 голос
/ 28 апреля 2010

То, что вы видите как « значение некоторой« не упомянутой »переменной », более широко рассматривается как параметр строки запроса без значения. Таким образом, для foo=bar&baz, foo имеет значение bar, а baz не имеет значения (в PHP его значением будет пустая строка).

Поскольку другие ответы предоставляют разные способы доступа к этому имени параметра, вот мои два цента. Вы можете получить первый ключ массива $_GET, используя функцию key. Если ключ недоступен, key вернет NULL.

В гостях ?somedata=somevalue

var_dump(key($_GET), $_GET);
/*
string(8) "somedata"
array(1) {
  ["somedata"]=>
  string(9) "somevalue"
}
*/

В гостях ?somedata

var_dump(key($_GET), $_GET);
/*
string(8) "somedata"
array(1) {
  ["somedata"]=>
  string(0) ""
}
*/

В гостях ?

var_dump(key($_GET), $_GET);
/*
NULL
array(0) {
}
*/
1 голос
/ 28 апреля 2010

Это просто ярлык для логического значения.

somedata эквивалентно somedata = 1 или somedata = true

Когда проверяется на стороне сервера, наличия самой переменной достаточно для записи условия.

if ( isset($_GET['somedata']) ) { 
    //do something
}
1 голос
/ 28 апреля 2010

Обычно вы можете получить доступ к полной строке запроса, используя $_SERVER["QUERY_STRING"].

Я думаю, что каждый основной веб-сервер предоставляет эту переменную, я на 100% уверен в Apache и почти уверен в IIS.

0 голосов
/ 28 апреля 2010

Большинство веб-серверов, начиная с начала Интернета, позволяют определять имя файла по умолчанию для доставки в каталоги. Поэтому, если вы загружаете http://example.com/, он обслуживает такой файл (обычно index.html). В системах с поддержкой PHP вы обычно используете index.php для таких целей, хотя точное имя можно изменить. В Apache:

http://httpd.apache.org/docs/2.2/en/mod/mod_dir.html#directoryindex

Что касается ?somedata, то это просто переменная без значения (или, точнее, ее значение - пустая строка). Вы можете использовать его, если вам нужно только узнать, установлена ​​переменная или нет:

<?php

if( isset($_GET['somedata']) ){
    // Do some stuff
}

?>
0 голосов
/ 28 апреля 2010

Для вашего заданного URL вы можете просто перебрать массив $ _GET:

foreach ($_GET as $key => $value) {
    if ($key == 'somedata') {
        //do something
    }
}

Вы найдете параметр в ключах $ _GET.

Вы также можете извлечь ключи из $ _GET с помощью array_keys($_GET).

0 голосов
/ 28 апреля 2010

Они, вероятно, используют какое-то переписывание URL (см. Apache mod_rewrite), где URL преобразуется из http://www.something.com/?somedata в http://www.something.com/index.php?arg=somedata

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