Here's the full code. I have to split it into sections to keep below the board's limit of 10,000 characters. This script needs help. I'm trying to pare down the exsmell code. However, the script is too RAM intensive and too slow, even on my honkin' iMac. I'm taking 74 systems ~20 techs ea 30 days/mo * 400,000 records in the table. This means a whole lot of database calls. I need a way to empty PHP's memory with each iteration. As things stand now, the memory usage increases by a considerable sum every time around.
Here goes:
<?php
session_name("PassTech");
session_start();
set_time_limit (0);
ob_end_clean();
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
set_include_path('/Users/tim/Sites/');
date_default_timezone_set('America/Chicago');
$host="localhost";
$user="root";
$password="g[][][]]9";
$Dbname = "calls_to_dispatch";
$mysqli = new mysqli($host, $user, $password, $Dbname);
// Check connection
if ($mysqli->connect_errno) {
echo "Hey dope! Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}
$LastDate = '05-30-2013'; //$_SESSION['LastDate'];
$TechNumEntry = 0; // $_SESSION['TechNum'];
$SystemNum = 6; // $_SESSION['SystemNum'];
$SystemNumEntry = $SystemNum;
$iRow = 3;
$LastDateArray = explode("-", $LastDate);
$EndMonth = $LastDateArray[0];
$EndDay = $LastDateArray[1];
$EndYear = $LastDateArray[2];
$EndDate = $EndYear . '-' . $EndMonth . '-' . $EndDay;
$WorkDate = '2013-05-30';
echo $WorkDate . ' || ' . $TechNumEntry . '<br>';
$NumMonth = cal_days_in_month(CAL_GREGORIAN, $EndMonth, $EndYear);
$date = date_create($EndDate);
$CommonEndDate = date_format($date, "M d, Y");
$EndMO = date_format($date, 'F, Y');
$FileMonth = date_format($date, 'm-Y');
date_sub($date, date_interval_create_from_date_string($NumMonth - 1 . 'days'));
$StartDate = $EndYear . '-' . $EndMonth . '-01';
$date = date_create($StartDate);
$StartDate = date_format($date, 'Y-m-d');
$CommonStartDate = date_format($date, "M d, Y");
for ($counter=0; $counter < $NumMonth; $counter++)
{
$date = date_create($StartDate);
date_add($date, date_interval_create_from_date_string($counter . 'days'));
$W[$counter] = date_format($date, "D");
$D[$counter] = date_format($date, "n-j");
}
/** Include PHPExcel */
require_once dirname(__FILE__) . '/PHPExcel.php';
// Create new PHPExcel object
echo date('H:i:s') , " Create new PHPExcel object" , EOL;
$objPHPExcel = new PHPExcel();
// Set document properties
echo date('H:i:s') , " Set document properties" , EOL;
$objPHPExcel->getProperties()->setCreator("Timothy Stringer")
->setLastModifiedBy("Mac the Knife")
->setTitle("Office 2007 XLSX Test Document")
->setSubject("Office 2007 XLSX Test Document")
->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
->setKeywords("office 2007 openxml php")
->setCategory("Test result file");
echo date('H:i:s') , " Add some data" , EOL;
//set header
$stmt = $mysqli->prepare("SELECT IdNum FROM TOAWorkOrdersNew WHERE WorkDate = ? AND TechNum = ?");
$stmt2 = $mysqli->prepare("SELECT IdNum FROM CallVolume WHERE WorkDate = ? AND ANI = ?");
$stmt->bind_param('ss', $IncDate, $TechNum);
$stmt2->bind_param('ss', $IncDate, $CellNum);
if ($SystemNumEntry == 0) $Quest = "SELECT * FROM Systems";
else $Quest = "SELECT * FROM Systems WHERE SystemNum = $SystemNum";
$SystemResult = $mysqli->query($Quest) or die('Dipstick can not query');
{
while ($row = $SystemResult->fetch_assoc())
{
$SystemNum = $row["SystemNum"];
$System = $row["System"];
$LongSystem = $row["LongSystem"];
$Contractor = $row["Contractor"];
$EndCol = 'A'. chr($NumMonth+43);
$strRow = 'A' . $iRow . ':' . $EndCol . $iRow;
$fontRow = 'A' . $iRow;
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(0, $iRow, $LongSystem);
$objPHPExcel->getActiveSheet()->mergeCells($strRow);
$objPHPExcel->getActiveSheet()->getStyle($strRow)->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle($strRow)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle($fontRow)->getFont()->setSize(14);
$iRow++;
$strRow = 'A' . $iRow . ':' . $EndCol . $iRow;
$fontRow = 'A' . $iRow;
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(0, $iRow, $EndMO);
$objPHPExcel->getActiveSheet()->mergeCells($strRow);
$objPHPExcel->getActiveSheet()->getStyle($strRow)->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle($strRow)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle($fontRow)->getFont()->setSize(14);
$objPHPExcel->getActiveSheet()->getStyleByColumnAndRow(0, $iRow) ->getBorders()->getLeft()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
$objPHPExcel->getActiveSheet()->getStyleByColumnAndRow(0, $iRow) ->getBorders()->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(0, $iRow+1, 'Tech Number');
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(1, $iRow+1, 'Name');
$iRow++;
$fontRow = 'A' . $iRow;
for ($counter = 0; $counter <$NumMonth; $counter++)
{
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($counter+3, $iRow, $W[$counter]);
$objPHPExcel->getActiveSheet()->getStyleByColumnAndRow($counter, $iRow) ->getBorders()->getLeft()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
$objPHPExcel->getActiveSheet()->getStyleByColumnAndRow($counter, $iRow) ->getBorders()->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($counter+3, $iRow+1, $D[$counter]);
$objPHPExcel->getActiveSheet()->getStyleByColumnAndRow($counter, $iRow+1) ->getBorders()->getLeft()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
$objPHPExcel->getActiveSheet()->getStyleByColumnAndRow($counter, $iRow+1) ->getBorders()->getBottom()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
}