• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

ожидание ответа функции

  • Автор темы Автор темы maykoff
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.
M

maykoff

Код:
$f = fopen("/dev/xxxx","a+");
fputs($f,"AT\r\n");
for(;;)
{
$str = fgets($f,8);
echo "$str";
if(preg_match("/OK\r\n/",$str)) break;
}
fclose($f);

/dev/xxxx - это компорт, на котором висит GSM-шлюз.
Проблема в том, что конца файла у $f, похоже , просто нет.
Прочитав всё что можно, на строке $str = fgets($f,8); зависает, ожидая дальнейшего вывода, которого нет.

Как вариант - задать (сэмулировать) таймаут для функции, в которую поместить чтение из указателя.
Но как это сделать - пока не придумал.

Если у кого какие соображения на этот счёт будут - заранее благодарен .
 
auto_detect_line_endings - это директива, которая включает определение окончания первой строки.
Мне же надо обработать окончание потока данных, читаемых из указателя.
feof() не срабатывает, скорее всего из-за отсутствия конца файла.
fgets просто ждёт следующего байта из указателя, скрипт висит.
 
Неужто больше идей нет?
Как вариант - получить информацию о сокете - количество невычитанных данных или наличие байта.
Но как это сделать - ума не приложу.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab