2017-01-25 6 views
-1

Ich verstehe nicht, warum meine fputcsv nicht funktioniert. Hier ist, was ich habe:php fputcsv funktioniert nicht

<?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; 
?> 

Es gibt keine Fehler exportiert nur eine leere Datei, obwohl er es richtig macht nennen. Die Datei sollte mehr als 30 Spalten und mehr als 10000 Zeilen für die meisten Berichte enthalten. Diese

ist, wie meine Fehlerberichterstattung gesetzt:

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

definieren "nicht funktioniert". Irgendwelche Fehlermeldungen, Warnungen, Hinweise? Was hast du gegen das bekommen, was du erwartest? usw. Wenn Ihre error_reporting-Einstellung nicht mindestens auf E_ALL festgelegt ist, beheben Sie dies zuerst. – cHao

+0

Es wäre auch hilfreich, eine MVCE zu erstellen. Ein Problem bezüglich 'fgetvsv()' braucht keine SQL oder Verwirrung mit HTTP-Headern. – HPierce

+0

@cHao Es gibt keine Fehler, es exportiert nur eine leere Datei. Deshalb verwirrt Om. Wenn es einen Fehler gäbe, hätte ich etwas zu jagen, aber die Datei ist einfach leer und ich kann "echo" oder "print_r" sagen, damit ich weiß, dass sie geöffnet wird. Nur die 'fputcsv' scheint nicht zu funktionieren. – Mike

Antwort

0

ich eine Abhilfe zu schaffen endete seit In nicht die fputcsv an die Arbeit.

Ich mache jetzt das:

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

Wo $sep = "," und $br = "\r\n"