AsviS
@AsviS
начинающий

Почему происходит ошибка 500 Internal Server Error? Как исправить?

у меня есть база данных больше 2000 записей и будет пополнятся!
на странице я вывожу таблицу, 10 записей на странице + пагинация все ок.
Я сделал кнопку(файл) для экспорта!
вот код того файла pastebin:
https://pastebin.com/FgQv3nZT
и тут:
spoiler
<?php
ini_set("max_execution_time", "3600"); // ожидаем

// // Игнорирует отключение пользователя и позволяет скрипту
// // быть запущенным постоянно
// ignore_user_abort(true);
// ini_set('error_reporting', E_ALL);
// ini_set('display_errors', 1);
// ini_set('display_startup_errors', 1);
//require "auth.php";
//Инклюдим файл подключения с базой данных
include_once($_SERVER["DOCUMENT_ROOT"].'/db.php');


  $getsort = $_GET['sort'];
if ($getsort === 'desc'){
  $sort = 'desc';
}else{
  $sort = 'asc';
}
  $getkey = $_GET['key'];

if (!empty($getkey)) {
  $key = $getkey;
}else{
  $key = 'id';
}

$q=$db->query('SELECT * FROM `news` WHERE `show_in_feed`=1 ORDER BY `'.$key.'` '.$sort.' ');

require('classes/PHPExcel.php');
// Подключаем класс для вывода данных в формате excel
require_once('classes/PHPExcel/Writer/Excel5.php');

// Создаем объект класса PHPExcel
$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_phpTemp;
$cacheSettings = array( 'memoryCacheSize ' => '256MB');
PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings); 

    $pExcel = new PHPExcel();
    $pExcel->setActiveSheetIndex(0);
    $aSheet = $pExcel->getActiveSheet();
    $aSheet->setTitle('List');
        //добавление данных
        $aSheet->setCellValue("A1", "Added Date");
        $aSheet->setCellValue("B1", "Title");
        $aSheet->setCellValue("C1", "Threat Type");
        $aSheet->setCellValue("D1", "Domain");
        $aSheet->setCellValue("E1", "URL");
 


$rowCount = 2;

while($n=$q->fetch_assoc()){

$type_ed = explode(",", $n['threat_type']);
$type_edit = '';
foreach ($type_ed as $type_edd)
{
        $ttt = $db->query("SELECT * FROM `type` WHERE `id`='".$type_edd."'")->fetch_assoc();
        $name_type = $ttt['type'];
        $type_edit.= "$name_type,";
        
}
$threat_type = substr($type_edit, 0, -1);

        $aSheet->setCellValue("A".$rowCount, $n["added_date"]);
        $aSheet->setCellValue("B".$rowCount, $n["title"]);
        $aSheet->setCellValue("C".$rowCount, $threat_type);
        $aSheet->setCellValue("D".$rowCount, $n["domain"]);
        $aSheet->setCellValue("E".$rowCount, $n["full_url"]);


  $rowCount++;

}
        //форматирование
        $style_wrap = array( 'font' => array( 'bold' => true ) );
        $aSheet->getStyle('A1:V1')->applyFromArray($style_wrap);
        //отдаем пользователю в браузер
    // include("classes/PHPExcel/Writer/Excel2007.php");
    // $objWriter = new PHPExcel_Writer_Excel2007($pExcel);
     $objWriter = new PHPExcel_Writer_Excel5($pExcel);
    ob_clean();

    // header('Cache-Control: max-age=0');
 header ( "Expires: Mon, 1 Apr 1974 05:00:00 GMT" );
 header ( "Last-Modified: " . gmdate("D,d M YH:i:s") . " GMT" );
 header ( "Cache-Control: no-cache, must-revalidate" );
 header ( "Pragma: no-cache" );
 header ( "Content-type: application/vnd.ms-excel" );
 header ( "Content-Disposition: attachment; filename=List.xls" );
    $objWriter->save('php://output');

?>


Когда кликаю по кнопке экспорт то скрипт думает и выдает ошибку 500 Internal Server Error
Помогите пожалуйста что я не так делаю?!
P.S.: Если ставлю на экспорт только 10-50 записей то все ок, сохраняет файл xls
Update:
убрал я значит код:
type_ed = explode(",", $n['threat_type']);
$type_edit = '';
foreach ($type_ed as $type_edd)
{
        $ttt = $db->query("SELECT * FROM `type` WHERE `id`='".$type_edd."'")->fetch_assoc();
        $name_type = $ttt['type'];
        $type_edit.= "$name_type,";
       
}

ошибка пропала и все экспортировалось, теперь вопрос как мне получить тогда имена с таблицы type при экспорте??
  • Вопрос задан
  • 2161 просмотр
Пригласить эксперта
Ответы на вопрос 2
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
1) Есть лог, куда пишутся все ошибки, ЕГО НАДО СМОТРЕТЬ, искать решение на уровне "что-то не работает, надо тыкать пальцем в разные места" глупо и неэффективно.
2) Если лог не ведется(что конечно странно, но возможно) то логи ошибок нужно включить, вывод можно не включать.
3)
type_ed = explode(",", $n['threat_type']);
$type_edit = '';
foreach ($type_ed as $type_edd)
{
        $ttt = $db->query("SELECT * FROM `type` WHERE `id`='".$type_edd."'")->fetch_assoc();
        $name_type = $ttt['type'];
        $type_edit.= "$name_type,";
       
}

что то в этом куске неверно, запросы в цикле есть зло, и тут явно напрашивается более другое решение, навскидку можно было сделать сразу 1 запрос где `id` in ($type_ed), хотя подозреваю что это криво организованный список категорий, записываемый строкой с запятыми в качестве разделителя. Это г*нокод, по этому и тормоза и глюки.
4) Если проблема во времени выполнения скрипта то можно запускать в консольном режиме в отдельном процессе в бэкграунде, что для разовых задач нормально.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы