Ai đó có thể chỉ cho tôi đúng hướng để nghiên cứu cách ngăn người dùng thoát khỏi tập lệnh php với Ctrl + Z, Ctrl + C?Cách tắt ctrl-z, ctrl-c khỏi vi phạm tập lệnh php
Trả lời
Sử dụng ignore_user_abort chức năng. Đặt điều này trong php.ini ignore_user_abort thành true. Nếu thay đổi thành TRUE script sẽ không bị chấm dứt sau khi client đã hủy kết nối của chúng, do đó script sẽ kết thúc.
ignore_user_abort(true);
hoặc
$ php my_script.php -d ignore_user_abort = true
Nếu khả thi, bạn có thể quấn vòng lặp chính trong một khối try-catch, và dẹp trừ Abort/Interrupt (không chắc chắn một trong những chính xác, xin lỗi, PHP của tôi là một chút gỉ)
Trong khi viết tắt chi tiết, cách tiếp cận của câu trả lời này có vẻ là phương pháp duy nhất cho tập lệnh dòng lệnh, vì vậy tôi không nhận được câu trả lời. – GreenMatt
vì không có ngoại lệ hủy/ngắt trong PHP –
Nếu bạn đã biên dịch php với PCNTL (Điều khiển quy trình) và không chạy Windows, bạn có thể sử dụng pcntl_signal()
.
Có một ví dụ here mà tôi thay đổi, và có vẻ như để bắt 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) {
}
Nếu bạn cố gắng cài đặt một handler cho SIGSTP
có gì xảy ra, nhưng tôi không biết tại sao.
Có cách để làm điều đó bằng cách tắt trong trình bao.
Source có tại đây.
#!/bin/bash
# at start add
trap "" 2 20
# your script
echo " Test"
# loop for sleep
sleep 5
20 là dành cho tổ hợp phím CTRL + Z
2 là dành cho tổ hợp phím CTRL + C
và đây là danh sách đầy đủ của tạo ra bởi cái bẫy - | command
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
tuy nhiên để làm điều này trực tiếp từ PHP là khó khăn, tôi không chắc chắn làm thế nào để làm điều đó hoặc nếu nó có thể được thực hiện. nếu không một số trang web đề xuất javascript để nắm bắt tổ hợp phím. hi vọng điêu nay co ich.
Nếu bạn sử dụng các giá trị số (thay vì các hằng số PHP dựng sẵn) thì có vẻ như nó hoạt động, ít nhất là đối với tôi, trên hệ thống Debian/Ubuntu.
Thật kỳ lạ, trong ví dụ dưới đây, hàm gọi lại signal_handler() không được gọi. Thay vào đó, nó chỉ hiển thị "^ Z" và "^ C" trên dòng đầu vào, trong khi các tín hiệu đơn giản bị bỏ qua. Cuối cùng, không thể ngắt/tạm ngưng, hy vọng sẽ trả lời câu hỏi gốc:
#!/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. Tập lệnh Src đang vi phạm trang
- 2. JavaScript - Cách ẩn phạm vi toàn cầu khỏi tập lệnh được đánh giá
- 3. Phạm vi chức năng JavaScript giữa các thẻ tập lệnh
- 4. javascript xác định phạm vi bằng thẻ tập lệnh?
- 5. java.sql.SQLException Parameter index ra khỏi phạm vi
- 6. Cách tắt bộ chọn phạm vi từ biểu đồ highstocks
- 7. capybara - Tìm với xPath đang rời khỏi phạm vi trong phạm vi
- 8. Xóa đơn đặt hàng khỏi phạm vi ActiveRecord
- 9. PHP Phạm vi Ngày Kiểm tra
- 10. Thực thi tập lệnh php trước mỗi tập lệnh php?
- 11. cách thoát khỏi tập lệnh python trong câu lệnh if
- 12. Hàm sử dụng PHP() cho phạm vi?
- 13. PHP, một phạm vi biến lẻ?
- 14. java TreeSet ném IllegalArgumentException: chìa khóa ra khỏi phạm vi
- 15. "phạm vi ra khỏi trật tự trong lớp nhân vật" trong PHP regex?
- 16. Trong MongoDB java driver Mapreduce phạm vi lệnh; Thêm chức năng vào Phạm vi
- 17. PHP, xem phạm vi ngày có nằm trong một phạm vi ngày khác không
- 18. WebGL: chỉ số enablevertexattribarray ra khỏi phạm vi
- 19. PHP Phạm vi bảo tồn khi gọi một hàm
- 20. cách chạy tập lệnh php trong eclipse
- 21. Cách tạo proxy bằng tập lệnh php?
- 22. lạ "Chuỗi index ra khỏi phạm vi: 0" lỗi
- 23. java.lang.IllegalArgumentException: pointerIndex ra khỏi phạm vi ngoại lệ - dispatchTouchEvent
- 24. liên tục ra khỏi phạm vi với intrinsics NEON
- 25. Bảo vệ ứng dụng Android khỏi vi phạm bản quyền
- 26. khi nào một chuỗi thoát khỏi phạm vi?
- 27. F # trích dẫn: biến có thể thoát khỏi phạm vi
- 28. Heroku/Postgres Lỗi: số nguyên ra khỏi phạm vi
- 29. Phạm vi của các biến trong câu lệnh
- 30. Đóng PHP và phạm vi biến toàn cầu tiềm ẩn
Bạn có ý nghĩa trên dòng lệnh không? –
Có, sẽ là một dòng lệnh chạy mà tôi không muốn người dùng có thể thoát ra, về cơ bản. Xin lỗi vì các chi tiết kém chất lượng trong bài đăng, vẫn thức dậy. – teksolo