2017-01-25 2 views
-1

Я не понимаю, почему мой fputcsv не работает. Вот что я получил:php fputcsv не работает

<?php 
    error_reporting(E_ALL); 
    ini_set('display_errors', 1); 
    $id = $_GET['Id']; 
    include('DBConn.php'); 
    $query = $conn->prepare('SELECT QName, tsql from pmdb.QDefs WHERE Id = ' . $id); 
    $query->execute(); 
    $qdef = $query->fetch(PDO::FETCH_ASSOC); 

    // Create and open file for writing 
    $filepath = 'exports/'; 
    $filename = $qdef['QName'] . '.csv'; 
    //$filename = $qdef['QName'] . '.csv'; 
    try 
    { 
     $openFile = fopen($filepath . $filename,'w'); 
     header('Content-Encoding: UTF-8'); 
     header('Content-Type: text/csv; charset:UTF-8'); 
     header('Content-Disposition: attachment; filename="' . $filename . '"'); 
    } 
    catch(Exception $e) 
    { 
     echo "Something went wrong<br>"; 
     die(print_r($e->getMessage())); 
    } 

    // Use returned tsql field as query for dataset 
    $tsql = $qdef['tsql']; 
    //echo "tsql<br>"; print_r($tsql); //This was to make sure that I'm getting the correct query 
    $query = $conn->prepare($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($row); 

      if ($headers[0] == 'ID') 
       $headers[0] = 'Id'; 
      fputcsv($openFile, $headers); //This is doing nothing The headers from here don't get printer to the file 
      //print_r($headers); //This was to check and see if the headers exist 
      print_r($openFile);echo ","; //This is to see what is returned from the fopen -> it returns "Resource is #4" 
      foreach($headers as $Header) 
      { 
       echo $Header. ","; //This was to print the headers to see if I can write to the file. I can the headers print. 
      } 
     } 
     //Write data 
     $modRow = preg_replace('/ \d{2}:\d{2}:\d{2}\.\d{3}/', '', $row); 
     /* 
     $modRow = str_replace('\r\n', " ", $modRow); 
     $modRow = str_replace('\n\r', " ", $modRow); 
     $modRow = str_replace('\n', " ", $modRow); 
     $modRow = str_replace('\r', " ", $modRow); 
     */ 
     fputcsv($openFile, $modRow, ',','"');//print_r($modRow); //The rows don't get added to the file from here like they should, but I also don't get any error. 
    } 

    // Close file 
    fclose($openFile); 

    //echo $filepath . $filename; 
?> 

Там нет ошибок Это просто экспортирует пустой файл, хотя это имя правильно. Для большинства отчетов файл должен содержать более 30 столбцов и 10000 строк.

Это как установить мой отчет об ошибках:

error_reporting(E_ALL|E_STRICT);//For use in trouble shooting 
    ini_set('display_errors', 'On');//For use in trouble shooting 
+2

Определение "не работает". Любые сообщения об ошибках, предупреждения, уведомления? Что вы получили против того, чего вы ожидаете? и т. д. Если ваш параметр error_reporting не установлен на E_ALL, по крайней мере, исправьте это первым. – cHao

+0

Было бы также полезно создать MVCE. Проблема в отношении 'fgetvsv()' doens't нуждается в SQL или messing с заголовками HTTP. – HPierce

+0

@cHao Нет ошибок, он просто экспортирует пустой файл. Вот почему Ом смутился. Если бы была ошибка, у меня было бы кое-что, чтобы преследовать, но файл просто пуст, и я могу «echo» или «print_r», чтобы я знал, что он открывается. Просто 'fputcsv', похоже, не работает. – Mike

ответ

0

Я в конечном итоге создать обходной путь, так как в не может получить fputcsv работать.

Я сейчас делаю это:

foreach($modRow as $RowPrint) 
{ 
    echo '"' .trim(unserialize(serialize($RowPrint))). '"' .$sep; 
} 
echo $br; 

Где $sep = "," и $br = "\r\n"