Есть ли ф-я, возвращающая код клавиши или false, если ничего не нажато?

StUV

Rotaredom
ColoneL
т.е. буквально
"Я только начал изучать пхп и для более детального понимания принципов его работы я поставил себе задачу написать на пхп кроссплатформенный драйвер для своей любимой видеокарты. Если Вы не знаете как мне в этом помочь не мешайте мне решать поставленную мной задачу."

приведи хотя бы 3 причины ради чего писать "простенькую консольку" на пхп ?
 

hermit_refined

Отшельник
Андрейка
а проверьте, если не верите.
(и с чего это не должно, интересно?)
 

Андрейка

Senior pomidor developer
hermit_refined
не поверишь - и до твоего поста проверял и скопировав твою строку - все равно stream_set_blocking === false
PHP516, win

StUV
людей, которые точно знают для чего нужно использовать пхп - единицы.. вы один из тех избранных... завидую
 

ColoneL

Новичок
2 hermit_refined

вот пример :

PHP:
stream_set_blocking(STDIN, false);

while (true) {
   $result = fgetc(STDIN);
   echo "->>>".$result;
}
Увы - не работает. Пока не нажмешь Enter - прога ждет ввода и "висит".

ps т.е. набрал пяток символов, нажал ентер: цикл прокрутился 5 раз - и снова заткнулся.

-~{}~ 27.10.06 13:01:

Автор оригинала: StUV
ColoneL
т.е. буквально
"Я только начал изучать пхп и для более детального понимания принципов его работы я поставил себе задачу написать на пхп кроссплатформенный драйвер для своей любимой видеокарты. Если Вы не знаете как мне в этом помочь не мешайте мне решать поставленную мной задачу."

приведи хотя бы 3 причины ради чего писать "простенькую консольку" на пхп ?
Дружище, давай оставим этот спор. Про драйвер я ни слова не говорил.
А консолька - это простенькая вещица, которая является TCP сервером для таких же простеньких клиентов. Ее дело - принять запрос и отправить ответ. Используется библиотека sockets (стандартная). А ее ф-и (конкретно socket_accept и socket_read) любят бесконечные циклы. Вот в этом цикле и нужно опрашивать клавиатуру.

Но если клавиатура заткнет цикл - новые запросы к серверу просто потеряются.

PS Про выбор другого языка программирования прошу не писать :)
 

hermit_refined

Отшельник
Андрейка
ColoneL
Ага, понятно. Но это не ко мне, а к разработчикам PHP - в unix работает, а в документации о некорректной работе в Windows - ни слова.

Попробовал обходной манёвр - через stream_select(), работает и там и там, но в Windows иногда зависает в начале (после первого Enter - всё нормально). С чем связана эта глючность - не знаю, по bugs.php.net пока не бродил.
 

StUV

Rotaredom
ColoneL
PS Про выбор другого языка программирования прошу не писать
если Вы не поняли - здесь форум и каждый сам решает о чем ему писать...
вот Вы пишите о кроссплатформенных консольках на пхп
с высоты собственного опыта это ессно интересно - типа, а вдруг оно такое сможет - 35-ый вариант решения задачи в моей копилке...
а рядом сидит 12-летний "кулхацкер" Вася, который кроме пхп ничего другого не видел и, увидев, что на этом можно что угодно писать не будет читать умные книжки о других технологиях и будет клепать потом корявый медленный глючный код используя неподходящие средства...

и смысл не просто в флейме, думайте иногда о подрастающем поколении ;)

---
зы: а найти готовый ответ на Ваш вопрос == google + rtfm + 10 min
 

uliss

Новичок
Автор оригинала: ColoneL
uliss, hermit_refined спасибо, попробую. Но ваши примеры заточены под Линукс. А у меня нет пока информации на какой платформе будут работать консольное приложение.

Кто нибудь знает, как это реализовать под Windows?

ps библиотека nurses по докам реализована для всех, кроме Windows.
Ну знаете, если у Вас сервер под win :D
в крайнем случае, в отладочных целях: Cygwin

Note: к выбору языков программирования данная проблема не имеет отношения вообще.
 

uliss

Новичок
Сергей Тарасов как с помощью указанной вами функции прочитать один символ из stdout БЕЗ НАЖАТИЯ enter?
 

Сергей Тарасов

Профессор
З.Ы. судя по постановке задачи, то она весьма странная.
Обычно в таких ситуациях используют демона.
Кто вам мешает крутить в одном потоке сам сервер, а в другом управлять его работой?
А идея полной кроссплатформенности - это бред. К сожалению даже в пхп не все так хорошо с переносимостью. Функции ввода-вывода с терминала и функции управления потоками и т.п. различаются для разных сред.
 

uliss

Новичок
так вот это и есть реализация демона

вот поэтому, автору топика:
Just use Linux :)

и man stty
 
Сверху