我正在尝试将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输出到我的提供商服务器而不是把它下载到我的电脑上?
答案 0 :(得分:0)
如果您想在服务器上存储而不是向浏览器提供数据,则需要对您的(其他工作正常的)代码进行一些更改:
header
function。删除那些。php://output
,而是使用要存储CSV数据的文件的路径。那已经是。
使用过时的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);
}