PDA

View Full Version : تدبیر برای برنامه های بدون خروجی !!!



adnan
سه شنبه 18 اسفند 1383, 20:59 عصر
فرض کنید یک فروم داریم که دارای 5000 عضو دارد و ما می خواهیم به همه آنها میل بزنیم .
مسلما یک فرمان است که باید 5000 بار تکرار گردد .

حالت عادی این است تا که تا این 5000 خط اجرا نشود صفحه done نمی شود و ما علامت loading را که به کندی جلو میره در نوار status می بینیم .
حالا اگر مثلا بعد از اجرا شدن 1000 خظ که همچنان داره این حلقه داره ادامه پیدا می کنه بنظرم اگر پنجره را ببندیم این کار متوقف میشه درسته یا نه ؟

چکار کنیم که این برنامه به محض فراخوانی سمت کلاینت پیغام بده انجام شد و سمت سرور به کارش ادامه دهد بدون اینکه کاربر سمت کلاینت متوجه شود که کار تمام شده یا خیر ؟

oxygenws
چهارشنبه 19 اسفند 1383, 02:57 صبح
مسلما یک فرمان است که باید 5000 بار تکرار گردد .
هیچ مسلمی وجود نداره!!!


بنظرم اگر پنجره را ببندیم این کار متوقف میشه درسته یا نه ؟
عموما همین طوریه، ولی می تونه اینطوری نباشه!!


چکار کنیم که این برنامه به محض فراخوانی سمت کلاینت پیغام بده انجام شد و سمت سرور به کارش ادامه دهد بدون اینکه کاربر سمت کلاینت متوجه شود که کار تمام شده یا خیر ؟
با دستور header می تونی فرمان connection close رو به سمت کلاینت بفرستی تا ارتباط کلا قطع بشه و در سمت سرور برنامه PHP کار خودش رو انجام بده....

موفق باشید، امید

javad_hosseiny
چهارشنبه 19 اسفند 1383, 18:04 عصر
میشه لطفا بیشتر توضیح بدهید؟ من توضیحات دستور Header رو خوندم برداشتم این بود که می توان ادامه برنامه را به فایل یا محل دیگری ارجاع داد می تونید بصورت مثالی آن را بیشتر توضیح دهید؟

adnan
چهارشنبه 19 اسفند 1383, 20:27 عصر
هیچ مسلمی وجود نداره!!!

چرا ؟
مگه برای ارسال به 5000 نفر نباید 5000 بار تابع میل اجرا گردد ؟

oxygenws
چهارشنبه 19 اسفند 1383, 23:55 عصر
میشه لطفا بیشتر توضیح بدهید؟ من توضیحات دستور Header رو خوندم برداشتم این بود که می توان ادامه برنامه را به فایل یا محل دیگری ارجاع داد می تونید بصورت مثالی آن را بیشتر توضیح دهید؟
فکر کنم خوندن ----درست---- این مطلب کمکت کنه!!! کجای این لینک نوشته که کار تابع هدر اینی است که شما می گی؟؟؟
http://www.php.net/manual/en/function.header.php

در اولین خط این لینک می نویسته که:

header() is used to send raw HTTP headers. See the HTTP/1.1 specification for more information on HTTP headers.
و لینکی به سایت زیر می ده:
http://www.faqs.org/rfcs/rfc2616
شما --هیچ-- اطلاعاتی در مورد HTTP ندارید، بد نیست در این مورد بیشتر مطالعه کنید.


چرا ؟
مگه برای ارسال به 5000 نفر نباید 5000 بار تابع میل اجرا گردد ؟
همیشه ساده ترین راه و اولین راهی که به فکرت می رسه، بهترین و بهینه ترین راه نیست :wink:
تابع mail چطور کار می کنه؟؟ اتصالی به سرور تحت یک قرارداد خاص......
شاید بد نباشه این اتصال رو خودت توسط سوکت انجام بدی :)

موفق باشید، امید

oxygenws
پنج شنبه 20 اسفند 1383, 00:13 صبح
با دستور header می تونی فرمان connection close رو به سمت کلاینت بفرستی تا ارتباط کلا قطع بشه و در سمت سرور برنامه PHP کار خودش رو انجام بده....
ادنان عزیز، در مورد صحبت بالا می تونی مطلب زیر رو بخونی، کمکت می کنه.


HTTP/1.1 defines the "close" connection option for the sender to
signal that the connection will be closed after completion of the
response. For example,

Connection: close

in either the request or the response header fields indicates that
the connection SHOULD NOT be considered `persistent'
after the current request/response is complete.

adnan
یک شنبه 23 اسفند 1383, 09:14 صبح
ممنون !

اگر نکته ای بود که نفهمیدم سوال می کنم ! :oops:

oxygenws
یک شنبه 23 اسفند 1383, 09:19 صبح
ok, im here to share :موفق:

adnan
دوشنبه 24 اسفند 1383, 08:37 صبح
the sender to
signal that the connection will be closed after completion of the
response

من از این جمله این را فهمیدم که می گه زمانی که تمام خط برنامه را اجرا کرد ارتباط قطع می گردد !!! همون حالت عادی که الان بکار میره :mad: درسته ؟

نظرت در مورد این کد چیه ؟ چطور اجرا میشه ؟


<?php
header("Connection: close");
for($i=0;$i<7000000;$i++);
?>

oxygenws
دوشنبه 24 اسفند 1383, 12:04 عصر
این کد به ظاهر می تونه دقیقا جواب شما باشه، اما ممکنه در شرایطی نباشه!!!!

توجه کن که هم خود PHP و شاید هم خود سرور (و البته هم خود مرورگر) داده ها رو قبل از ارسال cache می کنند تا مثلا به 128 بایت برسه!!!! و بعد ارسال می کنند. البته در PHP دستورات flush (همون کلمه ای که flush tank ازش میاد) داریم که در این مورد مستقیما به شما کمک می کنند :)

oxygenws
دوشنبه 24 اسفند 1383, 12:08 عصر
من از این جمله این را فهمیدم که می گه زمانی که تمام خط برنامه را اجرا کرد ارتباط قطع می گردد !!! همون حالت عادی که الان بکار میره خیلی عصبانی درسته ؟
اینو یادم رفت بگم.....
بعد از اتمام """"برنامه"""" خود وب سرور زحمت این کار رو می کشه.

adnan
سه شنبه 25 اسفند 1383, 08:51 صبح
این کد به ظاهر می تونه دقیقا جواب شما باشه، اما ممکنه در شرایطی نباشه!!!!

آخه امید جان ! اون کدی که من در بالا نوشتم زمان اجرایش سمت کلاینت هیچ فرقی با بدون نوشتن هدر نمی کرد ! :گیج:
یعنی سمتا کلاینت هم تا کار حلقه تمام نشه ارتباط قطع نمیشه !!!

oxygenws
سه شنبه 25 اسفند 1383, 10:50 صبح
من که به شما گفتم..... صحبت من رو درست نخوندی..... من گفتم در شرایطی می تونه نباشه.... که این مثال شما هم جزو همون شرایطه :)

گفتم که خروجی رو باید flush کنی.