web-dev-qa-db-fra.com

Lecture ligne par ligne de STDIN

Je veux faire quelque chose comme ça:

$ [mysql query that produces many lines] | php parse_STDIN.php

Dans parse_STDIN.php fichier Je veux pouvoir analyser mes données ligne par ligne depuis stdin.

45
sobi3ch

utilisez STDIN constant comme gestionnaire de fichiers.

while($f = fgets(STDIN)){
    echo "line: $f";
}

Remarque: fgets sur STDIN lit le \n personnage.

90
Shiplu Mokaddim

Vous pouvez également utiliser un générateur - si vous ne savez pas quelle sera la taille du STDIN.

Nécessite PHP 5> = 5.5.0, PHP 7

Quelque chose dans le sens de:

function stdin_stream()
{
    while ($line = fgets(STDIN)) {
        yield $line;
    }
}

foreach (stdin_stream() as $line) {
    // do something with the contents coming in from STDIN
}

Vous pouvez en savoir plus sur les générateurs ici (ou une recherche Google pour les didacticiels): http://php.net/manual/en/language.generators.overview.php

15
Luis Colón