Допустим, у нас есть клиент (который на самом деле является PHP-скриптом на стороне сервера) и сервер (который также является PHP-скриптом на стороне сервера).
Клиент отправляет HTTP-запрос на сервер через cURL
. Клиент принимает text/csv
, поэтому соответствующий заголовок установлен, и клиент хотел бы сохранить ответ в файл, поэтому опция CURLOPT_FILE
установлена правильно.
Вопрос в том, должен ли сервер при обслуживании запроса отправлять обратно «закодированный» CSV-контент, должен ли он использовать inline
или attachment
в качестве значения для Content-Disposition
заголовка?
Очень простой псевдокод для тестирования: сервер делает что-то вроде этого:
if (file_exists($attachment_location)) {
header($_SERVER["SERVER_PROTOCOL"] . " 200 OK");
header("Cache-Control: public"); // needed for internet explorer
header("Content-Type: text/csv");
header("Content-Length:".filesize($attachment_location));
header("Content-Disposition: inline");
readfile($attachment_location);
die();
} else {
header($_SERVER["SERVER_PROTOCOL"] . " 404 Not found");
}
Или это должно быть что-то вроде:
<?php
$attachment_location = "./c3m.csv";
if (file_exists($attachment_location)) {
header($_SERVER["SERVER_PROTOCOL"] . " 200 OK");
header("Cache-Control: public"); // needed for internet explorer
header("Content-Type: text/csv");
header("Content-Transfer-Encoding: Binary");
header("Content-Length:".filesize($attachment_location));
header("Content-Disposition: attachment; filename=c3m.csv");
readfile($attachment_location);
die();
} else {
header($_SERVER["SERVER_PROTOCOL"] . " 404 Not found");
}