Как выявить причину этой ошибки и ее устранить? Я использую плагин datatables с обработкой на серверной стороне. Соответственно таблица обращается с запросом к скрипту за данными. ВО встроенном в браузере отладчике я вижу что запрос отправляется а вот ответ сервер не присылает в консоли вижу ошибку net :: ERR_CONNECTION_RESET В чем может быть проблема?Как мне исправить эту ошибку?
Разработчик плагина утверждает что плагин тут не при чем и советует "Затем просмотрите журналы веб-сервера, чтобы определить причину сброса соединения."
С адресом все в порядке а вот причину такого поведения сервера не пойму.Дело в том что я использую плагин Datatables с обработкой на стороне сервера. И когда я инициирую отображение менее 16 колонок все работает без ошибок. Как только количество столбцов становится равным 16. Идет эта ошибка. разработчик плагина мне говорит что плагин тут не виноват и надо разбираться почему сервер обрывает соединение в лог файлах Abyss. Ничего интересного не обнаружил.А мне надо вывести для просмотра 24 столбца.
запрос к серверу какой имеет вид? сколько переменных передается? может дело в пременных окружения php? max_input_vars, max_post_vars итд Попробуйте послать такой же запрос через стороннюю программу, например через postman посмотрите результат
Вот действительно надо посмотреть на переменные окружения. Ибо с возрастание числа колонок растёт число переменных в запросе. И наверное числом 15 я исчерпал разрешены лимит. Проверю.Это хоть какая то правдоподобная гипотеза. А то у меня не было дельные мыслей.Спасибо за подсказку
Посмотрел настройки PHP в ini файле. post_max_size = 32M upload_max_filesize = 32M odbc.defaultlrl = 4096 max_input_vars = 1000 по идее узких мест не вижу.
Копировал этот запрос из отладчика в браузере в браузер- исполняется без проблем а в плагине из Ajax. Всегда ошибка как бы увидеть причину ошибки???Есть такая возможность???
не могу гадать... надо код серверной части смотреть посмотрите- много ли отдает данные при 14 или скольки там полях
Серверный код одинаковый он всегда возвращает ответ на 24 колонки.Парадокс состоит в том. Что при объявлении в плагине 15 и мене колонок данные приходят без ошибок. Как только ставлю 16 колонок возникает ошибка. Разработчик плагина Колин утверждает,что плагин тут не причём. Он исправно отправляет get запрос через Ajax. Я это вижу в отладчике. Но возникает ошибка. Как бы мне выяснить причину ошибки? Какие средства могут помочь? --- Добавлено --- Согласен при увеличении количества колонок в плагине изменяет структура запроса,так оно и есть -увеличивается количество передаваемых переменных на сервер это я увидел с помощью встроенного в браузер отладчика. НО интересная вещь. Если я копирую этот запрос из встроенного отладчика и вставляю в адресную строку браузера то он исполняется без проблем. Как такое может быть ,то один и тот же запрос исполняется то с ошибкой то без?Никак не могу понять.Даже гипотезы пока нет.
смотреть надо на живом примере - есть ссылка на проект/проблему в внешнем интернете? может в серверной части какая то проверка на то что запрос пришел в Ajax? мы тоже не может просто гадать на кофейной гуще....
Согласен при увеличении количества колонок в плагине изменяет структура запроса,так оно и есть -увеличивается количество передаваемых переменных на сервер это я увидел с помощью встроенного в браузер отладчика. НО интересная вещь. Если я копирую этот запрос из встроенного отладчика и вставляю в адресную строку браузера то он исполняется без проблем. Как такое может быть ,то один и тот же запрос --- Добавлено --- Привожу серверный код <?php //include database connection file require"conect.php"; $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $params = $columns = $totalRecords = $data = array(); $params = $_REQUEST; //define index of column name $columns = array( 0 =>'kod', 1 =>'kod1c', 2 =>'login', 3 =>'password', 4 =>'name', 5 =>'INN', 6 =>'profit', 7 =>'e_mail', 8 =>'telefon', 9=>'viber', 10=>'watsup', 11=>'trelefon1', 12=>'region', 13=>'town', 14=>'street', 15=>'house', 16=>'office', 17=>'fio_manager', ); $where = $sqlTot = $sqlRec = ""; $BS=""; // check search value exist $BS=$params['search']['value']; $fd1 = fopen("seach1.txt", 'a') or die("не удалось открыть файл"); fwrite($fd1, $BS); fclose($fd1); //if( !empty($BS)) if($BS<>""){ $where .=" WHERE "; $where .=" kod LIKE '".$BS."%' "; $where .=" OR name LIKE '"."%".$BS."%' "; $where .=" OR kod1c LIKE '".$BS."%' "; $where .=" OR login LIKE '".$BS."%' "; $where .=" OR password LIKE '".$BS."%' "; $where .=" OR INN LIKE '".$BS."%' "; $where .=" OR trelefon1 LIKE '".$BS."%' "; $where .=" OR viber LIKE '".$BS."%' "; $where .=" OR watsup LIKE '".$BS."%' "; $where .=" OR region LIKE '".$BS."%' "; $where .=" OR town LIKE '".$BS."%' "; $where .=" OR street LIKE '".$BS."%' "; $fd2 = fopen("were.txt", 'a') or die("не удалось открыть файл"); fwrite($fd2, $where); fclose($fd2); } // getting total number records without any search $sql = "SELECT clients.kod, clients.kod1C, clients.login, clients.password, clients.name, clients.INN, clients.profit, clients.e_mail, clients.telefon, clients.viber, clients.watsup, clients.trelefon1, clients.region, clients.town, clients.street, clients.house, clients.office, clients.fio_manager, clients.men_E_mail, clients.men_tel, clients.men_tel1, clients.bad, clients.UL, clients.regDate FROM clients"; $sqlTot .= $sql; $sqlRec .= $sql; //concatenate search sql if value exist if(isset($where) && $where != '') { $sqlRec .= $where; } $sqlRec .= " ORDER BY ". $columns[$params['order'][0]['column']]." ".$params['order'][0]['dir']." LIMIT ".$params['start']." ,".$params['length']." "; $ver=$pdo->prepare($sqlTot); $fd = fopen("sqlTot.txt", 'a') or die("не удалось открыть файл"); fwrite($fd, $sqlTot); fclose($fd); $fd1 = fopen("sqlRec.txt", 'a') or die("не удалось открыть файл"); //echo $sql; fwrite($fd1, $sqlRec); fclose($fd1); $ver->execute(); $totalRecords=$ver->rowCount(); $ver=$pdo->prepare($sqlRec); $ver->execute(); $queryRecordsRecords=$ver->rowCount(); //$queryTot = mysqli_query($conn, $sqlTot) or die("database error:". mysqli_error($conn)); $ver=$pdo->prepare($sqlRec); $ver->execute(); $queryRecords =$ver->rowCount(); $fd = fopen("sql.txt", 'a') or die("не удалось открыть файл"); fwrite($fd, $sqlRec); fclose($fd); $ver=$pdo->prepare($sqlRec); $ver->execute(); $data1=$ver->fetchall(PDO :: FETCH_NUM ); foreach($data1 as $value){ $data[]=$value; } //while( $row = $ver->fetch(PDO::FETCH_OBJ)){ //$data[] = $row;} $json_data = array( // "draw" => intval( $params['draw'] ), "recordsTotal" => intval( $totalRecords ), "recordsFiltered" => intval($queryRecordsRecords), "data" => $data // total data array ); echo json_encode($json_data); // send data as json format ?>
отформатируйте нормально код - тут теги есть специальные .. молчу про качество кода, возможность SQL иньекции и прочие радости предлагаю убрать все операции с файлами (я хз.... че за бюрет при работе с БД еще и файлы использовать, нужны логи -ну так пишите в БД же) а вместо данных операций прямо пошагово отлаживайте - ставьте Код (Text): die('step 1 - ok'); и так до последнего оператора echo --- Добавлено --- на каком шаге в отладчике перестанет появляться какой либо вывод - вот вы и сузите область ошибки
Привожу серверный код <?php //include database connection file require"conect.php"; $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $params = $columns = $totalRecords = $data = array(); $params = $_REQUEST; //define index of column name $columns = array( 0 =>'kod', 1 =>'kod1c', 2 =>'login', 3 =>'password', 4 =>'name', 5 =>'INN', 6 =>'profit', 7 =>'e_mail', 8 =>'telefon', 9=>'viber', 10=>'watsup', 11=>'trelefon1', 12=>'region', 13=>'town', 14=>'street', 15=>'house', 16=>'office', 17=>'fio_manager', ); $where = $sqlTot = $sqlRec = ""; $BS=""; // check search value exist $BS=$params['search']['value']; $fd1 = fopen("seach1.txt", 'a') or die("не удалось открыть файл"); fwrite($fd1, $BS); fclose($fd1); //if( !empty($BS)) if($BS<>""){ $where .=" WHERE "; $where .=" kod LIKE '".$BS."%' "; $where .=" OR name LIKE '"."%".$BS."%' "; $where .=" OR kod1c LIKE '".$BS."%' "; $where .=" OR login LIKE '".$BS."%' "; $where .=" OR password LIKE '".$BS."%' "; $where .=" OR INN LIKE '".$BS."%' "; $where .=" OR trelefon1 LIKE '".$BS."%' "; $where .=" OR viber LIKE '".$BS."%' "; $where .=" OR watsup LIKE '".$BS."%' "; // $where .=" OR telefon1 LIKE '".$BS."%' "; $where .=" OR region LIKE '".$BS."%' "; $where .=" OR town LIKE '".$BS."%' "; $where .=" OR street LIKE '".$BS."%' "; // $where .=" OR street LIKE '".$BS."%' "; //$where .=" INN LIKE '".$BS."%' "; $fd2 = fopen("were.txt", 'a') or die("не удалось открыть файл"); fwrite($fd2, $where); fclose($fd2); } // getting total number records without any search $sql = "SELECT clients.kod, clients.kod1C, clients.login, clients.password, clients.name, clients.INN, clients.profit, clients.e_mail, clients.telefon, clients.viber, clients.watsup, clients.trelefon1, clients.region, clients.town, clients.street, clients.house, clients.office, clients.fio_manager, clients.men_E_mail, clients.men_tel, clients.men_tel1, clients.bad, clients.UL, clients.regDate FROM clients"; $sqlTot .= $sql; $sqlRec .= $sql; //concatenate search sql if value exist if(isset($where) && $where != '') { // $sqlTot .= $where; $sqlRec .= $where; } $sqlRec .= " ORDER BY ". $columns[$params['order'][0]['column']]." ".$params['order'][0]['dir']." LIMIT ".$params['start']." ,".$params['length']." "; $ver=$pdo->prepare($sqlTot); $fd = fopen("sqlTot.txt", 'a') or die("не удалось открыть файл"); //echo $sql; fwrite($fd, $sqlTot); fclose($fd); $fd1 = fopen("sqlRec.txt", 'a') or die("не удалось открыть файл"); //echo $sql; fwrite($fd1, $sqlRec); fclose($fd1); $ver->execute(); $totalRecords=$ver->rowCount(); $ver=$pdo->prepare($sqlRec); $ver->execute(); $queryRecordsRecords=$ver->rowCount(); //$queryTot = mysqli_query($conn, $sqlTot) or die("database error:". mysqli_error($conn)); $ver=$pdo->prepare($sqlRec); $ver->execute(); $queryRecords =$ver->rowCount(); $fd = fopen("sql.txt", 'a') or die("не удалось открыть файл"); fwrite($fd, $sqlRec); fclose($fd); $ver=$pdo->prepare($sqlRec); $ver->execute(); $data1=$ver->fetchall(PDO :: FETCH_NUM ); foreach($data1 as $value){ $data[]=$value; } //while( $row = $ver->fetch(PDO::FETCH_OBJ)){ //$data[] = $row;} $json_data = array( // "draw" => intval( $params['draw'] ), "recordsTotal" => intval( $totalRecords ), "recordsFiltered" => intval($queryRecordsRecords), "data" => $data // total data array ); echo json_encode($json_data); // send data as json format ?> --- Добавлено --- Может код и не идеален. Но он работает по запросам таблиц с колонками меньше 16. Думаете код поведет себя другим образом при другом запросе так он исполняется если запрос вставить в адресную строку браузера. Я не волшебник. Я только учусь. Вот что я виу в консоли когда количество столбцов 16 jquery-3.3.1.min.js:2 GET http://localhost/server_processingc...h[value]=&search[regex]=false&_=1558707905458 net::ERR_CONNECTION_RESET send @ jquery-3.3.1.min.js:2 ajax @ jquery-3.3.1.min.js:2 _fnBuildAjax @ dataTables.js:3948 _fnAjaxUpdate @ dataTables.js:3980 _fnDraw @ dataTables.js:3443 _fnReDraw @ dataTables.js:3562 _fnInitialise @ dataTables.js:4744 loadedInit @ dataTables.js:1306 (anonymous) @ dataTables.js:1318 each @ jquery-3.3.1.min.js:2 each @ jquery-3.3.1.min.js:2 DataTable @ dataTables.js:881 $.fn.DataTable @ dataTables.js:15135 (anonymous) @ scriptdatatableclients0311.js:4 l @ jquery-3.3.1.min.js:2 c @ jquery-3.3.1.min.js:2 setTimeout (async) (anonymous) @ jquery-3.3.1.min.js:2 u @ jquery-3.3.1.min.js:2 fireWith @ jquery-3.3.1.min.js:2 fire @ jquery-3.3.1.min.js:2 u @ jquery-3.3.1.min.js:2 fireWith @ jquery-3.3.1.min.js:2 ready @ jquery-3.3.1.min.js:2 _ @ jquery-3.3.1.min.js:2 Это параметры запроса из заголовка запроса draw: 1 columns[0][data]: 0 columns[0][name]: columns[0][searchable]: true columns[0][orderable]: true columns[0][search][value]: columns[0][search][regex]: false columns[1][data]: 1 columns[1][name]: columns[1][searchable]: true columns[1][orderable]: true columns[1][search][value]: columns[1][search][regex]: false columns[2][data]: 2 columns[2][name]: columns[2][searchable]: true columns[2][orderable]: true columns[2][search][value]: columns[2][search][regex]: false columns[3][data]: 3 columns[3][name]: columns[3][searchable]: true columns[3][orderable]: true columns[3][search][value]: columns[3][search][regex]: false columns[4][data]: 4 columns[4][name]: columns[4][searchable]: true columns[4][orderable]: true columns[4][search][value]: columns[4][search][regex]: false columns[5][data]: 5 columns[5][name]: columns[5][searchable]: true columns[5][orderable]: true columns[5][search][value]: columns[5][search][regex]: false columns[6][data]: 6 columns[6][name]: columns[6][searchable]: true columns[6][orderable]: true columns[6][search][value]: columns[6][search][regex]: false columns[7][data]: 7 columns[7][name]: columns[7][searchable]: true columns[7][orderable]: true columns[7][search][value]: columns[7][search][regex]: false columns[8][data]: 8 columns[8][name]: columns[8][searchable]: true columns[8][orderable]: true columns[8][search][value]: columns[8][search][regex]: false columns[9][data]: 9 columns[9][name]: columns[9][searchable]: true columns[9][orderable]: true columns[9][search][value]: columns[9][search][regex]: false columns[10][data]: 10 columns[10][name]: columns[10][searchable]: true columns[10][orderable]: true columns[10][search][value]: columns[10][search][regex]: false columns[11][data]: 11 columns[11][name]: columns[11][searchable]: true columns[11][orderable]: true columns[11][search][value]: columns[11][search][regex]: false columns[12][data]: 12 columns[12][name]: columns[12][searchable]: true columns[12][orderable]: true columns[12][search][value]: columns[12][search][regex]: false columns[13][data]: 13 columns[13][name]: columns[13][searchable]: true columns[13][orderable]: true columns[13][search][value]: columns[13][search][regex]: false columns[14][data]: 14 columns[14][name]: columns[14][searchable]: true columns[14][orderable]: true columns[14][search][value]: columns[14][search][regex]: false columns[15][data]: 15 columns[15][name]: columns[15][searchable]: true columns[15][orderable]: true columns[15][search][value]: columns[15][search][regex]: false order[0][column]: 0 order[0][dir]: desc start: 0 length: 10 search[value]: search[regex]: false
Может код и не идеален. Но он работает по запросам таблиц с колонками меньше 16. Думаете код поведет себя другим образом при другом запросе так он исполняется если запрос вставить в адресную строку браузера. Я не волшебник. Я только учусь. Вот что я виу в консоли когда количество столбцов 16 jquery-3.3.1.min.js:2 GET http://localhost/server_processingc...h[value]=&search[regex]=false&_=1558707905458 net::ERR_CONNECTION_RESET send @ jquery-3.3.1.min.js:2 ajax @ jquery-3.3.1.min.js:2 _fnBuildAjax @ dataTables.js:3948 _fnAjaxUpdate @ dataTables.js:3980 _fnDraw @ dataTables.js:3443 _fnReDraw @ dataTables.js:3562 _fnInitialise @ dataTables.js:4744 loadedInit @ dataTables.js:1306 (anonymous) @ dataTables.js:1318 each @ jquery-3.3.1.min.js:2 each @ jquery-3.3.1.min.js:2 DataTable @ dataTables.js:881 $.fn.DataTable @ dataTables.js:15135 (anonymous) @ scriptdatatableclients0311.js:4 l @ jquery-3.3.1.min.js:2 c @ jquery-3.3.1.min.js:2 setTimeout (async) (anonymous) @ jquery-3.3.1.min.js:2 u @ jquery-3.3.1.min.js:2 fireWith @ jquery-3.3.1.min.js:2 fire @ jquery-3.3.1.min.js:2 u @ jquery-3.3.1.min.js:2 fireWith @ jquery-3.3.1.min.js:2 ready @ jquery-3.3.1.min.js:2 _ @ jquery-3.3.1.min.js:2 Это параметры запроса из заголовка запроса draw: 1 columns[0][data]: 0 columns[0][name]: columns[0][searchable]: true columns[0][orderable]: true columns[0][search][value]: columns[0][search][regex]: false columns[1][data]: 1 columns[1][name]: columns[1][searchable]: true columns[1][orderable]: true columns[1][search][value]: columns[1][search][regex]: false columns[2][data]: 2 columns[2][name]: columns[2][searchable]: true columns[2][orderable]: true columns[2][search][value]: columns[2][search][regex]: false columns[3][data]: 3 columns[3][name]: columns[3][searchable]: true columns[3][orderable]: true columns[3][search][value]: columns[3][search][regex]: false columns[4][data]: 4 columns[4][name]: columns[4][searchable]: true columns[4][orderable]: true columns[4][search][value]: columns[4][search][regex]: false columns[5][data]: 5 columns[5][name]: columns[5][searchable]: true columns[5][orderable]: true columns[5][search][value]: columns[5][search][regex]: false columns[6][data]: 6 columns[6][name]: columns[6][searchable]: true columns[6][orderable]: true columns[6][search][value]: columns[6][search][regex]: false columns[7][data]: 7 columns[7][name]: columns[7][searchable]: true columns[7][orderable]: true columns[7][search][value]: columns[7][search][regex]: false columns[8][data]: 8 columns[8][name]: columns[8][searchable]: true columns[8][orderable]: true columns[8][search][value]: columns[8][search][regex]: false columns[9][data]: 9 columns[9][name]: columns[9][searchable]: true columns[9][orderable]: true columns[9][search][value]: columns[9][search][regex]: false columns[10][data]: 10 columns[10][name]: columns[10][searchable]: true columns[10][orderable]: true columns[10][search][value]: columns[10][search][regex]: false columns[11][data]: 11 columns[11][name]: columns[11][searchable]: true columns[11][orderable]: true columns[11][search][value]: columns[11][search][regex]: false columns[12][data]: 12 columns[12][name]: columns[12][searchable]: true columns[12][orderable]: true columns[12][search][value]: columns[12][search][regex]: false columns[13][data]: 13 columns[13][name]: columns[13][searchable]: true columns[13][orderable]: true columns[13][search][value]: columns[13][search][regex]: false columns[14][data]: 14 columns[14][name]: columns[14][searchable]: true columns[14][orderable]: true columns[14][search][value]: columns[14][search][regex]: false columns[15][data]: 15 columns[15][name]: columns[15][searchable]: true columns[15][orderable]: true columns[15][search][value]: columns[15][search][regex]: false order[0][column]: 0 order[0][dir]: desc start: 0 length: 10 search[value]: search[regex]: false