[PHP] Commandline & STDOUT

Pagina: 1
Acties:

  • Glock
  • Registratie: November 2001
  • Niet online
Zoals de meeste hier wel zullen weten ondersteunt PHP 'officieel' de commandline sinds versie 4.2.0 (hier nog experimenteel, maar vrijwel geheel te vinden). Een van de uitbreidingen die hierbij te vinden zijn is het gebruik van STD.

Nu ging ik hier een beetje mee testen en werkt allemaal mooi, alleen bij STDOUT word alles waar hiernaar word geschreven pas aan het einde van het script doorgestuurt... Dit in tegenstelling als dat je echo of print met implicit_flush zou gebruiken :(

Dit is het scriptje waarmee ik heb lopen testen (ik heb ook zonder functies en etc lopen testen, maar kom er gewoon niet uit, of is het zo dat dit gewoon niet mogelijk is???)
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?

/* Check PHP Version */
if (version_compare(phpversion(),'4.2.0','<')) {
    echo "PHP te oud";
}

/* Check if STDIN is implented by checking PHP version */
if (version_compare(phpversion(),'4.3.0','<')) {
    define('STDIN',fopen("php://stdin","r"));
    define('STDOUT',fopen("php://stdout","w"));
    define('STDERR',fopen("php://stderr","w"));
    register_shutdown_function( create_function( '' ,
      'fclose(STDIN); fclose(STDOUT); fclose(STDERR);
      return true;' ) );
}

/* Function to get a new line from the command */
function get_line () {
    $line = fgets ( STDIN, 4094 );
    return (PHP_OS == "WINNT") ? (str_replace("\r\n","",$line)) : (str_replace("\n","",$line));
}

/* Write to the commandline */
function write ( $string ) {
    fputs ( STDOUT, $string, strlen($string) );
    return TRUE;
}
echo "test";
write("Dit is een test.\r\n\r\n");
write("Dit is nog een test.");

$ct = get_line();

write( $ct );
?>


edit:
ffies iets leesbaarder gemaakt

  • RvdH
  • Registratie: Juni 1999
  • Laatst online: 28-07 15:42

RvdH

Uitvinder van RickRAID

A.) Gebruik Perl voor deze dingen
B.) http://nl.php.net/manual/en/function.flush.php

Werkt die flush() niet?
In perl is het $| ff op 1 setten.. soort implicit_flush setting, maar dan per script.

[ Voor 0% gewijzigd door RvdH op 04-08-2002 12:33 . Reden: react en z'n dumb-ass smilies ]


  • Glock
  • Registratie: November 2001
  • Niet online
strlen schreef op 04 augustus 2002 @ 12:32:
A.) Gebruik Perl voor deze dingen
B.) http://nl.php.net/manual/en/function.flush.php

Werkt die flush() niet?
In perl is het $| ff op 1 setten.. soort implicit_flush setting, maar dan per script.
a) zoals ik al zei wask aan het testen, dus dat maakt niet veel uit hier
b) flush == voor echo en print, en das nou juist het irri, implicit flush == flush maar werkt niet voor STDOUT :(

  • MikeN
  • Registratie: April 2001
  • Laatst online: 11:07
Ik zou even naar http://nl.php.net/fflush kijken, aangezien je met file handles werkt.

  • Glock
  • Registratie: November 2001
  • Niet online
MikeN schreef op 04 augustus 2002 @ 12:52:
Ik zou even naar http://nl.php.net/fflush kijken, aangezien je met file handles werkt.
thx :) scheelt een f'je ;)

edit:
Goh, leer dan toch ook is NL mike :P nu moek helemaal de quote weer aanpassen ;) :P :P :P :P :P