PDA

View Full Version : برای لود کلی اطلاعات خطای زیر میده



omid_student
پنج شنبه 26 دی 1392, 13:59 عصر
سلام
تقریبا 67000 هزارتا رکورد دارم که موقعیت های جی پی اس کاربر توش ذخیره شد
میخوام اینا رو توی صفحه ای نشون بدم
روشی که من استفاده کرده ام اینه که مثلا دستور خطکشی روی نقشه اومدم چیکار کردم کد زیر رو ببینید


polyline:{
options:{
strokeColor: "#FF0000",
strokeOpacity: 1.0,
strokeWeight: 2,
path:[
<?php
if(isset($rows))
foreach($rows as $row)
{
echo '['.$row['sLatitude'] . ',' . $row['sLongitude'] . '],';
}
?>
]
}
}
});
کد بالا میاد کل اطلاعات جی پی اس رو میگره و خط کشی میکنه ولی جدیدا خطای زیر میده حالا نمیدونم به خطار حجم انبوه اطلاعاته یا تکرار کلی مسیر در صفحه
خطای زیر
PHP Fatal error: Allowed memory size of 100663296 bytes exhausted (tried to allocate 72 bytes) in
دستور set_time_limit هم فعال نیست
به نظرتون ایا راه حل من اشتباه چطور میشه این خطا رو حل کرد و یا روش بالا رو عوض کرد
ممنون

MMSHFE
پنج شنبه 26 دی 1392, 15:04 عصر
چند راه دارین:
1- افزایش حافظه در دسترس اسکریپتها در php.ini
2- عدم استفاده از Output Buffer و flush کردن مرتب خروجی و حذف متغیرهای غیر ضروری
3- fetch کردن دیتابیس کمتر (مثلاً فقط ID رکوردها) و fetchکردن رکورد کامل یا فیلدهای sLatitude و sLongitude که لازم دارین با داشتن ID رکورد در داخل حلقه

روش سوم کمی ممکنه سرعت رو کم کنه چون دوبار fetch دارین ولی قطعاً جواب میده چون تمام اطلاعات 67000 رکورد رو fetch نمیکنه و توی حافظه نگه نمیداره بلکه فقط IDها توی حافظه است و هربار حلقه اجرا میشه، رکورد مربوطه fetch میشه، اطلاعاتش echo میشه و نهایتاً با mysql_free_result هم میتونید حافظه رو آزاد کنید.

omid_student
پنج شنبه 26 دی 1392, 17:20 عصر
چند راه دارین:
1- افزایش حافظه در دسترس اسکریپتها در php.ini
2- عدم استفاده از Output Buffer و flush کردن مرتب خروجی و حذف متغیرهای غیر ضروری
3- fetch کردن دیتابیس کمتر (مثلاً فقط ID رکوردها) و fetchکردن رکورد کامل یا فیلدهای sLatitude و sLongitude که لازم دارین با داشتن ID رکورد در داخل حلقه

روش سوم کمی ممکنه سرعت رو کم کنه چون دوبار fetch دارین ولی قطعاً جواب میده چون تمام اطلاعات 67000 رکورد رو fetch نمیکنه و توی حافظه نگه نمیداره بلکه فقط IDها توی حافظه است و هربار حلقه اجرا میشه، رکورد مربوطه fetch میشه، اطلاعاتش echo میشه و نهایتاً با mysql_free_result هم میتونید حافظه رو آزاد کنید.

ممنون فقط چطور حافظه رو افزایش بدم رو سرور که php.ini نیست ایا باید با مرکز تماس بگیرم
یه سوال هم داشتم
ایا روشی که برای چاپ مسیر خطکشی نوشتم صحیح هست

MMSHFE
پنج شنبه 26 دی 1392, 23:05 عصر
باید به پشتیبانی سرور اطلاع بدین.