PDA

View Full Version : سوال : نحوه ایجاد timeOut() برای یک بلاک {}



abtahi16
چهارشنبه 14 اسفند 1392, 23:16 عصر
با سلام و عرض ادب!
دوستان، بنده می خواستم بدونم آیا میتونم به یک بلاک timeout برای زمان اجراش بدم.
مثال:
<?php
function ftest(){
/* my codes */
}
?>

میخوام برای اجرای تابع فرضی ftest یک timeout بزارم تا مثلا اگر بیشتر از 10 ثانیه طول کشید، از تابع بیاد بیرون.

maysam.m
پنج شنبه 15 اسفند 1392, 15:22 عصر
میشه با تابع sleep تاخیر انداخت

دلیل این خواسته تون رو میشه توضیح بدید؟

MMSHFE
پنج شنبه 15 اسفند 1392, 16:27 عصر
برای اینجور کارها بهتره از Thread استفاده کنید. توی php.net دنبال PThread جستجو کنید.

abtahi16
پنج شنبه 15 اسفند 1392, 23:16 عصر
با تشکر از دوستان بابت پاسخ ها!
maysam.m (http://barnamenevis.org/member.php?145429-maysam-m) جان من مثلا میخوام یه سری دستور که فقط تو یک بلاک خاص هستند بیشتر از 5 ثانیه طول نکشن، که توی صفحه گیر بوجود نیاره. یعنی یه چیزی شبیه max_timeOut اما واسه یه بلاک خاص!
MMSHFE (http://barnamenevis.org/member.php?55504-MMSHFE) جان، میشه با مثال یکم سرنخ بدی؟

aliphp1
پنج شنبه 15 اسفند 1392, 23:25 عصر
می تونید قبل از شروع بلاک زمان رو بگیرید و توی بلاک چک کنید که زمان جاری از زمانی که قبلا در متغییری ذخیره شده اختلافشان 5 ثانیه شده یا نه
البته اگر من منظور شما رو درست گرفته باشم !

abtahi16
پنج شنبه 15 اسفند 1392, 23:37 عصر
aliphp1 (http://barnamenevis.org/member.php?233727-aliphp1) جان ممنون از راهنماییتون، اما این جواب نیست آقا، چون ممکنه به دستور چک کردن تایم نرسیده ، تایم تمام بشه. من میخوام یکی از بیرون کنترل کنه آقا.

MMSHFE
پنج شنبه 15 اسفند 1392, 23:45 عصر
ببینید، اگه میخواین دقیقاً سر زمان مشخص از حلقه یا هر جایی از کد که هست، بیاد بیرون، یا باید از برنامه نویسی Multi-Thread استفاده کنید و توسط برنامه اصلی، یک Thread جدید ایجاد کنید و پردازش موردنظر رو توی اون اجرا کنید و سر زمان مشخص هم Thread رو از بیرون ببندین و یا اینکه کد موردنظرتون رو توی یک فایل جداگانه بگذارین و با cURL اجراش کنید و پارامترها رو هم براش بفرستین و Timeout مربوط به cURL رو روی زمان موردنظرتون تنظیم کنید.

aliphp1
پنج شنبه 15 اسفند 1392, 23:47 عصر
aliphp1 (http://barnamenevis.org/member.php?233727-aliphp1) جان ممنون از راهنماییتون، اما این جواب نیست آقا، چون ممکنه به دستور چک کردن تایم نرسیده ، تایم تمام بشه. من میخوام یکی از بیرون کنترل کنه آقا.

یعنی حتی یکبار هم اجرا نمی خواین بشه ؟
من فکر کردم می خواین یه دستور رو توی لوپ بذارید و تا وقتی که می خواین تکرار بشه
چون من همچین چیزی استفاده کرده بودم برای دریافت جواب از یک وبسرویس فکرم رفت به این سمت
اگه امکانش هست بگید این چه کاربردی داره

abtahi16
پنج شنبه 15 اسفند 1392, 23:54 عصر
MMSHFE (http://barnamenevis.org/member.php?55504-MMSHFE) جان، میشه با مثال ساده بگی؟ من یه تابع ساده نوشتم که بشه راحت روش مثال زد. این چیزهایی که شما میگی (غیر از curl) فکر کنم مربوط به کرنل باشه که فکر نمیکنم سروری بخاطر امنیت اجازه بده من این کار رو انجام بدم.ممنون میشم مثال ساده و تست شده بزنی آقا.



aliphp1 (http://barnamenevis.org/member.php?233727-aliphp1) جان، مثلا میخوای به یه وب سرویس وصل بشی، اما گیر میکنه و پاسخی نمیده.

MMSHFE
جمعه 16 اسفند 1392, 00:05 صبح
ببینید، اگه با برنامه نویسی Multi-Thread کار نکردین، توصیه میکنم قبلش مستندات کلاس PThread رو توی php.net بخونید. خودش به اندازه کافی مثال گذاشته و یکی از کلاسهای PHP هست و تنظیمات خاص و پیچیده ای روی سرور نیاز نداره که نخوان اجازه بدن ولی بهرحال روش cURL که دیگه خیلی ساده است و مثال نمیخواد. شما کدتون رو توی یک فایل جدا بگذارین و با cURL صداش بزنید و پارامترهای لازم رو هم با Get یا Post (توسط همون cURL) براش بفرستین. Timeout مربوط به cURL رو هم روی زمان موردنظرتون تنظیم کنید. اینطوری اگه تا زمان مشخص شده جوابی از اسکریپت دریافت نشه، cURL بیخیال میشه و بقیه اسکریپت شما میتونه کار خودش رو انجام بده.

aliphp1
جمعه 16 اسفند 1392, 00:35 صبح
MMSHFE (http://barnamenevis.org/member.php?55504-MMSHFE) جان، میشه با مثال ساده بگی؟ من یه تابع ساده نوشتم که بشه راحت روش مثال زد. این چیزهایی که شما میگی (غیر از curl) فکر کنم مربوط به کرنل باشه که فکر نمیکنم سروری بخاطر امنیت اجازه بده من این کار رو انجام بدم.ممنون میشم مثال ساده و تست شده بزنی آقا.



aliphp1 (http://barnamenevis.org/member.php?233727-aliphp1) جان، مثلا میخوای به یه وب سرویس وصل بشی، اما گیر میکنه و پاسخی نمیده.

پس شما می خواین که اگه مثلا تا 5 ثانیه از وبسرویس جواب نگرفت از اون رد بشه ؟