una página mostrar modificar integra insertar importancia formulario dentro código correctamente con como combinar codigo añadir php shell

página - ¿Cómo escribo un script PHP interactivo en línea de comandos?



mostrar codigo php en html (9)

Básicamente se lee de entrada estándar. Ver flujos de entrada / salida .

Quiero escribir un script PHP que pueda usar desde la línea de comandos. Quiero que solicite y acepte entradas para algunos elementos, y luego escupa algunos resultados. Quiero hacer esto en PHP, porque todas mis clases y bibliotecas están en PHP, y solo quiero hacer una interfaz de línea de comandos simple para algunas cosas.

Las indicaciones y la aceptación de las entradas de línea de comando repetidas es la parte que me hace tropezar. ¿Cómo hago esto?


Desde PHP: Leer desde el teclado: obtenga información del usuario desde la consola del teclado escribiendo :

Necesita un archivo especial: php://stdin que representa la entrada estándar.

print "Type your message. Type ''.'' on a line by itself when you''re done./n"; $fp = fopen(''php://stdin'', ''r''); $last_line = false; $message = ''''; while (!$last_line) { $next_line = fgets($fp, 1024); // read the special file to get the user input from keyboard if ("./n" == $next_line) { $last_line = true; } else { $message .= $next_line; } }


El algoritmo es simple:

until done: display prompt line := read a command line of input handle line

Es muy trivial usar una matriz que asigna comandos a las funciones de devolución de llamada que los manejan. Todo el desafío es aproximadamente un bucle while, y dos llamadas de función. PHP también tiene una readline para aplicaciones de shell más avanzadas.


Encontré un ejemplo en PHP.net, Utiliser PHP en ligne de commande :

$handle = fopen("php://stdin", "r"); $line = fgets($handle); if (trim($line) != ''yes'') { ...


La página de secuencias de E / S del manual de PHP describe cómo puede usar STDIN para leer una línea desde la línea de comando:

<?php $line = trim(fgets(STDIN)); // reads one line from STDIN fscanf(STDIN, "%d/n", $number); // reads number from STDIN ?>


Mis cinco centavos: usando STDOUT y STDIN :

fwrite(STDOUT, "Please enter your Message (enter ''quit'' to leave):/n"); do{ do{ $message = trim(fgets(STDIN)); } while($message == ''''); if(strcasecmp($message, ''quit'') != 0){ fwrite(STDOUT, "Your message: ".$message."/n"); } }while(strcasecmp($message,''quit'') != 0); // Exit correctly exit(0);


No estoy seguro de lo complejo que puede ser su entrada, pero readline es una excelente manera de manejarlo para programas CLI interactivos.

Obtienes las mismas comodidades que esperarías de tu shell, como el historial de comandos.

Su uso es tan simple como:

$command = readline("Enter Command: "); /* Then add the input to the command history */ readline_add_history($command);

Si está disponible , realmente lo hace simple.

Aquí un típico do-case-while para la implementación de la consola:

do { $cmd = trim(strtolower( readline("/n> Command: ") )); readline_add_history($cmd); switch ($cmd) { case ''hello'': print "/n -- HELLO!/n"; break; case ''bye'': break; default: print "/n -- You say ''$cmd''... say ''bye'' or ''hello''./n"; } } while ($cmd!=''bye'');

donde el usuario puede usar flechas (arriba y abajo) para acceder al historial.


Sencillo:

#!/usr/bin/php <?php define(''CONFIRMED_NO'', 1); while (1) { fputs(STDOUT, "/n"."***WARNING***: This action causes permanent data deletion./nAre you sure you''re not going to wine about it later? [y,n]: "); $response = strtolower(trim(fgets(STDIN))); if( $response == ''y'' ) { break; } elseif( $response == ''n'' ) { echo "/n",''So I guess you changed your mind eh?'', "/n"; exit (CONFIRMED_NO); } else { echo "/n", "Dude, that''s not an option you idiot. Let''s try this again.", "/n"; continue; } } echo "/n","You''re very brave. Let''s continue with what we wanted to do.", "/n/n";