stream_select
Функция stream_select() получает массивы потоков и ждёт изменения их статуса. Её работа эквивалентна работе функции socket_select() , за исключением того, что она работает с потоками.
Список параметров
Потоки, перечисленные в массиве read будут отслеживаться на предмет появления символов, доступных для чтения (точнее, чтобы убедиться, что чтение не будет блокироваться — в частности, потоковый ресурс также готов для чтения в конце файла, но в этом случае функция fread() будет возвращать строку нулевой длины).
Потоки, перечисленные в массиве write , будут отслеживаться на предмет того, что запись в них не будет блокироваться.
Потоки, перечисленные в массиве except , будут отслеживаться на предмет поступления высокоприоритетных исключительных (внеполосных или «out-of-band») данных.
Замечание:
Когда stream_select() возвращается, массивы read , write и except изменяются для того, чтобы указать, какие потоковые ресурсы на самом деле изменили статус. Исходные ключи массивов ( array ) сохраняются.
Параметры seconds и microseconds вместе формируют параметр timeout, seconds указывает число секунд, а microseconds — число микросекунд. Параметр timeout — это верхняя граница времени, которое функция stream_select() будет ожидать до возвращения. Если параметры seconds и microseconds оба установлены в 0 , то функция stream_select() не будет ожидать данных — вместо этого она вернётся немедленно, указывая текущий статус потоков.
Если параметр seconds равен null , то функция stream_select() может выполняться неопределённое время, возвращаясь только тогда, когда происходит событие на одном из отслеживаемых потоков (или если системный вызов прерывается сигналом).
Внимание
Использование значения времени ожидания 0 позволяет вам мгновенно опросить статус потоков, однако ПЛОХАЯ идея использовать значение времени ожидания 0 в цикле, так как это заставит ваш скрипт потреблять слишком много процессорного времени.
Гораздо лучше указать значение времени ожидания в несколько секунд, хотя если вам нужно проверять и одновременно запускать другой код, использование времени ожидания как минимум 200000 микросекунд поможет уменьшить использование процессорного времени вашим скриптом.
Запомните, что значение времени ожидания — это максимальное время, которое будет затрачено. Функция stream_select() вернётся как только запрошенные потоки будут готовы к использованию.
microseconds
Смотрите описание параметра seconds .
Возвращаемые значения
В случае успешного выполнения функция stream_select() возвращает количество потоковых ресурсов, содержащееся в изменённых массивах, которое может равно нулю, если превышено время ожидания до того, как произошло что-то интересное. В случае возникновения ошибки возвращается false и возникает предупреждение (это может случиться, если системный вызов прерывается входящим сигналом).
Список изменений
| Версия | Описание |
|---|---|
| 8.1.0 | Параметр microseconds теперь допускает значение null . |
Примеры
Пример #1 Пример использования stream_select()
Этот пример проверяет, что получены данные для чтения на потоках $stream1 или $stream2 . Так как значение времени ожидания равно 0 , функция возвратится немедленно:
/* Подготовить массив для чтения */
$read = array( $stream1 , $stream2 );
$write = NULL ;
$except = NULL ;
if ( false === ( $num_changed_streams = stream_select ( $read , $write , $except , 0 ))) /* Обработка ошибок */
> elseif ( $num_changed_streams > 0 ) /* Как минимум на одном из потоков произошло что-то интересное */
>
?>?php
Примечания
Замечание:
По причине ограничения в текущем Zend Engine невозможно передать постоянную null непосредственно как параметр в функцию, которая ожидает, что этот параметр будет передан по ссылке. Вместо этого используйте временную переменную или выражение, в котором крайний левый член будет временной переменной:
$e = NULL ;
stream_select ( $r , $w , $e , 0 );
?>?php
Замечание:
Убедитесь, что используете оператор === при проверке на ошибку. Так как функция stream_select() может возвращать 0, сравнение с использованием == может возвращать true :
$e = NULL ;
if ( false === stream_select ( $r , $w , $e , 0 )) echo «Произошла ошибка при вызове stream_select()\n» ;
>
?>?php
Замечание:
Если вы читаете/пишете в поток, возвращаемый в массивах, знайте, что они не обязательно читают/пишут полное количество данных, которое вы запросили. Будьте готовы к тому, чтобы иметь возможность читать/писать даже по одному байту.
Замечание:
Некоторые потоки (например, zlib ) не могут быть выбраны этой функцией.
Замечание: Совместимость с Windows
Использование функции stream_select() на файловых дескрипторах, возвращённых функцией proc_open() не удастся и возвратит false под Windows.
STDIN из консоли меняет статус, как только становятся доступны какие-либо входные события, но чтение из потока всё ещё может блокироваться.
Смотрите также
- stream_set_blocking() — Установить блокирующий/неблокирующий режим в потоке
Как передать значение select в php ?
Тоже учу PHP. И не вижу чтоб мануалов было дофига. От текстового поля передаёт значения от «выборщика»
8 янв 2019 в 13:51
От выборщика «селект»! Тут не отобразился тег.
8 янв 2019 в 13:52
3 ответа 3
Сортировка: Сброс на вариант по умолчанию
соответственно обработчик, чтобы передать name
[email protected]"; $to /cdn-cgi/l/email-protection" data-cfemail="f68f9983b69b979f9ad88483">[email protected]"; $subject = "Сообщение от посетителя сайта"; $message = "\nПричина обращения:$select"; mail ($to,$subject,$message, "Content-Type: text/plain; charset=utf-8 \r\n") or print "Не могу отправить сообщение."; ?>
Отслеживать
ответ дан 30 июл 2014 в 9:43
27.6k 5 5 золотых знаков 35 35 серебряных знаков 65 65 бронзовых знаков
Блин, не успел. Но это точное решение, только добавь объявление метода передачи данных в форме.
30 июл 2014 в 10:07
я думаю это не проблема method=»get/post»
30 июл 2014 в 10:13
Вообще нельзя просто взять и передать. Вы похоже не очень хорошо понимаете принцип работы.
Браузер запрашивает страницу -> выполняется php код -> браузеру отдается сгенерированная страница.
Вы не можете «передать» селект в php потому что php код уже давно выполнился.
Вам надо сделать форму отправляющую данные на php скрипт, и там уже обработать. мануалов по этому вопросу чуть больше чем дофига, гуглите
Как передать выбранные значения из select multiple в php массив/переменную?
Когда выбираю одно значение в select, то все нормально, получаю;
string(1) «3»
Но когда выбираю больше одного значения, то получаю в ответ:
string(0) «»
Почему так происходит? Читал похожие вопросы тут, но не помогли [] в конце и вообще ничего не помогло.
А форма отправляется AJAX обработчиком:
var filter = $("#filter").serialize(); $.post(dle_root + "engine/ajax/controller.php?mod=filter&category_id=", , function(data) < if( data ) < var content = jQuery.parseJSON(data); limit = content.limit; all_news = content.all_news; now_news = content.now_news; if( content.error ) < $("#dle-content").html(news); HideLoading(''); >else < $("#dle-content").html(content.news); HideLoading(''); >> >
- Вопрос задан более двух лет назад
- 452 просмотра
1 комментарий
Простой 1 комментарий
Как в sql запрос вставить переменную php
Для того чтобы передать переменную в SQL запрос в PHP, можно использовать один из следующих вариантов:
- Использовать подготовленные запросы. Это позволяет избежать SQL инъекций и передавать переменные в запрос безопасным способом. Пример:
$stmt = $pdo->prepare('SELECT * FROM users WHERE email = :email'); $stmt->execute(['email' => $email]); $user = $stmt->fetch();
- Сформировать строку запроса с помощью конкатенации строк и передать ее в функцию выполнения запроса. Пример:
$sql = "SELECT * FROM users WHERE email = '" . $email . "'"; $result = mysqli_query($conn, $sql); $user = mysqli_fetch_assoc($result);
Важно учитывать, что при использовании второго варианта возможна SQL инъекция, поэтому необходимо очищать переменные перед использованием их в запросе.
Для более детального изучения вопроса «SQL инъекции» рекомендуем просмотреть урок Безопасность при работе с внешними данными из курса PHP PDO: Работа с базой данных
