Como obter os dados enviados via Shell Pipe num script em PHP

image_pdfimage_print

Para obter os argumentos enviados pela execução de um comando no Shell via PHP, basta utilizar o array $argv. Exemplo:

php script.php arg1 arg2 arg3

Podem ser obtidos dentro do programa script.php basicamente como $argv[1], $argv[2] e $argv[3]. O argv[0] será o nome do script php.

Mas se os dados forem enviados via pip para o PHP, será possível ler estes dados enviados da entrada padrão.

// Ler $fp como se fosse um arquivo regular
$fp = file("php://stdin");

Uma outra forma que o PHP permite ler da standard input via STDIN é:

$data = stream_get_contents(STDIN);

Isto fará com que todo os dados obtidos seja salvo em $data.

Caso queira controlar o fluxo, ou processar os dados recebidos antes de salvá-lo, basta:

while(!feof(STDIN)){
    $line = fgets(STDIN);
}

Deste modo é possível proteger contra estouro de memória, quando os dados forem grande demais para serem armazenados na variável.

STDIN é apenas um atalho, uma forma reduzida de $fh = fopen(“php://stdin”, “r”);

Gostou? Tire um minutinho e dê sua contribuição para Drall Dev Community no Patreon!