Я пытаюсь использовать PHP Simple HTML Dom Parser для анализа некоторой информации из результатов SQL-запроса. Но похоже, что с ним ОГРОМНАЯ проблема с памятью. Я создаю html-таблицу, используя результаты SQL-запроса, а затем экспортирую html-таблицу в файл csv. Я действительно новичок в этом, поэтому мой код не самый эффективный. Когда результаты моего запроса малы, файл csv создается успешно. Но когда результаты запроса велики, экспортированный CSV-файл не имеет результатов sql и вместо этого показывает следующее:
Неустранимая ошибка: вызов функции-члена find() для логического значения в /opt/lampp/htdocs/test.php в строке 101
Это моя функция, которая принимает результат sqlresult и создает таблицу html, а затем экспортирует ее в файл csv:
echo sql_to_html_table($sqlresult, $delim="\n" );
function sql_to_html_table($sqlresult, $delim="\n") {
// starting table
include_once('simple_html_dom.php');
$htmltable = "<table>" . $delim ;
$counter = 0 ;
// putting in lines
//while( $row = $sqlresult->mysqli_fetch_assoc() ){
while($row = mysqli_fetch_assoc($sqlresult)) {
if ( $counter===0 ) {
// table header
$htmltable .= "<tr>" . $delim;
foreach ($row as $key => $value ) {
$htmltable .= "<th>" . $key . "</th>" . $delim ;
}
$htmltable .= "</tr>" . $delim ;
$counter = 22;
}
// table body
$htmltable .= "<tr>" . $delim ;
foreach ($row as $key => $value ) {
$htmltable .= "<td>" . $value . "</td>" . $delim ;
}
$htmltable .= "</tr>" . $delim ;
}
// closing table
$htmltable .= "</table>" . $delim ;
// return
//return( $htmltable ) ;
$html = str_get_html($htmltable);
header('Content-type: application/ms-excel');
header('Content-Disposition: attachment; filename=sample.csv');
$fp = fopen("php://output", "w");
foreach($html->find('tr') as $element)
{
$td = array();
foreach( $element->find('th') as $row)
{
$td [] = $row->plaintext;
}
fputcsv($fp, $td);
$td = array();
foreach( $element->find('td') as $row)
{
$td [] = $row->plaintext;
}
fputcsv($fp, $td);
}
fclose($fp);
}
Я попытался создать исключение после $html = str_get_html($htmltable); как это:
if (!str_get_html($htmltable)) {
throw new exception('exception') ;
}
и когда я пытаюсь запустить код, мой браузер выдает мне эту ошибку:
Неустранимая ошибка: необработанное исключение «Исключение» с сообщением «исключение» в /opt/lampp/htdocs/test.php:96 Трассировка стека: #0 /opt/lampp/htdocs/test.php(62): sql_to_html_table(Object(mysqli_result ), '\n') #1 {main} добавлено в /opt/lampp/htdocs/test.php в строке 96
str_get_html
. Мой совет: переключиться на это, а также провести рефакторинг кода, убрать включение из функции, потому что это просто странно, и я убираю вещи, чтобы сделать их более читабельными. - person pguardiario   schedule 26.06.2015