[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Чудо собеседование
Эли4ка
Доброго времени суток всем. В общем тут появилась возможность сходить на собеседование, что я и сделала. Лучше бы не делала ohmy.gif
Попался очень заряженный паренёк.
Вопрос паренька(ВП):какие методы для HTTP знаешь?
Мой ответ(МО):POST,GET,PUT,DELETE,OPTION,HEAD,TRACE
ВП: Чем отличаются.
МО:называю разницу бла-бла-бла
И тут начался трешак:
Почему в php в суперглобальных переменных для методов HTTP реализованы только GET,POST, чем это может быть обусловлено?Ведь ты назвала больше методов
Я:о_О
Если HTTP это протокол передачи гипертекста, то зачем в php присутствует $_FILES?
Я:о_О
Алгоритм чтения информации о загруженном файле, кто добавляет туда информацию и каким образом, через что?
Я:о_О
Можно ли заменить $_POST,$_GET,$_COOKIE работой через php://* ?
Я:о_О
Есть адрес http://test.com/script.php?a=1&b=2 запроса метода GET, каким образом в $_GET['a'],$_GET['b'] окажутся значения 1 и 2 соответственно, кто их туда добавляет?
Я:о_О
Мы хотим добавить в суперглобальные переменные $_PUT, для обработки данных, пришедших методом PUT,чтобы не прописывать в hidden input'а название метода и т.д. Каким образом можно это сделать и можно ли вообще?
Я:о_О
Сможет ли PHP работать с протоколами,отличными от HTTP(S)?
Мой ответ был, что это задача для сервера,слушателя, а не для интерпретатора и после этого наше собеседование закончилось.
Ну да, я действительно не знаю этих простых вещей. Но я не думала. что разработчику это нужно знать.
Кто-нибудь может помочь ответить на эти вопросы?
Спасибо.
Valick
Все вопросы на знание http, и в частности заголовков запроса, в чём проблема погуглить? smile.gif

_____________
Стимулятор ~yoomoney - 41001303250491
Эли4ка
Valick,серьезно?
То есть суперглобальные переменные это тоже к http относится?
Реализация их в php тоже относится к http? rolleyes.gif
Valick
Серьёзно.

_____________
Стимулятор ~yoomoney - 41001303250491
FatCat
Эли4ка
Мне это напомнило как я сдавал экзамен на врачебную лицензию. Вопросы были и по генетическому консультированию, и по хирургической технике, и по акушерству, и по другим областям медицины, на которые получаемая лицензия не распространяется. Зачем требовать знания, которые никогда не потребуются в работе, на которую идешь, для меня загадка.

_____________
Бесплатному сыру в дырки не заглядывают...
Эли4ка
Я думала суперглобальные переменные к http не относятся.
Цитата
Эли4ка
Мне это напомнило как я сдавал экзамен на врачебную лицензию. Вопросы были и по генетическому консультированию, и по хирургической технике, и по акушерству, и по другим областям медицины, на которые получаемая лицензия не распространяется. Зачем требовать знания, которые никогда не потребуются в работе, на которую идешь, для меня загадка.

Я тоже так думаю, но некоторые вопросы меня заинтересовали.
И покопавшись в исходниках нашла следующее(файл zend/php_variables.c):

void php_startup_auto_globals(void)
{
zend_register_auto_global(zend_string_init_interned("_GET", sizeof("_GET")-1, 1), 0, php_auto_globals_create_get);
zend_register_auto_global(zend_string_init_interned("_POST", sizeof("_POST")-1, 1), 0, php_auto_globals_create_post);
zend_register_auto_global(zend_string_init_interned("_COOKIE", sizeof("_COOKIE")-1, 1), 0, php_auto_globals_create_cookie);
zend_register_auto_global(zend_string_init_interned("_SERVER", sizeof("_SERVER")-1, 1), PG(auto_globals_jit), php_auto_globals_create_server);
zend_register_auto_global(zend_string_init_interned("_ENV", sizeof("_ENV")-1, 1), PG(auto_globals_jit), php_auto_globals_create_env);
zend_register_auto_global(zend_string_init_interned("_REQUEST", sizeof("_REQUEST")-1, 1), PG(auto_globals_jit), php_auto_globals_create_request);
zend_register_auto_global(zend_string_init_interned("_FILES", sizeof("_FILES")-1, 1), 0, php_auto_globals_create_files);
}

То есть вот где и происходит их инициализация.
Рассмотрим для GET функцию:

static zend_bool php_auto_globals_create_get(zend_string *name)
{
if (PG(variables_order) && (strchr(PG(variables_order),'G') || strchr(PG(variables_order),'g'))) {
sapi_module.treat_data(PARSE_GET, NULL, NULL);
} else {
zval_ptr_dtor_nogc(&PG(http_globals)[TRACK_VARS_GET]);
array_init(&PG(http_globals)[TRACK_VARS_GET]);
}

zend_hash_update(&EG(symbol_table), name, &PG(http_globals)[TRACK_VARS_GET]);
Z_ADDREF(PG(http_globals)[TRACK_VARS_GET]);

return 0; /* don't rearm */
}

То есть так по цепочке раскручивать и можно разобраться.
Valick, извините, но вы совершенно не то посоветовали.
и почему то на удивление молчит Рон
killer8080
Цитата (Эли4ка @ 6.04.2019 - 00:29)
Почему в php в суперглобальных переменных для методов HTTP реализованы только GET,POST, чем это может быть обусловлено?Ведь ты назвала больше методов

Вообще то реализован только POST, $_GET не имеет никакого отношения к одноименному методу HTTP wink.gif
Эли4ка
Цитата (killer8080 @ 11.04.2019 - 14:53)
Вообще то реализован только POST, $_GET не имеет никакого отношения к одноименному методу HTTP

Почему?
killer8080
Цитата (Эли4ка @ 11.04.2019 - 15:41)
Почему?

потому что в $_GET находится десериализованные параметры query из URI. URI это самостоятельная сущность описанная в RFC, она не является частью HTTP протокола, а лишь используется им, так же как и многими другими протоколами. В свою очередь спецификации HTTP не накладывают никаких ограничений на URI в разных методах, т.е. эти параметры могут присутствовать в абсолютно любом методе http.
Если выполнить POST http://example.com/index.php?foo=bar, то что будет в $_GET? И где тут связь с методом? wink.gif

Давать переменной такое имя было ошибкой дизайна PHP, к которой все так привыкли, что никто не замечает.
Эли4ка
Цитата (killer8080 @ 11.04.2019 - 17:11)
потому что в $_GET находится десериализованные параметры query из URI. URI это самостоятельная сущность описанная в RFC, она не является частью HTTP протокола, а лишь используется им, так же как и многими другими протоколами. В свою очередь спецификации HTTP не накладывают никаких ограничений на URI в разных методах, т.е. эти параметры могут присутствовать в абсолютно любом методе http.

Поняла где моя слабина. Буду изучать.
Цитата (killer8080 @ 11.04.2019 - 17:11)
Если выполнить POST http://example.com/index.php?foo=bar, то что будет в $_GET?

В $_GET['foo'] будет значение "bar"
Цитата (killer8080 @ 11.04.2019 - 17:11)
И где тут связь с методом?

POST?
Цитата (killer8080 @ 11.04.2019 - 17:11)
Давать переменной такое имя было ошибкой дизайна PHP, к которой все так привыкли, что никто не замечает.

То есть $_GET это неверное значение?
А как тогда в других ЯП называется? или там нет такой переменной?
Метод то есть отправки данных.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.