PHP'den bir Excel dosyasına veri eklemeye çalışırken biraz sorun yaşıyorum. PHPExcel kullanıyorum ve kod aşağıda.PHP Excel dosyasına ekle
Sorun şu ki: Dosyalar yeterince küçük olduğunda harika çalışıyordu. Ama sonra dosyalar daha büyük olmaya başladı ve İzin verilen bellek boyutu bitkin hatası almaya başladı. Bu yüzden, dosyayı her zaman sıfırdan yazmak yerine, sadece yeni verileri alıp dosyaya ekleyeceğim. Ama bir sebepten dolayı dosyaya yazmıyor.
Herkesin bir fikri var mı?
function get_subscriptions($process, $filename){
/** Error reporting */
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
date_default_timezone_set('Europe/London');
//define('EOL',(PHP_SAPI == 'cli') ? PHP_EOL : '<br />');
/** Include PHPExcel */
require_once dirname(__FILE__) . '/PHPExcel.php';
require_once dirname(__FILE__) . '/PHPExcel/IOFactory.php';
// Create new PHPExcel object
//$objPHPExcel = new PHPExcel();
$objPHPExcel = PHPExcel_IOFactory::load(dirname(__FILE__) . "/".$filename);
$objPHPExcel->setActiveSheetIndex(0);
$objSheet = $objPHPExcel->getActiveSheet();
$last_line = $objSheet->getHighestRow()+1;
$last_id = $objSheet->getCellByColumnAndRow(0, $last_line)->getCalculatedValue();
// Set document properties
$objPHPExcel->getProperties()->setCreator("FHGV")
->setLastModifiedBy("FHGV")
->setTitle("Report")
->setSubject("PSS Report")
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A1', 'ID')
->setCellValue('B1', 'Date')
->setCellValue('C1', 'Name')
->setCellValue('D1', 'CPF')
->setCellValue('E1', 'RG')
->setCellValue('F1', 'ZIP')
->setCellValue('G1', 'Address')
->setCellValue('H1', 'No')
->setCellValue('I1', 'Reference')
->setCellValue('J1', 'City')
->setCellValue('K1', 'State')
->setCellValue('L1', 'Other')
->setCellValue('M1', 'Email')
->setCellValue('N1', 'Phone')
->setCellValue('O1', 'Cell Phone')
->setCellValue('P1', 'Birth Date')
->setCellValue('Q1', 'Company')
->setCellValue('R1', 'Position')
global $wpdb;
$array = $wpdb->get_results("SELECT id, date_added as 'date',
(select value from wp_iphorm_form_entry_data dados where element_id = 1 and entry_id = id) as 'name'
...
FROM wp_iphorm_form_entries subscription
WHERE subscription.post_title = \"".$process."\" AND id>".$last_id);
$row = $last_line+1; $col = 0;
foreach($array as $data){
$objSheet->setCellValueByColumnAndRow($col++, $row, $data->id);
$objSheet->setCellValueByColumnAndRow($col++, $row, $data->date);
$objSheet->setCellValueByColumnAndRow($col++, $row, $data->name);
$objSheet->setCellValueByColumnAndRow($col++, $row, $data->cpf);
$objSheet->setCellValueByColumnAndRow($col++, $row, $data->rg);
$objSheet->setCellValueByColumnAndRow($col++, $row, $data->zip);
$objSheet->setCellValueByColumnAndRow($col++, $row, $data->address);
$objSheet->setCellValueByColumnAndRow($col++, $row, $data->no);
$objSheet->setCellValueByColumnAndRow($col++, $row, $data->reference);
$objSheet->setCellValueByColumnAndRow($col++, $row, $data->city);
$objSheet->setCellValueByColumnAndRow($col++, $row, $data->state);
$objSheet->setCellValueByColumnAndRow($col++, $row, $data->others);
$objSheet->setCellValueByColumnAndRow($col++, $row, strip_tags($data->email));
$objSheet->setCellValueByColumnAndRow($col++, $row, $data->phone);
$objSheet->setCellValueByColumnAndRow($col++, $row, $data->cell_phone);
$objSheet->setCellValueByColumnAndRow($col++, $row, $data->birth_date);
$objSheet->setCellValueByColumnAndRow($col++, $row, $data->company);
$objSheet->setCellValueByColumnAndRow($col++, $row, $data->position);
$col=0;$row++;
}
for($col = 'A'; $col !== 'S'; $col++) {
$objPHPExcel->getActiveSheet()
->getColumnDimension($col)
->setAutoSize(true);
}
// Rename worksheet
$objSheet->setTitle('Subscriptions');
// Save Excel 2007 file
$callStartTime = microtime(true);
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
// Renaming the file and saving it
$objWriter->save(str_replace('functions.php', $filename , __FILE__));
$callEndTime = microtime(true);
$callTime = $callEndTime - $callStartTime;
}
Üzerinde çalıştığınız dosyanın bellek ayak izini azaltan belgelenmiş hücre önbelleğe alma yöntemlerinden herhangi birini kullanmayı düşündünüz mü? –
Ben varsayılan olarak orada olduğunu 'cache_to_phpTemp' kullanıyordum sanırım. Bunu değiştirebileceğimi bilmiyordum. 'Cache_to_sqlite' olarak değiştirildi ve şu anda çalışıyor gibi görünüyor. Teşekkürler. Kullanışlı bulduğunuz herkes için şu bağlantıyı bulabilirsiniz: [link] (https://github.com/PHPOffice/PHPExcel/blob/develop/Documentation/markdown/Overview/04-Configuration-Settings.md) –
Varsayılan aslında en hızlı erişim olan cache_in_memory', ama aynı zamanda en büyük bellek ayak izi –