2012-03-05 88 views
0

第一次我必須這樣做,但我需要將查詢結果保存爲CSV並在服務器上創建文件,它通過SFTP傳遞到遠程服務器。我可以通過下面的代碼成功創建在瀏覽器中下載的CSV,但似乎無法將它保存在服務器上。我想我可能需要file_put_contents?如果任何人都可以提出一種方法,或者更好的方法來通過sftp發送輸出,那麼它會得到很大的好處。將查詢結果保存爲CSV並在服務器上創建文件

$result = mysql_query("SELECT * FROM `policy_details` WHERE `policyNumber` = '848938'"); 
if (!$result) die('Couldn\'t fetch records'); 
$num_fields = mysql_num_fields($result); 
$headers = array(); 
for ($i = 0; $i < $num_fields; $i++) 
{  
     $headers[] = mysql_field_name($result , $i); 
} 
$fp = fopen('php://output', 'w'); 
if ($fp && $result) 
{  

     header('Content-Type: text/csv'); 
     header('Content-Disposition: attachment; filename="export.csv"'); 
     header('Pragma: no-cache');  
     header('Expires: 0'); 
     fputcsv($fp, $headers); 
     while ($row = mysql_fetch_row($result)) 
     { 
      fputcsv($fp, array_values($row)); 
     } 
//die; 
} 
+0

你有沒有做過任何調試?嘗試在while循環中回顯而不是寫入文件,因此您可以確保您的while循環正在執行,並且您的輸出符合預期。 – Travesty3 2012-03-05 16:21:02

+0

您是否嘗試在代碼中使用除'php:// output'之外的值? – 2012-03-05 16:37:01

回答

1

立即想到會是保存文件時,你不必送頭。如果您只是將一個常規的csv文件保存到本地服務器(並單獨執行FTP),我也不會看到使用'php://'方案的好處。我會使用類似

$fp = fopen('/path/to/new/file.csv', 'w+'); 
if ($fp && $result) 
{  
     while ($row = mysql_fetch_row($result)) 
     { 
      fputcsv($fp, array_values($row)); 
     } 
} 

在另一方面,你可以將文件直接保存在FTP,和避免2階段過程。

+0

謝謝 - 解決了這個問題,現在文件保存在服務器上 – Marc 2012-03-05 18:32:59

1

我會做的是改變你的php:/ /輸出文件指針到您要保存到服務器上的文件。將您的標題移動到while循環之下,這樣您就可以將每行從db寫入文件。一旦你退出你的while循環,閱讀剛寫入的文件作爲一個大變量,並用你的頭文件打印回顯。

$fp=fopen('/path/to/file/on/server/','w'); 

    while ($row = mysql_fetch_row($result)) 
    { 
     fputcsv($fp, array_values($row)); 
    } 
    fclose($fp); 

    $csvFile = fopen('/path/to/file/on/server','r'); 
    $csvData = fread($csvFile,filesize('/path/to/file/on/server'); 
    fclose($csvFile); 


    header('Content-Type: text/csv'); 
    header('Content-Disposition: attachment; filename="export.csv"'); 
    header('Pragma: no-cache');  
    header('Expires: 0'); 

    echo $csvData; 

顯然,這不是整個腳本,但這些都是我會改變來完成你想做的事件。

相關問題