PHP Hangs في انتظار برنامج EXEC لإرجاع النتائج من WGET + MySQL Command
سؤال
متعلق ب: انظر هنا
لقد حصلت على هذا الأمر:
exec("(wget -O http://domain/file.zip && mysql -u user -ppassword database -e \"UPDATE \\`table\\` SET \\`status\\` = 'live' WHERE \\`id\\` = '1234'\") & echo \$!");
يعمل الأمر أعلاه بشكل جيد، ومع ذلك ينتظر PHP الفيديو لإنهاء التنزيل قبل الدخول إلى التنزيل التالي. ومع ذلك، يرسل السطر التالي التنزيل إلى الخلفية، وهو ما أحاول تحقيقه من السطر السابق.
exec("wget -O http://domain/file.zip &>/dev/null & echo \$!");
كيف أذهب حول تغيير السطر الأول أعلاه لإرسال التنزيل إلى الخلفية؟
المحلول
عليك أن تجعلك تستخدم ولترسل العملية إلى الخلفية وإعادة توجيه جميع الإخراج. لذلك تحتاج إلى إضافة
> /dev/null 2>&1 &
في نهاية الأمر الخاص بك. لذلك يجب أن ينتهي بك الأمر مع شيء مثل هذا:
exec("(wget -O http://domain/file.zip && mysql -u user -ppassword database -e \"UPDATE \\`table\\` SET \\`status\\` = 'live' WHERE \\`id\\` = '1234'\") echo \$! > /dev/null 2>&1 &");
يحرر
لجعل الشيء أبسط، يمكنك أيضا نقل WGET والتحديث إلى ملف PHP آخر ستدعوه باستخدام Exec. لذلك سوف ينتهي بك الأمر فقط
exec("php NewFile.php > /dev/null 2>&1 &");
لا تنتمي إلى StackOverflow