JSON dizesini alıp CSV biçimine dönüştüren (fputcsv
kullanarak) kısa bir PHP betiği oluşturmaya çalışıyorum ve bu CSV'yi indirilmiş bir .csv dosyası olarak kullanılabilir hale getiriyorum. Düşüncem, cronjobs hakkında endişelenmenize veya disk alanı tükenmeden endişelenmek için tmpfile()
kullanmaktı, ancak sihrin gerçekleşmesi mümkün görünmüyor.Geçici bir dosya nasıl karşıdan yüklenir
İşte the PHP docs of readfile
dönüştürülmüş bir örnektir benim girişimi var:
$tmp = tmpfile();
$jsonArray = json_decode($_POST['json']);
fputcsv($tmp, $jsonArray);
header('Content-Description: File Transfer');
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename='.basename($tmp));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($tmp));
ob_clean();
flush();
readfile($tmp);
ben yanlış Content-Disposition
ve Content-Transfer-Encoding
başlıklarını gibi hissediyorum, ama bunları düzeltmek için nasıl emin değilim. Örneğin, basename($tmp)
hiçbir şey döndürmüyor ve ben emin değilim text/csv
ikili kodlama olarak aktarır. Aynı şekilde, echo filesize($tmp)
da boş. Denediğimi yapmanın bir yolu var mı?
[Düzenle]
** Aşağıda kabul ettim cevabın sonucunda yazdığı çalışma kod şudur: * varsayılan olarak
$jsonArray = json_decode($_POST['json'], true);
$tmpName = tempnam(sys_get_temp_dir(), 'data');
$file = fopen($tmpName, 'w');
fputcsv($file, $jsonArray);
fclose($file);
header('Content-Description: File Transfer');
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename=data.csv');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($tmpName));
ob_clean();
flush();
readfile($tmpName);
unlink($tmpName);
Bu soruna yönelik bir javascript çözümü için, http://stackoverflow.com/questions/4130849/convert-json-format-to-csv-format-for-ms-excel adresine bakın. – Impirator
'json_decode', herhangi bir şans ile null’ı döndürüyor mu? – Jon
Yani dosya sadece indirilmek istemiyor musunuz? ve tarayıcıda açıldı? sorun bu mu? – Anton