Что это за код? - PullRequest
       20

Что это за код?

0 голосов
/ 09 февраля 2011

Обратите внимание на следующий фрагмент кода:

Из php-5.3.1 / ext / session / session.c:

PHPAPI char *php_session_create_id(PS_CREATE_SID_ARGS)
…
gettimeofday(&tv, NULL);
…
/* maximum 15+19+19+10 bytes */
spprintf(&buf, 0, "%.15s%ld%ld%0.8F", remote_addr ? 
remote_addr : "", tv.tv_sec, (long int)tv.tv_usec, 
php_combined_lcg(TSRMLS_C) * 10);
…
return buf;
}

Я нашел это в интернете. Но я не могу понять, что это за код. Я предполагаю, что это реализация функции php в C ++. Если да, то, пожалуйста, объясните мне, как в нем работает php calles c ++?

Ответы [ 3 ]

4 голосов
/ 09 февраля 2011

Это не код C ++, это чистый C. Библиотека PHP может вызывать функции C, как и любая другая библиотека, реализованная в C. Фрагмент кода генерирует «уникальный» идентификатор сеанса, состоящий из адреса клиента и текущего времени.и псевдослучайное число от некоторого линейного конгруэнтного генератора.

4 голосов
/ 09 февраля 2011

Шокирующая правда в том, что PHP написан на C. Вы смотрите на источник самого PHP, или вам нужно объяснить вопрос дальше.

1 голос
/ 09 февраля 2011

Я предполагаю, что вы получили этот кусок кода в лекции DEFCON 18: Как я встретил вашу подругу ? Отличный разговор, кстати. : -)

Теперь о фрагменте кода, это C, и это часть кода PHP. Эта точная функция обрабатывает генерацию идентификаторов сессии PHP. У вас есть вся функциональная логика, объясненная в упомянутой выше лекции, на случай, если вы ее не видели.

С другой стороны, PHP не вызывает функции C, вместо этого вы вызываете библиотечную функцию PHP, поэтому бывает, что большинство этих функций написаны на C и доступны через PHP. С другой стороны, php_session_create_id не имеет аналога, доступного для PHP, так как он используется внутри PHP при запуске сеанса с использованием сеанса PHP api .

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