سلام دوستان
در یک کد php نیاز دارم که با رفرش خودکار صفحه، اطلاعات یک آدرس json مرتبا گرفته شده و اطلاعات آن استخراج شود منتهی مشکلی که جدیدا با آن روبرو شده ام این هست که در برخی مواقع که جدیدا خیلی زیاد شده، این استخراج اطلاعات خیلی طول می کشد و بعضا با خطای timeout روبرو می شوم.
نهایتا کدها را آنقدر مختصر کردم تا فقط json مربوطه گرفته شود و هیچ کاری هم انجام ندهد منتهی باز هم آن مشکل پا برجا هست.
روی چند سرور و نسخه های مختلف php هم تست کردم ولی باز هم مشکل پابرجاست.
کد مختصر شده رو میذارم اگه ممکنه دوستان راهنمایی کنند.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="refresh" content="5" />
<meta http-equiv='Content-Language' content='fa' />
<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />
<title>Untitled 1</title>
</head>
<body>
<?php
$link = 'آدرس json api';
$ch = curl_init($link);
curl_setopt($ch, CURLOPT_URL, $link);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch);
$json = json_decode($result);
?>
</body>
</html>
برای دریافت اطلاعات در هر وضعیتی از یک سرویس خارجی باید به چندتا نکته توجه داشت:
۱) سرویس خارجی ای که قصد دارید از آن اطلاعات را استخراج کنید باید در دسترس باشد.
۲) زمان پردازش اطلاعات در سرویس خارجی باید کوتاه باشد و اگر پردازش آن طولانی مدت است باید زمان Timeout را در پروژه PHP خود افزایش دهید که برای اینکار می توانید تکه کد زیر را به کدهای خود اضافه کنید:
<?php
$ch = curl_init('http://127.0.0.1/api');
curl_setopt($ch, CURLOPT_TIMEOUT, 2000);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2000);
$response = curl_exec($ch);
if ($response === false) {
$info = curl_getinfo($ch);
if ($info['http_code'] === 0) {
// timeout
}
}
دو متغییر CURLOPT_TIMEOUT
و CURLOPT_CONNECTTIMEOUT
برای افزایش زمان پردازش و دریافت اطلاعات از آدرس API مورد استفاده قرار می گیرند.
به جمع هزاران کاربر اینستاگرامی روکسو بپیوندید.