HTTP-заголовок для загрузки файлов Microsoft Word и Excel

Я могу успешно загрузить свое Microsoft Word, если я назвал его по имени файла по умолчанию. Но если я использую $ variables, чтобы назвать его. Расширение документа будет неизвестно.

Образец:

$No = 1; $Name = 'John'; $Test = 'Science'; //Download header $document->save($doc); header('Content-Description: File Transfer'); header('Content-Type: application/msword'); header("Content-Disposition: attachment; filename='$No_$Name_$Test.docx"); header('Content-Transfer-Encoding: binary'); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); header('Content-Length: ' . filesize($doc)); ob_clean(); flush(); readfile($doc); 

Поэтому, если я переименую свое имя файла как переменные. Загрузка файла будет без расширения docx. Кто-нибудь может посоветовать?

благодаря

Изменить это

 header('Content-Type: application/msword'); 

в

 header('Content-Type: application/octet-stream'); 

РЕДАКТИРОВАТЬ:

И изменение

 header("Content-Disposition: attachment; filename='$No_$Name_$Test.docx"); 

в

 header("Content-Disposition: attachment; filename=\"{$No}_{$Name}_{$Test}.docx\""); 

Правильные заголовки

для Excel (* .xlsx):

 header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition: attachment;filename="' . $fileName . '"'); 

для Word (* .docx):

 header('Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document'); header('Content-Disposition: attachment;filename="' . $fileName . '"'); 

Правильное использование этого заголовка:

Content-Disposition: attachment; filename="fname.ext" Content-Disposition: attachment; filename="fname.ext" отмечают, что если имя содержит пробелы, оно должно быть процитировано

См. RFC6266 раздел 5. Примеры