PDA

View Full Version : سوال: چجوری بعد از فرستادن نیمی از خروجی یه کانکشن رو از سمت سرور ببندیم



se8820726
دوشنبه 20 آبان 1392, 14:37 عصر
سلام به تمام دوستان

نمونه کد زیر رو داریم:


<?php
set_time_limit(0);
ignore_user_abort(true);

{

//part1

}

//connection must end here

{

//part 2

}
?>

حالا میخوام بعد اینکه یه کانکشن از سمت کلاینت به صورت ajax زده شد و خروجی part1 براش ارسال شد کانکشن بسته بشه ولی فایل php ما قطع نشه و کدهای قسمت part2 به کارش ادامه بده.

در حالت عادی یا باید خود کلاینت کانکشن رو ببنده یا باید فایل php تمام کدهاش اجرا بشه و به انتها برسه تا کانکشن بسته شه اما من میخوام وسط کار کانکشن رو ببندم ولی فایل php بسته نشه و ادامه کدهاش اجرا بشه.

اما چگونه ؟؟

smksmk
سه شنبه 21 آبان 1392, 10:40 صبح
اطلاعات از دیتابیس خونده میشه برای دانلود ؟؟

eshpilen
سه شنبه 21 آبان 1392, 13:36 عصر
هووم سوال جالبیه :متفکر:
راه استانداری بنظرم نمیاد.
اگر راه اصولی تری نداشته باشه، استفاده از هدر location و ریدایرکت کردن کلاینت رو میتونی تست کنی.
چون بنظرم با ریدایرکت کردن کلاینت، طبیعتا اول کانکشن جاری قطع میشه، بعد کلاینت میره تا آدرس جدید رو باز کنه.
یعنی با این شاید به نتیجه ای که میخوای برسی.
دقیقا شما میخوای ارتباط با کلاینت قطع بشه بخاطر چی؟ بخاطر اینکه خروجی ها ارسال و نمایش داده بشه؟ اگر مسئله خروجی باشه راه داره خب. ولی اگر مسئله چیز دیگس اونوقت باید دید.

eshpilen
سه شنبه 21 آبان 1392, 13:37 عصر
درمورد پاره ای از مسائل، راه زیاد میشه درنظر گرفت. هرکدوم هم یه خواصی داره.
ولی روش باید تا حد ممکن استاندارد و اصولی باشه.
بخاطر همین اول باید صورت مسئله دقیق و واضح بشه.
و علتش.
در مرحلهء بعدش به جزییات برنامه و الگوریتم بستگی داره.

MMSHFE
سه شنبه 21 آبان 1392, 15:30 عصر
یک راهش اینه که کدهای Part2 رو توی یک فایل جداگانه بگذارین و وقتی کارتون با Part1 تمام شد، با دستور shell_exec و فراخوانی مفسر PHP، فایل دوم رو در پس زمینه فراخوانی و اجرا کنید. اینطوری اسکریپت اول منتظر نمیمونه که اسکریپت دوم کارش تمام بشه و اتصال کلاینت بسته میشه.

se8820726
جمعه 08 آذر 1392, 05:17 صبح
سلام به دوستان عزیز
آقا من راهشو پیدا کردم



function response($output) {
@ob_end_clean();
ob_start();

echo ($output);

$length = ob_get_length();
header("Content-Encoding: none");
header("Content-Length: $length");
header("Connection: close");

@ob_end_flush();
@ob_flush();
flush();

if (session_id()) session_write_close();
}


در ضمن اطلاعات نباید به صورت gzip به کلاینت فرستاده بشه یعنی:


Content-Encoding = none