fopen and stream_select not working after PHP 8 upgrade
13:47 11 Dec 2025

I upgraded a PHP 7 application to PHP 8. The following code was working before, but no longer:

$options = [
    'http' => [
        'method' => 'POST',
        'header' => "Content-Type: application/x-www-form-urlencoded\r\n"
            . 'Content-Length: ' . strlen($content),
        'content' => $content,
        'timeout' => 30,
    ],
];
$context = stream_context_create($options);
$stream = fopen($url, 'r', false, $context);

$read[] = $stream;
$write = null;
$except = null;
$streamsChanged = stream_select($read, $write, $except, 0, 50000);

Now the call to stream_select produces the following error:

Type: ValueError
Message: No stream arrays were passed

I've tried this same post call using Insomnia with no issue, so it does appear to be an issue with how I'm using PHP 8.

A var_dump of $stream returns type (stream), so the type is correct. I also ran $stream through a is_resource($stream) && get_resource_type($stream) === 'stream' && !feof($stream) check, and it passed.

php stream php-8