2011-07-07 29 views
11

Tôi tự hỏi nếu có một cách để bắt đầu một chủ đề riêng biệt trong php để gửi và gửi email. Tôi có một dịch vụ web nhỏ có một số thông tin từ một ứng dụng iPad và sau đó chèn dữ liệu vào một db và gửi một email sau đó. Vấn đề là đôi khi email mất quá nhiều thời gian để gửi và yêu cầu của iPad hết giờ. Có cách nào tôi có thể gửi email trên chuỗi riêng biệt không? Về cơ bản tôi muốn nói với mọi thứ về iPad đã thành công trước khi email gửi đi.Email trên các chủ đề riêng biệt trong php

Một số mã ví dụ:

... Process info and insert into DB 
echo "success"; //this should be returned to the iPad right away. 

//start new thread here or possibly fork??? 
$email->send(); 

Cảm ơn!

+0

PHP không có đa luồng gốc, nhưng hãy xem: http://stackoverflow.com/questions/70855/how-can-one-use-multi-threading-in-php-applications – feeela

Trả lời

5

Như đã chỉ ra, PHP không có khả năng đa luồng, nhưng nó có chức năng xử lý đa. Bạn có thể tạo và gọi một PHP thứ hai mà người đầu tiên sẽ gọi để xử lý email. Kịch bản này sẽ cần để có thể chạy trên dòng lệnh.

exec('nohup php emailscript.php >/dev/null 2>&1 &'); 

Điều quan trọng là phải có nohup và mọi thứ sau đó. Điều đó đang làm là đặt quá trình trong nền và chuyển hướng tất cả đầu ra. Nếu không PHP sẽ đợi nó kết thúc và trả về một cái gì đó. Các nohup sẽ đảm bảo rằng kịch bản không bị giết bởi hệ điều hành khi quá trình gọi cha mẹ kết thúc.

Bạn cần phải bằng cách nào đó chuyển thông tin email đến tập lệnh. Bạn có thể đặt thông tin trong cơ sở dữ liệu và chuyển nó vào một ID bản ghi, chuyển thông tin dưới dạng tham số hoặc một số tùy chọn khác.

1

Tôi tin rằng bạn muốn thực thi một số ob_flush() để gửi dữ liệu về máy khách và cho phép tập lệnh PHP của bạn tiếp tục thực thi. Lưu ý rằng bạn phải thực hiện việc gửi lại mọi thứ cho khách hàng, vì bạn không thể gửi thêm bất kỳ thông tin nào sau số ob_flush().

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