2017-05-15 2 views
0

Ich habe einen PHP-Code, der eine Abfrage aus einer Postgres-Datenbank auswählt und erstellt eine XLS-Datei und lädt die gleichen. Der Code lautet wie folgt:Speichern xls-Datei in das Verzeichnis und Download in PHP

<?php 

$xls_filename = 'filename.xls'; // Define Excel (.xls) file name 

$Connect = pg_connect ("host=xxxx port=5432 dbname=xxxx user=xxx password=xxx"); 

$sql = 'SELECT * FROM "tablename"'; 

$result = pg_query($sql); 

header("Content-Type: application/xls"); 
header("Content-Disposition: attachment; filename=$xls_filename"); 
header("Pragma: no-cache"); 
header("Expires: 0"); 

// Define separator (defines columns in excel &amp; tabs in word) 
$sep = "\t"; // tabbed character 

// Start of printing column names as names of fields 
for ($i = 0; $i<pg_num_fields($result); $i++) { 
    echo pg_field_name($result,$i) . "\t"; 
} 

print("\n"); 
// End of printing column names 

// Start while loop to get data 
while($row = pg_fetch_row($result)) 
{ 
    $schema_insert = ""; 
    for($j=0; $j<pg_num_fields($result); $j++) 
    { 
    if(!isset($row[$j])) { 
     $schema_insert .= "".$sep; 
    } 
    elseif ($row[$j] != "") { 
     $schema_insert .= "$row[$j]".$sep; 
    } 
    else { 
     $schema_insert .= "".$sep; 
    } 
    } 
    $schema_insert = str_replace($sep."$", "", $schema_insert); 
    $schema_insert = preg_replace("/\r\n|\n\r|\n|\r/", " ", $schema_insert); 
    $schema_insert .= "\t"; 
    print(trim($schema_insert)); 
    print "\n"; 
    } 
    } 

?> 

ich diese xls-Datei packen möchten, die eher dann einfach erstellt heruntergeladen. Wie erstelle ich eine xls-Datei im Verzeichnis, anstatt es herunterzuladen.

+0

Sie 'output_buffering verwenden können 'um es zu tun. Werfen Sie einen Blick auf [docs] (https://secure.php.net/manual/en/book.outcontrol.php) –

+0

Sehen Sie ein Beispiel in dieser [Antwort] (http://stackoverflow.com/a/16225500/ 7925366). –

+0

Wie ist Ihr Dateiname? – lalithkumar

Antwort

0

Das Problem ist Ihre variable.when Ihre Dateinamen Raum hat Sie Anführungszeichen zu verwenden, wie unten haben:

header("Content-Type: application/xls"); 
header("Content-Disposition: attachment; filename='$xls_filename'"); 
+0

Dies ist die Erinnerung, um die Antwort zu akzeptieren, wenn angemessen @Esteann Afonso – lalithkumar

0

Sie unter Code verwenden können, die feine

arbeiten
  $fileNames = WWW_ROOT . 'uploads' . DS . 'export' . DS . 'DYNAMIC_FILE_NAME_'. $ANY_DYNAMIC_PART.'.xls';//Dynamic Path of the directory 
      if (file_exists($fileNames)) { 
       $file = $fileNames; 
       header("Content-Type: application/force-download"); 
       header("Content-Type: application/octet-stream"); 
       header("Content-Type: application/download"); 
       header("Content-Disposition: attachment; filename=\"NEWFILENAME.xls\""); 
       header("Content-Transfer-Encoding: binary"); 
       header("Pragma: no-cache"); 
       header("Expires: 0"); 
       readfile($fileNames);exit; 
      } 
Verwandte Themen