No funciona un programa con "$name = trim(fgets(STDIN))"

Iniciado por Linton, 26 Noviembre 2013, 17:14 PM

0 Miembros y 1 Visitante están viendo este tema.

Linton

Estoy con un manual de PHP y me encuentro este sencillo programa:

Código (php) [Seleccionar]
<?php
echo "Hello there. So I hear you're learning to be a PHP programmer!\n";
echo 
"Why don't you type in your name for me:\n";
$name trim(fgets(STDIN));
echo 
"\nThanks, " $name ", it's really nice to meet you.\n\n";
?>


Se supone que solicita el nombre del usuario y responde con un mensaje de bienvenida. Lo he probado, y aparece esto:

Hello there. So I hear you're learning to be a PHP programmer! Why don't you type in your name for me:
Notice: Use of undefined constant STDIN - assumed 'STDIN' in C:\xampp\htdocs\htdocs\php28\index.php on line 5

Warning: fgets() expects parameter 1 to be resource, string given in C:\xampp\htdocs\htdocs\php28\index.php on line 5
Thanks, , it's really nice to meet you.


¿Dónde está el fallo? Gracias, un saludo.

Vaagish

Citar$name = trim(fgets(STDIN));

Bueno, nunca use fgets en PHP, pero tiene que esta mal. Si te fijas la ayuda que da la pagina de PHP acerca de fgets dice:

Citarstring fgets ( resource $handle [, int $length ] )
Obtiene una línea desde el puntero al fichero.

No veo tu handle, ni el argumento opcional lenght.. le estas pasando como argumento a la función un string, "STDIN", eso no es un handle..

PD: El handle es una variable, que "apunta" a un archivo abierto previamente..

Saludos!


Vaagish

Mmm.. pero ahí también dice:

$line = trim(fgets(STDIN)); // lee una línea de STDIN

Veo que lo que yo decía, no esta bien del todo.. proba:

Flujo abierto a stdin. Ahorra tener que abrirlo con

<?php
$stdin 
fopen('php://stdin''r');
?>


como decía Saberuneko

Linton

Uf no he entendido casi nada, estoy muy verde en PHP  :-( ¡Gracias de todas formas, un saludo!

dRak0

Segun lo q lei qdaria
<?php
$stdin = fopen('php://stdin&#039;, 'r');
echo trim(fgets($stdin));
?>