PDA

View Full Version : PHPExcel - Memory Error



arenaw
دوشنبه 18 خرداد 1394, 12:03 عصر
سلام.

در حال کار روی یک برنامه گزارش گیری از دیتابیس با قابلیت خروجی فایل اکسل با پلاگین PHPExcel هستم. مموری در دسترس من برای تولید این برنامه، نامشخص هستش.

وقتی تعداد رکوردها زیاد میشه، جدا از بحث طولانی شدن زمان تولید فایل اکسل و مشکل Timeout که تو تنظیمات PHP قابل تنظیم هستش، بحث مموری پیش میاد. وقتی داخل حلقه، فایل اکسل در حال تولید هستش، تمام رکوردهای اضافه شده تا زمانی که متود save رو اجرا نکنم، توی مموری نگه داشته میشن. خب با توجه به این که این یک برنامه عمومی هستش (یعنی شاید مموری در دسترس من با توجه به سرور مشتری 200MB یا حتی 10GB بشه)، اگر تعداد رکوردها، بیشتر از مموری آزاد بشه، PHP خطای مموری تولید میکنه.

من نمیخوام مموری آزاد رو اندازه گیری کنم و قبل از انجام کار، ببینم این کار قابل انجام هستش یا خیر، کاری که قصد انجامش رو دارم، اینه که رکوردها مستقیم روی فایل ذخیره بشن در هر مرحله و جدا از بحث کند شدن انجام کار، مشکل مموری نداشته باشم.

ممنون میشم دوستان راهنمایی کنن که اصلا این کار منطقی هستش یا خیر، و اگر نیست، چه راهی منطقی هستش با امکانات فعلی.



$result = $db->query($query);
$objPHPExcel = new PHPExcel();
$i = 1;
$objPHPExcel->setActiveSheetIndex(0)->setCellValue("A$i", 'Field #1')->setCellValue("B$i", 'Field #2');
while( $row = mysql_fetch_array($result,MYSQL_ASSOC) ){
$i++;
$objPHPExcel->setActiveSheetIndex(0)->setCellValue("A$i", $row['f1'] )->setCellValue("B$i", $row['f2'] );
}
// set headers...
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');