Наложи ми се да напиша скрипт на php, който да управлява външно конзолно интерактивно приложение (софтуерен телефон). Тъй като се ползват едновременно стандартния вход и стандартния изход, естествено най-подходящия начин за стартиране на приложението е с функцията proc_open(), която автоматично създава дескриптори за вход, изход и грешка. Проблемът се появи при четене на изхода от приложението с fgets(), тъй като се оказа че за дексрипторите на proc_open() не функционира задаване на таймаут с stream_set_timeout() и скриптът „увисваше“ чакайки до безкрайност да прочете стандартния изход на приложението.

За мен проработи решението с функцията guarded_fgets($pipes), описана в последния постинг на един доста старичък bug report