php://stderr
não é um fluxo que possa ser lido. É um canal para o STDERR
para o próprio processo PHP, que é somente de gravação.
Você precisa acessar os dados via STDIN
. Em vez de usar o wrapper php://
para acessar os fluxos STDIO, que são conhecidos como com bugs (consulte o manual ) você deve usar as constantes especiais STDOUT
, STDERR
e STDIN
. Então, por exemplo, eu poderia escrever seu script PHP assim:
#!/usr/local/bin/php
<?php
// The file we will be writing to. It's best to specify a full path, to avoid
// any confusion over the current working directory
$outFile = '/var/myuser/snmp.out';
// First, we'll open our outfile...
if (!$ofp = fopen($outFile, 'a')) exit("Oh No! I couldn't open my out file!");
// ...and write the current timestamp to it, so we are certain the script was
// invoked. You can remove this if you want, once you are sure it is working
fwrite($ofp, "Process started at ".date('Y-m-d H:i:s')."\n");
// Next we'll write all the trap data to the file
// We could use stream_copy_to_stream() for this, but I don't know if it is
// available on your server so I won't do it here
fwrite($ofp,"Data:\n");
while (!feof(STDIN)) {
fwrite($ofp, fread(STDIN, 1024)."\n");
}
fwrite($ofp,"End Data\n");
// We don't actually need a closing PHP tag and in many cases it is better
// to omit it, to avoid unexpected whitespace being output.