Я не могу заставить встроенную функцию fputcsv()
работать. Вот что я пробовал:
error_reporting(E_ALL); ini_set('display_errors', 1); include('DBConn.php'); //My SQL server connection information include 'Helper/LogReport.php'; //Keeps a count of how many times reports are exported $query = $conn->query("SELECT QName, tsql from pmdb.QDefs WHERE QName = '" .$TableName. "'"); $query->execute(); $qdef = $query->fetch(PDO::FETCH_ASSOC); // Create and open file for writing $filepath = 'exports/'; $filename = $qdef['QName'] . '.csv'; try { header('Content-Encoding: UTF-8'); header('Content-Type: text/csv; charset:UTF-8'); header('Content-Disposition: attachment; filename="' . $filename . '"'); //$openFile = fopen('php://output','w'); $openFile = fopen($filepath . $filename,'w'); } catch(Exception $e) { echo "Something went wrong<br>"; die( print_r( $e->getMessage())); } //define separators $sep = ","; //separator $br = "\r\n"; //line break // Use returned tsql field as query for dataset $tsql = $qdef['tsql']; if(isset($DataReturn)) { if(strpos($DataReturn['Order'],'EDIT')) { $DataReturn['Order'] = str_replace('EDIT','Id',$DataReturn['Order']); } $tsql = $tsql . $DataReturn['WhereClause'] . $DataReturn['Order'] . $DataReturn['Limit']; } $query = $conn->query($tsql); $query->execute(); // Output data to CSV file $headers = NULL; while ($row = $query->fetch(PDO::FETCH_ASSOC)) { //Write column headings to file if (is_null($headers)) { $headers = array_keys((array)$row); if ($headers[0] == 'ID') $headers[0] = 'Id'; fputcsv($openFile, $headers, ',','"'); } //Write data $modRow = preg_replace('/ \d{2}:\d{2}:\d{2}\.\d{3}/', '', array_values($row)); $modRow = preg_replace( "/\r|\n/", "", $modRow ); /* $modRow = str_replace('\r\n', " ", $modRow); $modRow = str_replace('\n\r', " ", $modRow); $modRow = str_replace('\n', " ", $modRow); $modRow = str_replace('\r', " ", $modRow); $modRow = str_replace(' ', " ", $modRow); $modRow = str_replace('Â ', " ", $modRow); $modRow = str_replace('"', '', $modRow); $modRow = str_replace("'", "", $modRow); */ fputcsv($openFile, $modRow, ',','"'); } // Close file fclose($openFile);
вerror_reporting(E_ALL); ini_set('display_errors', 1); include('DBConn.php'); //My SQL server connection information include 'Helper/LogReport.php'; //Keeps a count of how many times reports are exported $query = $conn->query("SELECT QName, tsql from pmdb.QDefs WHERE QName = '" .$TableName. "'"); $query->execute(); $qdef = $query->fetch(PDO::FETCH_ASSOC); // Create and open file for writing $filepath = 'exports/'; $filename = $qdef['QName'] . '.csv'; try { header('Content-Encoding: UTF-8'); header('Content-Type: text/csv; charset:UTF-8'); header('Content-Disposition: attachment; filename="' . $filename . '"'); //$openFile = fopen('php://output','w'); $openFile = fopen($filepath . $filename,'w'); } catch(Exception $e) { echo "Something went wrong<br>"; die( print_r( $e->getMessage())); } //define separators $sep = ","; //separator $br = "\r\n"; //line break // Use returned tsql field as query for dataset $tsql = $qdef['tsql']; if(isset($DataReturn)) { if(strpos($DataReturn['Order'],'EDIT')) { $DataReturn['Order'] = str_replace('EDIT','Id',$DataReturn['Order']); } $tsql = $tsql . $DataReturn['WhereClause'] . $DataReturn['Order'] . $DataReturn['Limit']; } $query = $conn->query($tsql); $query->execute(); // Output data to CSV file $headers = NULL; while ($row = $query->fetch(PDO::FETCH_ASSOC)) { //Write column headings to file if (is_null($headers)) { $headers = array_keys((array)$row); if ($headers[0] == 'ID') $headers[0] = 'Id'; fputcsv($openFile, $headers, ',','"'); } //Write data $modRow = preg_replace('/ \d{2}:\d{2}:\d{2}\.\d{3}/', '', array_values($row)); $modRow = preg_replace( "/\r|\n/", "", $modRow ); /* $modRow = str_replace('\r\n', " ", $modRow); $modRow = str_replace('\n\r', " ", $modRow); $modRow = str_replace('\n', " ", $modRow); $modRow = str_replace('\r', " ", $modRow); $modRow = str_replace(' ', " ", $modRow); $modRow = str_replace('Â ', " ", $modRow); $modRow = str_replace('"', '', $modRow); $modRow = str_replace("'", "", $modRow); */ fputcsv($openFile, $modRow, ',','"'); } // Close file fclose($openFile);
Но ничего не печатается в файле, это просто пусто. Я что-то неправильно делаю?
РЕДАКТИРОВАТЬ
Я пробовал все варианты для fopen
которые я мог найти на этой странице , но все они дают мне пустой файл при использовании fputcsv
. Я только получаю данные в файле, когда я echo
массивы.
КОНЕЦ РЕДАКТИРОВАНИЯ
Вы можете видеть, что массив заголовков настроен из ключей массива, возвращаемых из запроса в БД. Я могу echo
их и получить правильные заголовки.
Тогда есть строки данных. Я удаляю ненужные символы, но они все еще массивы данных и должны печатать с помощью fputcsv
. Опять я могу echo
содержимое массива, перейдя через него. Вот как я сейчас работаю над экспортом, но я знаю, что это всего лишь обходной путь и вы хотите, чтобы fputcsv
работал.
Вот как я печатаю строки:
foreach($modRow as $RowPrint) { echo '"' .trim(unserialize(serialize($RowPrint))). '"' .$sep; } echo $br;
ОБНОВИТЬ
Вот результат, когда я print_r
заголовки:
Array ( [0] => Id [1] => QSRC [2] => QNAME [3] => QDEF [4] => ISACTIVE [5] => RUNREPORT [6] => FILEPATH [7] => TSQL )
и вот одна строка, с которой я $modRow
:
Array ( [Id] => 60 [QSRC] => bau [QNAME] => Oops I deleted this! [QDEF] => SELECT REGION [ISACTIVE] => 0 [RUNREPORT] => 0 [FILEPATH] => [TSQL] => )
Я print_r
как после того, как fputcsv
должен был напечатать их в файле. Это единственные вещи в файле.