2008-11-25 29 views
7

Tôi đang viết một ứng dụng đơn giản trong PHP mà đôi khi cần phải thực hiện một bộ các bản cập nhật MySQL khá chuyên sâu. Tôi không đặc biệt muốn điều này gây ra sự chậm trễ cho người dùng, vì vậy tôi tự hỏi về việc sử dụng pcntl_fork().Có phải quá trình forking trong PHP/Apache là một ý tưởng hay không?

Tôi không chắc chắn điều này thực sự hiệu quả như thế nào: liệu quy trình con có tiếp tục chạy sau khi quá trình cha mẹ kết thúc không? Quá trình cha mẹ sẽ kết thúc và quá trình tải trang của người dùng hoàn toàn hoàn tất trước khi quá trình con hoàn thành?

Nói cách khác, đây có phải là cách an toàn để có tập lệnh PHP (chạy dưới Apache) thực hiện một số cập nhật tốn thời gian mà không trì hoãn người dùng hay tôi chỉ yêu cầu người dùng của mình trì hoãn?

+0

Hãy làm rõ trong tiêu đề câu hỏi mà bạn muốn nói đến một quy trình. Lần đầu tiên tôi nghĩ rằng bạn muốn ngã ba dự án. –

+0

Đồng ý với phjr. Ai đó có thể chỉnh sửa tiêu đề không? – OIS

Trả lời

3

Quá trình cha mẹ sẽ kết thúc, trang của người dùng sẽ tải đầy đủ, quy trình con sẽ tiếp tục và việc sử dụng sẽ không có phản hồi về việc quá trình con có thành công hay không.

1

Một người nào đó ở đó có thể cho bạn biết chi tiết những gì xảy ra khi bạn gọi dưới apache nhưng cơ hội là bạn sẽ nhận được câu trả lời không phải lúc nào cũng đúng tùy thuộc vào phiên bản và kết hợp của apache và php bạn đang sử dụng. Bạn nên sử dụng ajax và có hai yêu cầu. Trả lời một lần với trang cho biết bạn đang làm gì và sau đó với cuộc thăm dò cuộc gọi ajax, yêu cầu thứ hai về trạng thái và nơi bạn thực sự thực hiện công việc.

0

Nếu PHP chạy dưới Apache dưới dạng mô-đun mô-đun mod_php sẽ không hoạt động chút nào, bạn sẽ nhận được cảnh báo nói rằng chức năng * pcntl_fork() * không xác định. Trong trường hợp đó, một giải pháp tốt là sử dụng exec() để chạy một công việc php riêng biệt bằng cách sử dụng dòng lệnh.

0

Tôi nghĩ đó là một ý tưởng tồi. Tôi đã thực hiện các công cụ tương tự, và apache chuyển hướng ouput của cha mẹ cho con của nó. Đó là trình duyệt của bạn hiển thị thông tin từ một trong các tiến trình con.
Nhấp vào this để biết thêm thông tin
Hy vọng nó sẽ giúp bạn.

Các vấn đề liên quan