файл a.php:
<?php echo "abcdef"; ?>
файл b.php:
<?php $h=popen('php a.php',r); pclose($h); ?>
вопрос:
Я не вижу результат эха на консоли; почему и как это увидеть?
Я не хочу делать это в файле b.php, например: echo stream_get_contents($h);
Проверьте второй пример в документации по папке , он точно показывает, как это сделать:
<?php error_reporting(E_ALL); /* Add redirection so we can get stderr. */ $handle = popen('/path/to/executable 2>&1', 'r'); echo "'$handle'; " . gettype($handle) . "\n"; $read = fread($handle, 2096); echo $read; pclose($handle);
Этот фрагмент читается из stderr. Удалите трубу для чтения из стандартного вывода.
Вы не можете увидеть результат эха на консоли, потому что он никогда не попадал на консоль. Открыв процесс в режиме чтения, его STDOUT был связан с дескриптором файла открытого процесса. Единственный способ получить выход на консоль был бы, если бы вы прочитали из этого дескриптора файла, а затем повторили его.
Другими словами, поток.
Надеюсь, это объясняет, что здесь происходит. Если вы хотите увидеть вывод a.php на консоли, тогда b.php нужно прочитать его из потока в $ h, а затем повторить его, так как только b.php имеет доступ к консоли.
В качестве альтернативы, если вы используете system () вместо popen (), вывод будет выводиться на консоль вызывающего скрипта автоматически, потому что использование system () передает STDIN и STOUT основного сценария в вызываемую вами программу или скрипт.