نوشته شده توسط
mazoolagh
سلام و روز خوش
این پرسشی که مطرح کردین پیچیده و پیشرفته است.
چیزهایی هست که باید به اونها واقعا مسلط باشین و مکانیسم کار رو بدونین:
cron job ، curl ،
parallel processing (که با multi-threading متفاوت هست).
همچنین باید مشخص باشه این پیام (ایمیل؟) چه جوری ارسال میشه،
ممکنه خود سرویس یا اکستنشنی که استفاده میکنین ارسال همزمان رو پشتیبانی کنه.
نمونه کد وقتی میشه گفت که کد شما هم پیوست باشه (کد دقیق)،
همچنین ممکنه شما نمونه کدی پیدا کنین که برای سرور ویندوزی باشه و روی سرور لینوکس کار نکنه!
برای همین اگر این یک پروژه واقعی هست و شما هم به این مباحث تسلط کافی ندارین بهتره که اون رو برون سپاری کنین.
چون برای پیشنهاد یک پاسخ و روش مناسب و همچنین پیاده سازی اون،
نیاز هست که همه ابعاد و جوانب کار مشخص باشه.
ولی اگر قصد یادگیری دارین برای شروع و به عنوان راهنمایی میشه گفت که یک روتین جداگانه برای ارسال پیام مینویسین که:
آدرس(های) گیرنده(ها)، body و subject رو به عنوان پارامتر بگیره،
و در foreach این پروسه رو با popen (یا بهتر proc_open) سدا بزنین و یک pipe درست کنین.
در نظر داشته باشین که این فقط یک راه ممکن هست و همین هم به شکل های مختلفی میشه پیاده اش کرد.
ممنون از راهنمائی شما
من یک نمونه کد واسه این پیدا کردم
<?php
declare(ticks = 1);
$filesArray = [ 'file-0', 'file-1', 'file-2', 'file-3', 'file-4', 'file-5', 'file-6', 'file-7', 'file-8', 'file-9',];
$maxThreads = 3;
$child = 1;
pcntl_signal(SIGCHLD, function ($signo) { global $child; if ($signo === SIGCLD) { while (($pid = pcntl_wait($signo, WNOHANG)) > 0) { $signal = pcntl_wexitstatus($signo); $child--; } }});
foreach ($filesArray as $item) {
while ($child >= $maxThreads) {
sleep(1); }
$child++; $pid = pcntl_fork();
if ($pid) {
} else {
// Here your stuff.
sleep(2);
print_r( posix_getpid()." - $item \n");
exit(0);
}}while ($child != 0) {
sleep(3);}
ولی نمیدونم چرا کار نمیکند دوستان راهنمایی میکنند بتونیم تکمیلش کنیم
دوستان اگر کسی انجام می دهد برای من لطفا اعلام کنند تا زحمتش رذا بهش بدیم هزینه رو هم پرداخت میکنیم