Проблема с загрузкой файла на PHP с размещением содержимого: вложение
На моей веб-странице есть ссылка для загрузки CSV-файла, который я сгенерировал на сервере. Код для загрузки выглядит следующим образом:
//open/save dialog box
header('Content-Disposition: attachment; filename="inventoryData.csv"');
//content type
header('Content-type: application/excel');
//read from server and write to buffer
readfile('spreadsheet/inventory.csv');
Когда я открываю файл на сервере, он выглядит просто отлично. Однако, когда я загружаю файл через диалоговое окно, он предварительно ожидает HTML-код для веб-страницы в файл .csv.
Есть идеи, почему это могло произойти?
3 answers
Если этот код находится в действии контроллера, которое я предполагаю, поскольку вы используете ZF, то вам нужно отключить макет и средство визуализации представления, поскольку оно попытается отобразить представление.
Попробуйте:
public function downloadAction()
{
$this->_helper->layout()->disableLayout();
$this->_helper->viewRenderer->setNoRender(true);
//...
//open/save dialog box
header('Content-Disposition: attachment; filename="inventoryData.csv"');
//content type
header('Content-type: application/excel');
//read from server and write to buffer
readfile('spreadsheet/inventory.csv');
}
$this->_helper->layout()->disableLayout();
предотвращает визуализацию сценария макета (при условии, что вы используете макеты), и $this->_helper->viewRenderer->setNoRender(true);
указывает средству визуализации представления не отображать сценарий представления для действия контроллера, которое может содержать некоторый HTML или пробелы.
Это должно сработать
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=\"inventoryData.csv\";" );
header("Content-Transfer-Encoding: binary");
Попробуйте вот это:
header("Content-type: application/octet-stream");
header("Content-disposition:attachment; filename=inventoryData.csv");