Значение параметра $type в socket_read()

Я пытаюсь создать соединение сокета tcp/ip из приложения С# к скрипту PHP 5.3 с использованием сокетов PHP. Приложение С# должно отправлять строки JSON в сценарий PHP.

Мой вопрос относительно руководства по socket_read: что они означают:

"PHP_BINARY_READ (Default) - use the system recv() function.
Safe for reading binary data."

Что именно делает PHP_BINARY_READ и почему я должен использовать функцию recv() при использовании этого параметра?

Любая помощь высоко ценится.


person Mike    schedule 15.03.2012    source источник
comment
Потому что, как вы знаете, в PHP не было почти достаточно крэка к тому времени, когда они добрались до socket_read()...   -  person Ignacio Vazquez-Abrams    schedule 16.03.2012


Ответы (2)


Важно то, что документация говорит о выборе other:

  • PHP_NORMAL_READ — чтение останавливается на \n или \r.

Выберите PHP_NORMAL_READ, если ваш сокет является строковым текстовым протоколом. Выберите PHP_BINARY_READ, если ваш сокет какой-то другой.

person sarnold    schedule 15.03.2012
comment
Ах! Это просто непонимание их английского языка; это заявление о том, что когда вы указываете этот параметр, это команда для PHP, что он должен использовать базовый системный вызов recv() для получения данных. Вам не нужно ничего с этим делать; это снова контраст с линейной работой другого параметра более высокого уровня. - person sarnold; 16.03.2012
comment
ага, понял! :-) Я был сбит с толку, потому что такая функция действительно существует в PHP: php .net/manual/en/function.socket-recv.php - person Mike; 16.03.2012

Это означает, что при использовании PHP_BINARY_READ этот системный вызов будет использоваться для чтения из базового разъем. Замечание о безопасности двоичных данных объясняется противопоставлением его альтернативе, которая читается

PHP_NORMAL_READ — чтение останавливается на \n или \r.

Следовательно, если вы хотите читать по одной строке за раз, используйте PHP_NORMAL_READ. В противном случае используйте PHP_BINARY_READ (по умолчанию).

person Adam Zalcman    schedule 15.03.2012