Qualcuno mi può punto nella giusta direzione per la ricerca di come impedire agli utenti di rottura di uno script PHP con Ctrl + Z, Ctrl +C?Come impedire che Ctrl-Z, ctrl-c da rottura di uno script PHP
risposta
Usa ignore_user_abort funzione. Imposta questo in php.ini ignore_user_abort su true. Se modificato in TRUE gli script non verranno terminati dopo che un client ha interrotto la connessione, quindi lo script finirà.
ignore_user_abort(true);
o
$ php my_script.php -d ignore_user_abort = true
Se possibile, si può avvolgere il ciclo principale in un blocco try-catch, e schiacciare l'eccezione Abort/Interrupt (non sono sicuro quello esatto, mi dispiace, il mio PHP è un po 'arrugginito)
Anche se a corto di dettagli, l'approccio di questa risposta sembra l'unico per uno script da riga di comando, quindi non ottengo il downvote. – GreenMatt
perché non c'è alcuna eccezione di interruzione/interruzione in PHP –
Se si dispone di php compilato con PCNTL (Controllo processo) e non si esegue Windows è possibile utilizzare pcntl_signal()
.
V'è un esempio here che ho modificato, e sembra catturare Ctrl-C ok:
<?php
declare(ticks = 1);
pcntl_signal(SIGINT, "signal_handler");
function signal_handler($signal) {
switch($signal) {
case SIGINT:
print "Ctrl C\n";
}
}
while(1) {
}
Se si tenta di installare un gestore per SIGSTP
non succede nulla, ma io non so perché.
C'è un modo per farlo avendo disattivato nel guscio.
Source è qui.
#!/bin/bash
# at start add
trap "" 2 20
# your script
echo " Test"
# loop for sleep
sleep 5
20 è per CTRL + Z
2 è per i CTRL + C
e questo è l'elenco completo dei creato da trappola - | 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
però per fare questo diritto dal PHP è difficile, io non sono sicuro di come farlo, o se si può fare. in caso contrario alcuni siti hanno suggerito javascript per acquisire sequenze di tasti. spero che questo ti aiuti.
Se si utilizzano i valori numerici (piuttosto che il built-in costanti PHP) allora sembra funzionare, almeno per me, su un sistema Debian/Ubuntu.
Stranamente, nel mio esempio qui di seguito, non si chiede la signal_handler funzione di callback(). Invece, mostra solo "^ Z" e "^ C" sulla linea di input, mentre i segnali vengono semplicemente ignorati. Alla fine, nessuna interruzione/sospensione è possibile, che si spera risponda alla domanda originale:
#!/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. esecuzione di uno script Python da PHP
- 2. Esegui comando Drush da uno script PHP
- 3. come demonizzare uno script php da eseguire con upstart
- 4. Come posso eseguire uno script PHP da Java?
- 5. come gestire da PHP uno script bash sotto utente root
- 6. Come posso chiamare uno script Perl da PHP?
- 7. Come posso chiamare uno script python da uno script python
- 8. Esecuzione di git pull da uno script php
- 9. Come mantenere attivo uno script PHP persistente?
- 10. Come viene eseguito esattamente uno script PHP?
- 11. Script Src è una pagina di rottura
- 12. Impedire l'esecuzione istanze simultanee di uno script python
- 13. MySQL è "thread safe" da uno script php?
- 14. Vedere cosa CURL invia da uno script PHP
- 15. Come rilevare se uno script PHP è già in esecuzione?
- 16. Uno script PHP può abortire da solo o rilevare l'aborto?
- 17. Esegui uno script bash da uno script R
- 18. Esegui un comando colorato da uno script php
- 19. PowerShell: come posso impedire che gli errori vengano visualizzati in uno script?
- 20. Come eseguire uno script python da java?
- 21. Come eseguire uno script .sql da bash
- 22. Come eseguire uno script PowerShell da SSIS
- 23. Vim: Come modificare il testo da uno script di rientro
- 24. come disattivare virtualenv da uno script bash
- 25. come monitorare l'utilizzo della CPU di uno script PHP
- 26. come aggiungere uno script all'interno di un codice php?
- 27. Come ssh da uno script bash?
- 28. Come inserire uno spazio di non rottura in una NSString?
- 29. Come si chiamano più script MSBuild da uno script MSBuild
- 30. Avvio di ipython che esegue uno script
Intendi sulla riga di comando? –
Sì, sarà uno script della riga di comando in esecuzione che non voglio che gli utenti siano in grado di uscire, in sostanza. Ci scusiamo per i dettagli scadenti nel post, ancora svegliandosi. – teksolo