2014-12-15 7 views
0

У меня есть сторонний источник, откуда я получаю файл «csv». Я написал его внутри цитаты, потому что он говорит, что это файл csv, но в основном это не так.Чтение и запись с использованием fgetcsv и fputcsv

Итак, я беру этот основной исходный файл, а затем считываю и помещаю данные в файл «PROPER» csv.

Чтение и запись в порядке, но проблема в том, когда он сохраняет правильно записанные данные, записывает сам файл сценария. Например, если имя моего php-файла «fixcsv.php», то я получаю загружаемый файл как «fixcsv.php».

Мой код

$headings = array('HID'); 
$handle = fopen("MonC1.csv", "r"); 
$data = fgetcsv($handle, 0, ";",'"'); 
$fh = fopen('php://output', 'w'); 
ob_start(); 
fputcsv($fh, $headings); 
// Loop over the * to export 
if (! empty($data)) { 
    foreach ($data as $item) { 
    // echo $item; 
    fputcsv($fh, array($item)); 
    } 
} 
$string = ob_get_clean(); 

$filename = 'csv_' . date('Ymd') .'_' . date('His'); 

// Output CSV-specific headers 
header("Pragma: public"); 
header("Expires: 0"); 
header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
header("Cache-Control: private",false); 
header("Content-Type: application/octet-stream"); 
header("Content-Disposition: attachment filename=\"$filename.csv\";"); 
header("Content-Transfer-Encoding: binary"); 

exit($string); 

Любая помощь высоко ценится. Заранее спасибо.

ответ

1

Ваш Content-Disposition имеет запятую в неправильном месте (per the spec). Должно быть:

header("Content-Disposition: attachment; filename=\"$filename.csv\"); 
+0

Спасибо, но она по-прежнему дает мне SCRIPTNAME, чтобы сохранить файл – Raj

+0

Flush кэш браузера? (Я понимаю, что это должно делать «Cache-Control: private», но тем не менее ...) – bishop

+0

Очистил кеш, но все равно не повезло. Не знаю, почему он просит меня сохранить файл сценария. – Raj

 Смежные вопросы

  • Нет связанных вопросов^_^