Puede alguien me punto en la dirección correcta para la investigación de cómo evitar que los usuarios salir de un script php con Ctrl + Z, Ctrl + C?cómo deshabilitar Ctrl-Z, Ctrl-C de salir de un script php
Respuesta
Uso ignore_user_abort función. Establezca esto en php.ini ignore_user_abort en true. Si se cambian a TRUE, los scripts no finalizarán después de que un cliente haya abortado su conexión, por lo que el script finalizará.
ignore_user_abort(true);
o
$ php my_script.php -d ignore_user_abort = true
Si es factible, se puede envolver el bucle principal en un bloque try-catch, y aplastar la excepción Abortar/interrupción (no estoy seguro el exacto, lo siento, mi PHP es un poco oxidado)
Si bien no tengo muchos detalles, el enfoque de esta respuesta parece ser el único para un guión de línea de comando, por lo que no obtengo el voto en baja. – GreenMatt
porque no hay excepción de interrupción/aborto en PHP –
Si tiene compilado php con PCNTL (Control de proceso) y no está utilizando Windows, puede usar pcntl_signal()
.
No es un ejemplo here la que he modificado, y parece que coger bien Ctrl-C:
<?php
declare(ticks = 1);
pcntl_signal(SIGINT, "signal_handler");
function signal_handler($signal) {
switch($signal) {
case SIGINT:
print "Ctrl C\n";
}
}
while(1) {
}
Si intenta instalar un controlador para SIGSTP
no pasa nada, pero no sé qué.
Hay una manera de hacerlo desactivando en el shell.
Source está aquí.
#!/bin/bash
# at start add
trap "" 2 20
# your script
echo " Test"
# loop for sleep
sleep 5
20 es para CTRL + Z
2 es para CTRL + C
y esta es la lista completa de los creada por la trampa - | comando
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE
9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2
13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT
17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU
25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH
29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN
35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4
39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12
47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14
51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10
55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6
59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
sin embargo, para hacer esto directamente desde PHP es difícil, no estoy seguro de cómo hacerlo o si se puede hacer. de lo contrario, algunos sitios sugirieron javascript para capturar las pulsaciones de teclas. espero que esto ayude.
Si utiliza los valores numéricos (en lugar de las constantes de PHP integradas), entonces parece funcionar, al menos para mí, en un sistema Debian/Ubuntu.
Por extraño que parezca, en mi ejemplo a continuación, la función de devolución de llamada signal_handler() no se está llamando. En cambio, solo muestra "^ Z" y "^ C" en la línea de entrada, mientras que las señales simplemente se ignoran. Al final, no es posible romper/suspender, lo que con suerte responde a la pregunta original:
#!/usr/bin/php
<?
pcntl_signal(2, "signal_handler");
pcntl_signal(20, "signal_handler");
function signal_handler($signal)
{
echo("This is not even invoked..?\n");
}
$end = FALSE;
while($end == FALSE)
{
echo("Enter Q to quit: ");
$fp = fopen("php://stdin", "r");
$line = fgets($fp);
$line = str_replace("\n", "", $line);
fclose($fp);
if(strtolower($line) == "q") $end = TRUE;
}
?>
- 1. ¿Puede un script PHP iniciar otro script PHP y salir?
- 2. ¿Cómo puedo salir de un script nodeJS desde el script?
- 3. ¿Puedes 'salir' de un bucle en PHP?
- 4. Ejecutar un script PHP desde otro script PHP
- 5. PHP - salir del bloque IF
- 6. ¿Cómo salir de un método sin salir del programa?
- 7. ¿Cómo incluyo un script PHP en Python?
- 8. ¿Cómo ejecutar un script PHP grande?
- 9. ¿Cómo se ejecuta exactamente un script PHP?
- 10. Cómo deshabilitar el mensaje de error de script IE8?
- 11. Cómo ejecutar un comando de shell desde un script php
- 12. Llamar a un script bash desde un script tcl y regresar y salir del estado
- 13. Script de Linux para analizar el mensaje telnet y salir
- 14. Cómo hacer que el script php ejecute otro script php
- 15. ¿Ejecutar script php antes de cada script php?
- 16. script de Bash no salir inmediatamente cuando `exit` se llama
- 17. cómo controlar el uso de CPU de un script PHP
- 18. ejecutando un script de Powershell desde php
- 19. ¿Cómo salir si falla un comando?
- 20. Script PHP de carga de archivos PHP
- 21. ¿Cómo salir de CoffeeScript REPL?
- 22. Cómo deshabilitar la cookie de sesión de PHP?
- 23. ¿Cómo llamar a un script de Python desde PHP?
- 24. ¿Cómo ejecuto un script php a través de SSH?
- 25. Cómo reparar un viejo estilo de codificación script php
- 26. ¿Cómo puedo llamar un script de Perl desde PHP?
- 27. cómo agregar script dentro de un código php?
- 28. ¿Cómo ejecutar un script PHP de forma asincrónica?
- 29. ¿Cómo cargar el entorno de Wordpress en un script php?
- 30. Cómo salir de REPL
¿Quiere decir en la línea de comandos? –
Sí, se ejecutará un script de línea de comandos del que no quiero que los usuarios puedan salir, esencialmente. Perdón por los detalles de mala calidad en la publicación, aún despertando. – teksolo