Ich möchte so etwas wie dies zu tun:Lese Zeile für Zeile von STDIN
$ [mysql query that produces many lines] | php parse_STDIN.php
In parse_STDIN.php
Datei Ich möchte für Zeile von stdin meine Datenleitung in der Lage sein zu analysieren.
Ich möchte so etwas wie dies zu tun:Lese Zeile für Zeile von STDIN
$ [mysql query that produces many lines] | php parse_STDIN.php
In parse_STDIN.php
Datei Ich möchte für Zeile von stdin meine Datenleitung in der Lage sein zu analysieren.
Verwenden Sie STDIN
Konstante als Dateihandler.
while($f = fgets(STDIN)){
echo "line: $f";
}
Hinweis: fgets auf STDIN liest den \n
Charakter.
Sie könnten auch einen Generator verwenden - wenn Sie nicht wissen, wie groß der STDIN sein wird.
Benötigt PHP 5> = 5.5.0, PHP 7
Etwas entlang der Linien von:
function stdin_stream()
{
while ($line = fgets(STDIN)) {
yield $line;
}
}
foreach (stdin_stream() as $line) {
// do something with the contents coming in from STDIN
}
Sie können hier mehr über Generatoren lesen (oder eine Google-Suche nach Tutorials): http://php.net/manual/en/language.generators.overview.php
Was passiert, wenn eine Zeile in STDIN leer ist oder" "0"? – luchaninov
Da 'fgets()' den Zeilenumbruch am Ende behält ("\ n"), wird das nicht vor EOF passieren. – MatsLindh
Haben Sie versucht, diese Abfrage aus dem PHP-Skript heraus aufzurufen? Sie kennen mysqli_query ("SELECT' many_lines' FROM 'big_table'") ;? Auf diese Weise müssen Sie keine Argumente oder irgendetwas weiterleiten. PHP ist eine Skriptsprache, die für Webserver verwendet wird. Wenn Sie eine echte Verarbeitungslösung wünschen, verwenden Sie eine Programmiersprache wie C. – ATaylor
Erstens: Warum? Warum nicht einfach die Abfrage im PHP-Skript ausführen? Zweitens: 'while (! Feof (STDIN)) {$ line = fgets (STDIN); do_stuff ($ -Zeile); } ' – DaveRandom
Sie sollten wissen über die * Commandline Usage * Abschnitt im PHP-Handbuch: [Eingabe/Ausgabe-Streams] (http://php.net/manual/features.commandline.io-streams.php) – hakre