Я использую PHPExcel для создания файлов excel с использованием php. Сначала рассмотрим ниже код, проблема с этим кодом: после сохранения некоторого количества данных в excel он остается в процессе, но ничего не сохраняет. Я думаю, что сценарий сохраняет любые данные для улавливания и временных значений, и это заставляет сценарий получать все больше и больше нагрузки после каждой итерации. Пояснение:php Script занимает больше времени после каждой итерации
Прежде всего, этот код извлекает некоторые целочисленные значения из одного файла excel по одному, а именно. sample.xls (эти файлы содержат значения только в столбце A.). предположим, что он получил первое значение из ячейки A1 1212, тогда код устанавливает $ target = 1212, после того как функции curl извлекают данные для 1212 и сохраняют как html в папке с результатами как 1212.html. После того, как библиотека dom начинает свою работу. файл 1212.html содержит таблицу с тремя столбцами и так много строк. поэтому dom захватывает данные для td и tr и сохраняет соответствующие значения в ячейке excel и, наконец, сохраняет данные в папку excelresult как 1212.xlsx, и снова тот же самый процесс, выполненный для ячейки A2 в sample.xls, извлекает некоторые значения, такие как 1213, и начинает захватывать и так далее.
Проблема:
Вот это занимает мало времени для первого значения, как 1212, то занимает немного больше времени для второго значения 1213 и немного больше, и после четырех или пяти значений она занимает так много времени (много минут) времени для выполнения, пожалуйста, помогите мне уменьшить это время и ускорить этот процесс. Благодарю.
код:
<?php
......
ini_set('include_path', ini_get('include_path').';../Classes/');
include_once 'PHPExcel.php';
include_once 'Excel2007.php';
$objPHPExcel = new PHPExcel();
$objPHPExcel->getProperties()->....//set some properties//
$excel->read('sample.xls'); // added excel reader from which we need to take some values
$x=1;
while($x<=$excel->sheets[0]['numRows']) { // reading row by row
$y=1;
while($y<=$excel->sheets[0]['numCols']) {// reading column by column
$cell = isset($excel->sheets[0]['cells'][$x][$y]) ? $excel->sheets[0]['cells'][$x][$y] : '';
$target = $cell;
// $objWorksheet = $objPHPExcel->getActiveSheet();
// $highestRow = $objWorksheet->getHighestRow();
// for($row=1; $row < $highestRow; ++$row){
// $objPHPExcel->getActiveSheet()->removeRow($row,$row);
// }
/* some lines of code using curl to fetch data for $target value
........... */
//below is the code which retrives data from html table and saves into excel file.
$url='results/'.$target.'.html';
include_once('dom.php');
$html=file_get_html($url);
$record_find='first';
foreach($html->find('table#GridView1') as $e){
if($record_find=='first')
$i=1;
$j=0;
foreach($e->find('tr') as $e1){
$distno=trim($e1->find('td', 0)->innertext);
$acno=trim($e1->find('td', 1)->innertext);
$partno=trim($e1->find('td', 2)->innertext);
$objPHPExcel->setActiveSheetIndex(0);
$objPHPExcel->getActiveSheet()->SetCellValue('A'.$j, $distno);
$objPHPExcel->getActiveSheet()->SetCellValue('B'.$j, $acno);
$objPHPExcel->getActiveSheet()->SetCellValue('C'.$j, $partno);
$j++;
}
}
$objPHPExcel->getActiveSheet()->setTitle($target);
$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
$objWriter->save('excelresult/'.$target.'.xlsx');
$y++;
}
$x++;
}
?>
Curl:
$debug = 1;
$url = "url";
$f = fopen('log.txt', 'w');
$cookies = 'cookies.txt';
touch($cookies);
$useragent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/36.0.1985.125 Chrome/36.0.1985.125 Safari/537.36';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookies);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
$html = curl_exec($ch);
curl_close($ch);
preg_match('~<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="(.*?)" />~', $html, $viewstate);
preg_match('~<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="(.*?)" />~', $html, $eventValidation);
$viewstate = $viewstate[1];
$eventValidation = $eventValidation[1];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
//curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookies);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookies);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_STDERR, $f);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 985000);
curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
// Collecting all POST fields
$postfields = array();
$postfields['__EVENTTARGET'] = "";
$postfields['__EVENTARGUMENT'] = "";
$postfields['__LASTFOCUS'] = "";
$postfields['__VIEWSTATE'] = $viewstate;
$postfields['__EVENTVALIDATION'] = $eventValidation;
$postfields['cns_fer'] = 2;
$postfields['xttPd'] = $target;
$postfields['tsfDes'] = "Search";
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
$ret = curl_exec($ch);
curl_close($ch);
file_put_contents('results/'.$target.'.html', $ret);
Спасибо за ваш ответ, я попытался выше, а также очень быстро, но вот последние данные также входит в новый файл , Например, первая итерация берет некоторые данные и сохраняет их до одного excel, после чего на следующей итерации он принимает новые данные, а также прошлые данные и сохраняет следующий файл excel. Пожалуйста, помогите мне. – RadhaComEng
Ну что ж, вместо того, чтобы использовать один и тот же объект PHPExcel для каждой сохраненной книги, а это значит, что вам нужно стереть его, когда вы устанавливаете новые данные перед каждым запросом на завивки, почему бы не создать новый объект PHPExcel для каждого запроса на завивание? –
ОК, позвольте мне попробовать. – RadhaComEng