मैं एक छोटी PHP स्क्रिप्ट बनाने की कोशिश कर रहा हूं जो JSON स्ट्रिंग लेता है, इसे CSV प्रारूप में परिवर्तित करता है (fputcsv
का उपयोग करके), और यह CSV डाउनलोड की गई .csv फ़ाइल के रूप में उपलब्ध कराता है। मेरा विचार क्रोनबॉज के बारे में चिंता करने या डिस्क स्पेस से बाहर होने के लिए tmpfile()
का उपयोग करना था, लेकिन मुझे जादू होने की प्रतीत नहीं होती है।एक अस्थायी फ़ाइल को डाउनलोड करने के लिए
यहाँ मेरी प्रयास है, जो the PHP docs of readfile
से एक परिवर्तित उदाहरण है:
$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);
मैं Content-Disposition
और Content-Transfer-Encoding
हेडर की तरह महसूस गलत हैं, लेकिन मुझे यकीन है कि उन्हें ठीक करने के लिए नहीं कर रहा हूँ। उदाहरण के लिए, basename($tmp)
कुछ भी वापस नहीं प्रतीत होता है, और मुझे यकीन नहीं है कि text/csv
बाइनरी एन्कोडिंग के रूप में स्थानान्तरण। इसी तरह, echo filesize($tmp)
भी खाली है। क्या मैं यहां कोशिश कर रहा हूं कि ऐसा करने का कोई तरीका है?
[संपादित करें]
** नीचे काम कर कोड मैं स्वीकार किए जाते हैं जवाब का एक परिणाम के रूप में लिखा है: *
$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);
इस समस्या के लिए जावास्क्रिप्ट समाधान के लिए, http://stackoverflow.com/questions/4130849/convert-json-format-to-csv-format-for-ms-excel पर एक नज़र डालें। – Impirator
क्या किसी भी मौके से 'json_decode' वापसी' शून्य 'है? – Jon
तो फाइल सिर्फ डाउनलोड नहीं करना चाहती है? और ब्राउज़र में खोला? यही दिक्कत है? – Anton