¿Por qué stream_get_contents no funciona con ssh2?
Utilizo el siguiente código para recibir la hora del servidor Debian:
<?php
$connection = ssh2_connect('123.123.123.123', 23452);
ssh2_auth_password($connection, 'kvn', 'kvn');
$stream = ssh2_exec($connection, '/bin/date');
$err_stream = ssh2_fetch_stream($stream, SSH2_STREAM_STDERR);
$dio_stream = ssh2_fetch_stream($stream, SSH2_STREAM_STDIO);
stream_set_blocking($err_stream, true);
stream_set_blocking($dio_stream, true);
$result_err = stream_get_contents($err_stream);
$result_dio = stream_get_contents($dio_stream);
echo ($result_dio);
?>
Pero el código se bloquea en la línea:
$result_err = stream_get_contents($err_stream);
He intentado fgets()
pero el código también se bloquea. ¿Por qué es posible? ¿Cómo puedo recibir una cadena desde el stream? ¡Gracias!
davy.ai
El problema puede ser debido al almacenamiento en búfer del flujo de error. Para evitar esto, puedes intentar usar
stream_set_chunk_size()
para establecer el tamaño del fragmento del flujo y luego utilizarstream_get_contents()
para leer el flujo.En este código, he agregado
stream_set_chunk_size()
para el flujo de error con el fin de establecer el tamaño del fragmento en 1. Esto debería evitar el almacenamiento en búfer y permitir questream_get_contents()
lea correctamente el flujo.