Tôi đang tạo trang web php và tôi muốn có một tập lệnh (khi bạn nhấp vào nút) để thêm thông tin vào cơ sở dữ liệu mysql của tôi (tôi có thể làm điều này một phần của bản thân mình) và nó thực hiện một kịch bản 5 phút sau đó. Có lẽ nó không khó, nhưng thật khó để google công cụ như thế này, cảm ơn trước.PHP: thực thi kịch bản 5 phút sau khi tập lệnh đầu tiên chạy
Trả lời
Bạn đang tìm kiếm điều đó?
'sleep' sẽ chặn; OP không đề cập đến nó một cách rõ ràng, nhưng nó có vẻ giống như một câu hỏi cho một giải pháp không chặn. – miku
Không thực sự, tôi muốn nó thực thi một tập lệnh khác. VÍ DỤ. nút gọi process.php và process.php phải thực thi other.php 5 phút sau đó. – Nyohosud
Một chút trí tưởng tượng ... Tất nhiên bạn không thể làm điều đó trong cùng một tập lệnh của trang web. Nhưng bạn có thể gọi từ scriptOfWebBrowser.php đến một tập lệnh actionAfter5Minutes.php khác trong máy chủ đang chạy nền với chức năng ngủ, do đó bạn không cần bất kỳ cron hoặc bất cứ điều gì và không phải là một vấn đề cho người dùng ... – raultm
Giấc ngủ là một ý tưởng rất tồi. Trình duyệt của khách hàng sẽ phải đợi 5 phút để hoàn thành yêu cầu !!!
Theo ý kiến của tôi, bạn không thể làm như bạn muốn.
Bạn nên tạo tập lệnh khác truy vấn cơ sở dữ liệu và kiểm tra xem có dữ liệu mới không (và khi tìm nạp thành công thực hiện công việc). Kịch bản này nên được chạy bởi cron mỗi N phút.
Bạn có thể triển khai hàng đợi trong cơ sở dữ liệu, nơi bạn thêm "lệnh" để thực thi và cũng lưu khi thực hiện lệnh này. Sau đó, có một công việc cron chạy mỗi phút và kiểm tra hàng đợi để xem nếu đó là thời gian để thực hiện một lệnh nào đó.
Khá khó khăn. tôi muốn đi cho một cái gì đó như thế này:
- kịch bản ban đầu của bạn cho biết thêm một kỷ lục cho cơ sở dữ liệu, bao gồm thời gian của mình thực hiện,
- kịch bản khác có chứa các hành động mà cần phải được thực hiện 5 phút sau - nhưng khởi chạy nó chỉ khi bản ghi db được đề cập ở trên chứa dấu thời gian của ít nhất 5 phút trước (hy vọng đủ rõ ràng, tôi đang gặp rắc rối khi làm như vậy)
- đặt crontab để thực thi tập lệnh thứ hai sau mỗi X phút (có thể là 2).
Sẽ không chính xác 5 phút, nhưng thay vào đó là từ 5 đến 7 (trong trường hợp bạn chọn khởi chạy tập lệnh sau mỗi 2 phút). Điều đó sẽ làm gì?
IMHO cách tốt nhất là: Trên nút bấm lưu công việc để chạy trong db với thời gian cần chạy. Viết một daemon nhỏ, lấy mỗi 10/5/2 giây các công việc mới cần được thực thi và thực thi chúng.
EDIT: Btw ý tưởng sử dụng cron để kiểm tra công việc mới để thực thi, tốt hơn, nhưng chỉ khi bạn có một trang web nhỏ và bạn không cần phải cân bằng tải cho công việc.
Cách tôi làm điều này là chạy một công việc cron giữa hai tập lệnh.
- tập lệnh đầu tiên đặt giá trị trong bảng cơ sở dữ liệu.
- công việc cron thực thi tập lệnh thứ hai. mỗi phút hoặc những gì không.
- tập lệnh thứ hai kiểm tra giá trị cơ sở dữ liệu được đặt bởi tập lệnh 1 để quyết định xem có chạy hoàn toàn hay không.
Bạn có thể chia rẽ quy trình và ở ngã ba trẻ em, ngủ trong 5 phút trước khi thực thi tập lệnh thứ hai. Tôi đã thử nghiệm này và nó xuất hiện quá trình con sẽ vẫn thực hiện ngay cả sau khi cha mẹ đã hoàn thành.Một cái gì đó như
//initial code
$pid = pcntl_fork(); //fork the process
if ($pid==0) // if in the child
{
exec("sleep 300; php second_process.php"); //sleep for 5 minutes and execute second script
return; // or exit
}
// rest of initial script...
"Trả lại"; là quan trọng vì phần còn lại của tập lệnh sẽ thực thi lần thứ hai (ví dụ: trong trẻ em) trừ khi nó ở đó.
Tôi khuyên bạn nên làm bộ hẹn giờ trong Javascript thay vì PHP.
Đặt dấu thời gian trong $ _SESSION của người dùng để cho biết thời điểm họ bắt đầu sự kiện và sau đó gọi lại Javascript cho trình duyệt sau năm phút.
PHP vẫn cần biết thời gian bắt đầu (để ngăn người dùng hack trò chơi bằng cách tinh chỉnh thời gian chờ của Javascript), nhưng không cần phải thực hiện bất kỳ thời gian đếm ngược hoặc ngủ hoặc bất cứ thứ gì như chính nó.
Nếu bạn đang ở trên một hộp unix:
exec("echo 'php script.php' | at now +5 minutes");
Mà sẽ sắp xếp các php script.php
lệnh để chạy sau 5 phút.
Điều này khá khó sử dụng với rất nhiều người dùng. – ceejayoz
Tôi đang tạo trò chơi dựa trên trình duyệt và tôi muốn trò chơi đó nếu ai đó muốn xây dựng tòa nhà cần * phút và sau đó kết thúc.
Xem xét đây là mục tiêu thực tế của bạn, tôi khuyên bạn chỉ nên lưu tòa nhà ban đầu có dấu thời gian.
Tôi biết bạn đã gắn thẻ câu hỏi của mình bằng PHP, nhưng tôi không muốn bao gồm tất cả phí xử lý truy vấn mysql trong PHP, đặc biệt là vì tôi không biết cách bạn thực hiện các truy vấn hoặc khung công tác nào bạn ' tái khởi kiện, vì vậy đây là một số giả để xử lý này "các tòa nhà xây dựng" nhiệm vụ:
build.php
building_type_id = sanitize(POST['id'])
user_id = current_user['id']
query('INSERT INTO buildings (user_id, building_type_id, created_at)
VALUES (' + user_id + ', ' + building_type_id + ', CURRENT_TIME)');
my_buildings.php
user_id = current_user['id']
completed_buildings = query('SELECT * FROM buildings b
LEFT OUTER JOIN building_types t ON b.building_type_id = t.id
WHERE DATE_ADD(b.created_at, INTERVAL t.construction_time SECOND) < NOW();')
under_construction = query('SELECT * FROM buildings b
LEFT OUTER JOIN building_types t ON b.building_type_id = t.id
WHERE DATE_ADD(b.created_at, INTERVAL t.construction_time SECOND) > NOW();')
Hy vọng điều này sẽ hữu ích!
Đây là một đoạn mã tuyệt vời, chính xác những gì tôi đang cố gắng đạt được! thời gian tới tôi sẽ thêm điều tôi muốn đạt được trong bài đăng đầu tiên. Cảm ơn! – Nyohosud
Nếu bạn thích, vui lòng đóng góp một phiếu bầu và/hoặc nhấp vào dấu kiểm ở bên trái của câu trả lời này để những người khác trong tương lai có thể dễ dàng tìm thấy nó hơn! –
- 1. Shell script: Thực hiện lệnh sau khi chạy lệnh "thoát" trong kịch bản lệnh
- 2. Thực thi tập lệnh php trước mỗi tập lệnh php?
- 3. Chạy tập lệnh PHP một lần mỗi phút
- 4. Chạy tập lệnh PHP cứ 5 phút một lần và tránh điều kiện cuộc đua
- 5. bash script để chạy trong 5 phút
- 6. Tập lệnh PHP có được thực thi sau khi chuyển hướng tiêu đề không?
- 7. Đóng tập tin thực thi sau khi chạy tệp jar
- 8. Shell chạy/thực thi tập lệnh php với tham số
- 9. Thu thập rác php trong khi tập lệnh chạy
- 10. Tự chạy tập lệnh php?
- 11. Tệp hàng loạt ngừng chạy sau lệnh đầu tiên
- 12. Thực thi lệnh đơn trong kịch bản lệnh shell mà không có sudo
- 13. Làm thế nào để bắt đầu một kịch bản shell trong một phút sau trong linux?
- 14. Crontab cứ 5 phút
- 15. Kịch bản lệnh Python thực thi các lệnh trong Thiết bị đầu cuối
- 16. cx_Freeze. Cách cài đặt dịch vụ và thực thi tập lệnh sau khi cài đặt
- 17. Tạo giao diện web cho tập lệnh mất 30 phút để thực thi
- 18. Không thể thực thi tập lệnh PHP bằng cách sử dụng PHP exec
- 19. Tập lệnh PHP có thể thực thi mã chung trước khi thoát() không?
- 20. Sự kiện cháy sau khi xác thực kịch bản lệnh phía máy khách trong asp.net?
- 21. Công việc Cron cho tập lệnh php yêu cầu thời gian thực thi RẤT dài
- 22. Thực thi kịch bản Powershell từ Node.js
- 23. Chạy tập lệnh bash từ tập lệnh khác mà không phải đợi tập lệnh hoàn tất quá trình thực thi?
- 24. Chạy lệnh Drush từ tập lệnh PHP
- 25. chạy kịch bản shell trong C++
- 26. Cách tốt nhất để định kỳ thực thi tập lệnh PHP là gì?
- 27. Đảm bảo tập lệnh Javascript đầu tiên được chạy?
- 28. Chạy cào từ tập tin thực thi
- 29. Thực thi tập lệnh ruby từ cron
- 30. Tại sao cron không thực thi tập lệnh PHP của tôi một cách chính xác?
Mục đích của hành động di dời theo thời gian này là gì? Thông tin nào được thêm vào yêu cầu sự dịch chuyển này? – Gumbo
Tôi đang tạo một trò chơi dựa trên trình duyệt và tôi muốn nó nếu ai đó muốn xây dựng một tòa nhà cần * phút và sau đó kết thúc. – Nyohosud
nhận xét đó giúp ích rất nhiều với sự hiểu biết của chúng tôi về những gì bạn đang cố gắng đạt được và cách giúp bạn. Tôi đề nghị rằng rất nhiều câu trả lời đã đưa ra đang cố gắng đạt được điều gì đó khá khác biệt. – Spudley