Есть скрипт сокет-сервера, который должен принимать данные. При этом установлен неявный сброс вывода с помощью ob_implicit_flush. Если удалить весь код после строки socket_accept включительно, то скрип выполняется и вывод отображается, но при запуске всего скрипта вывод игнорируется и он просто зависает на строке socket_accept. Попытки подключиться к нему так же безуспешны. Пример используется на PHP 5.4-5.6. Как я понял на более ранних версиях он работает корректно, но сам не проверял. Код (PHP): ob_implicit_flush(); set_time_limit(0); $address = '127.0.0.1'; $port = 8889; $sock = socket_create(AF_INET, SOCK_STREAM, 0); echo 'Создание сокета'; if (!$sock) { echo 'Ошибка: '.socket_strerror(socket_last_error()); exit(); } else { echo 'ОК'; } socket_set_option($sock, SOL_SOCKET, SO_REUSEADDR, 1); $bind = socket_bind($sock, $address, $port); if (!$bind) { echo 'Ошибка: '.socket_strerror(socket_last_error()); exit(); } else { echo 'OК'; } echo 'Прослушивание сокета... '; $listen = socket_listen($sock, 100); if (!$listen) { echo 'Ошибка: '.socket_strerror(socket_last_error()); exit(); } else { echo 'ОК'; } while (true) { echo 'Ожидание подключения... '; $client = socket_accept($sock); socket_close($client); if ($client === false) { echo 'Ошибка: '.socket_strerror(socket_last_error()); usleep(100); } else { echo 'ОК'.PHP_EOL; echo 'Соединение с клиентом "'.$client.'" установлено'; } socket_close($client); } socket_close($sock); Подсказка от модератора: Любой код или текст конфигурации пишите между тегом [code=php] и [/code]. Используйте отступы в коде для форматирования текста. Это помогает быстрее понять вас, увеличивает шанс на получение ответа. Что выделять? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, результаты array/object dump и т. д.
Вопрос - почему нет вывода при включенном ob_implicit_flush в присутствие socket_accept, хотя без него все работает нормально и в более ранних версиях php проблем тоже не было. Это было бы не так страшно, но к сокету доступ тоже получить не удается.
вывода может не быть потому, что буфер есть не только у пхп, но и у веб-сервера как минимум. Или потому что в сокете нет данных. И не понятно, почему ты думаешь, что что-то не работает. Потому что нет вывода в браузер? А если в файл писать и через tail смотреть?
Вывода нет только когда используется функция socket_accept. Если просто писать в сокет, то все ок. Нет, я же пишу, что доступа к сокету нет.