Tôi làm cách nào để xử lý CTRL + C trong PHP trên dòng lệnh? Pcntl_*
chức năng không hoạt động trong Windows.CLI PHP trong Windows: Xử lý các lệnh Ctrl-C?
Trả lời
Nếu bạn muốn chạy một tác vụ trong PHP qua dòng lệnh mất một thời gian rất dài, tôi sẽ cố gắng tổ chức nó trong huy hiệu và theo dõi những gì đã được thực hiện.
Bây giờ bạn hoàn toàn có thể xử lý từng huy hiệu (ví dụ: xử lý và sau đó lưu trữ nó trong tệp xml) và không chỉ sau khi toàn bộ danh sách được xử lý. Vì vậy, một vụ tai nạn/dừng ở giữa sẽ chỉ hủy bỏ một huy hiệu và không phải tất cả chúng.
Nếu bạn lưu trữ vị trí hiện tại của mình sau mỗi huy hiệu ở đâu đó, bạn có thể dễ dàng tiếp tục khi tập lệnh của bạn bị treo hoặc bị dừng.
Bây giờ nếu bạn kiểm tra danh sách xử lý hệ điều hành để xem tập lệnh của bạn có đang chạy không, bạn có thể viết một công việc cron khởi động tập lệnh mỗi X phút nếu nó bị lỗi và chưa chạy.
Vì vậy, TL; DR
- Process công việc trong phù hiệu nhỏ
- cửa hàng vị trí của cuối cùng huy hiệu xử lý thành công
- Kiểm tra đã chạy quá trình lúc khởi
- Tiếp tục bắt đầu kịch bản cho đến khi tất cả đều hạnh phúc !
Điều đó sang một bên, tôi thích PHP cho các công việc dòng lệnh nhỏ nhưng nếu bạn có một nhiệm vụ lớn như vậy, một thứ khác có thể phù hợp hơn. Kiểm tra cái gì đó có thể chạy ổn định trong một thời gian dài và có một phương tiện cho thấy sự tiến bộ của nó. Có lẽ một ứng dụng C# nhỏ với một gui tối giản.
Đó có thể không phải là giải pháp CtRL + C mà bạn đang tìm kiếm nhưng đó là một giải pháp làm việc. Tôi rất nghi ngờ PHP có thể xử lý các quá trình hủy bỏ! Tuy nhiên, bạn có thể thử vận may của mình với "register_shutdown_function" – ToBe
Vâng, có pcntl_signal, nhưng đó chỉ dành cho các hệ thống Unix. –
bạn đang cố gắng đạt được điều gì? –
Không có Windows để kiểm tra, có lẽ ['w32api_register_function'] (http://www.php.net/manual/en/function.w32api-register-function.php) với [' SetConsoleCtrlHandler'] (http: // msdn. microsoft.com/en-us/library/windows/desktop/ms686016(v=vs.85).aspx), nhưng đó là một cách hoang dại đoán ở đây ... và có thể sai. – Wrikken
@Dagon Tôi cần kịch bản của mình để làm điều gì đó khi tôi ngắt lời. Ví dụ, viết trong bộ nhớ xml dom vào tập tin, trước khi bỏ. – x74x61