разрешить загрузку с помощью fputcsv, но исключить лишний HTML-код в выходном файле?

В моем коде я создаю файл с помощью fgetcsv. Я загружаю его и открываю файл, но весь html с моей страницы включен в CSV-файл. В любом случае, я могу просто получить данные, которые я хочу вывести из файла, а не дополнительный html. моя функция для создания csv ниже

function makefile()
{
    header('Content-type: text/csv');
    header("Cache-Control: no-store, no-cache"); 
    header("Content-Disposition: attachment;filename=file.csv");

    $this->filepointer  =   fopen('php://output', 'a');



    for($count=0;$count < count($this->alldata);$count++)
    {
       fputcsv($this->filepointer, $this->alldata[$count]);
    }

    fclose($this->filepointer);

}

также мне было интересно, если я использую $this->filepointer = fopen('file.csv', 'w'), файл все еще будет заполнен html. поскольку мне не нужно загружать файл, я просто использовал его, чтобы проверить, создается ли файл в правильном формате. еще раз спасибо


person eoin    schedule 11.03.2013    source источник
comment
этот код не может включать html, если только он не является частью этого $this->addata. вероятно, ваша страница загрузки реализована неправильно, обертывая файл в html.   -  person Marc B    schedule 11.03.2013
comment
Привет, да, функция вызывается на странице с html-кодом. $this-›alldata — массив массивов. попытался повторить это с помощью var_dump(), и он определенно содержит только полезные данные, без html и т. д.   -  person eoin    schedule 11.03.2013
comment
поэтому, если ваша страница загрузки имеет вид echo 'html'; echo file_get_contents('yourfile.txt');, тогда да... вы получите html. путь кода ссылки для загрузки не должен содержать НИКАКИХ выходных данных, кроме того, что находится в вашем файле.   -  person Marc B    schedule 11.03.2013
comment
Вы должны получить нужные данные из файла или базы данных, которые вы хотите, вы не можете получать данные только из html, за исключением случаев, когда вы делаете это с помощью jQuery.   -  person believe me    schedule 11.03.2013
comment
так что в основном вы говорите, что на странице не должно быть другого кода, чтобы получить только данные массива в формате файла csv? это точно шарики   -  person eoin    schedule 11.03.2013
comment
не могли бы вы пояснить это для меня? ваше здоровье   -  person eoin    schedule 11.03.2013
comment
stackoverflow.com/ вопросов/11995117/ вот оно   -  person eoin    schedule 11.03.2013


Ответы (2)


использовать ob_end_clean(); перед записью файла

person Khan    schedule 13.03.2015

Вы можете попробовать приведенный ниже код. Вам нужно добавить read_file в конце после установки заголовка, как показано ниже.

<?php
if(isset($_GET['link']))
{
    $var_1 = $_GET['link'];
    $file = $var_1;

if (file_exists($file))
    {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($file));
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    exit;
    }
} //- the missing closing brace
?>
person Aman Garg    schedule 07.10.2016