Загрузка файла для csv работает на локальном хосте, но не в реальном времени

Я создаю CSV-файл из вложенного массива, и он отлично работает со ссылкой для загрузки CSV-файла на локальном хосте, но на живом хосте он не загружается. Это то, что находится в моем файле php:

Заголовки объявлены:

/**
* Declare headers for CSV
 */
header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=registration.csv");
header("Pragma: no-cache");
header("Expires: 0");

Функция, которая выводит файл csv:

/**
* Function will output the scsv file
* @param the csv $data in nested array form array(array("","",""),array("",""...)...)
*/
function outputCSV($data) {
$outstream = fopen("php://output", "w");
function __outputCSV(&$vals, $key, $filehandler) {
    fputcsv($filehandler, $vals); // add parameters if you want
}
array_walk($data, "__outputCSV", $outstream);
fclose($outstream);
}

Ссылка, которую я использовал в локальной:

<a href=".../csv/csv.php">Download CSV</a>

Не работает на живом сайте. Вместо загрузки он просто перенаправляет меня на страницу csv.php и выводит массив в виде такой строки.

... ID, "Тренер один", "Тренер два", Рабочий, Мобильный, Электронная почта,...


person Abdullah Rasheed    schedule 20.12.2012    source источник
comment
Что, если вы замените header("Content-type: text/csv"); на header("Content-type: application/octet-stream");?   -  person cheesemacfly    schedule 20.12.2012
comment
Попробуйте удалить заголовки прагмы и срока действия. И поместите имя файла в двойные кавычки с одинарными кавычками вокруг строки, как показано здесь: stackoverflow.com/questions/6544382/   -  person Eric Leschinski    schedule 20.12.2012
comment
Я только что попробовал то, что вы написали выше, и он все равно просто выводит это на экран.   -  person Abdullah Rasheed    schedule 20.12.2012
comment
звучит как проблема с конфигурацией сервера или проблема с путем к файлу. Трудно сказать, если вы не уточните: «Не работает на сайте Live».   -  person Rooster    schedule 20.12.2012


Ответы (2)


Попробуйте жестко закодировать csv в код. Замените эти строки теми, которые вам нужны, чтобы увидеть, есть ли у ваших передаваемых данных неверные символы. Возможно, указание кодировки поможет.

header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=data.csv');
$output = fopen('php://output', 'w');
fputcsv($output, array('Column 1', 'Column 2', 'Column 3'));

Как описано здесь:

http://code.stephenmorley.org/php/creating-downloadable-csv-files/

person Eric Leschinski    schedule 20.12.2012
comment
это сработало, когда заменили то, что есть на ваше. он должен читать его с плохими персонажами. есть кавычки вокруг данных, когда дело доходит до их печати. данные выглядят следующим образом... ID, Coach One, Coach Two, Work, Cell, Email, School/Squad Name, проблема в кавычках? - person Abdullah Rasheed; 20.12.2012
comment
Если у меня работает, а у вас нет, то то, что вы сделали, неверно. Используйте этот код в качестве основы и постепенно добавляйте к нему части, чтобы он делал то, что вы хотите, проверяйте его при каждом добавлении кода. Когда он перестает работать, последнее, что вы сделали, было неправильным. - person Eric Leschinski; 20.12.2012
comment
Спасибо за вашу помощь. Понятно - person Abdullah Rasheed; 21.12.2012
comment
Пожалуйста, опубликуйте исправленный код в ответе, и вы получите голоса. - person Eric Leschinski; 21.12.2012

Я не настроен на то, чтобы действительно отлаживать ваш код. Вы можете попробовать это, если хотите. Я знаю, что это работает.

$out = fopen("php://temp", 'r+');
while (($row = $res->fetch(Zend_Db::FETCH_NUM)) != false) {
    fputcsv($out, $row, ',', '"');
}                       
rewind($out);
$csv  = stream_get_contents($out);
header("Content-Type: application/csv;");
header("Content-Disposition: attachment; filename=\"foo.csv\"");        
header("Pragma: no-cache");
header("Expires: 0");        
echo $csv;
exit(0); 

Отрегулируйте цикл по мере необходимости, чтобы повторить ваши результаты.

person ficuscr    schedule 20.12.2012