用php导出mysql表到csv(没有选择输出文件)

时间:2014-05-04 06:16:15

标签: php mysql csv

我正在尝试将MySQL表导出为CSV文件。 我的代码工作正常:

$result = mysql_query('SELECT * FROM `TABLE`'); 
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; 
}

但是我想将csv文件自动上传到我的网络主机服务器而不是下载到我的电脑。
我无法使用“SELECT ... INTO OUTFILE”查询,因为我的提供商不想给我FILE权限。
我有什么方法可以用csv输出到我的提供商服务器而不是把它下载到我的电脑上?

1 个答案:

答案 0 :(得分:0)

如果您想在服务器上存储而不是向浏览器提供数据,则需要对您的(其他工作正常的)代码进行一些更改:

  1. 不再需要header function。删除那些。
  2. 您不想再输出到php://output,而是使用要存储CSV数据的文件的路径。
  3. 那已经是。

    使用过时的Mysql客户端库的一些示例代码,您将其用作PHP 5.5代码:

    $file_name = '/path/to/file/on/server.csv';
    $sql       = 'SELECT * FROM `TABLE`';
    
    $query = function ($statement) {
        if (!$result = mysql_query($statement)) throw new RuntimeException(
            sprintf('Statement %s failed: #%s %s', var_export($statement, true), mysql_errno(), mysql_error())
        );
        return $result;
    };
    
    $names = function ($result) {
        for ($names = [], $i = mysql_num_fields($result); $i; $i--)
            $names[] = mysql_field_name($result, $i);
        return $names;
    };
    
    $rows = function($result) {while ($row = mysql_fetch_row($result)) yield $row;};
    
    $result = $query($sql);
    
    $lines = new AppendIterator();
    $lines->append(new ArrayIterator([$names($result)]));
    $lines->append($rows($result));
    
    $csv = new SplFileObject($file_name, 'w');
    foreach ($lines as $fields) {
        $csv->fputcsv($fields);
    }