Ну, мне было любопытно, я скачал твой файл и да, при запуске твоего кода это не дало мне application/pdf
, а вместо этого application/octet-stream; charset=binary
Поскольку функция finfo использует сигнатуру файла (в байтах) для определения типа файла MIME, я сделал предположение - что-то должно быть не так с сигнатурой, поэтому я проанализировал ее в программе Hex-viewer, и это то, что я нашел
Ваш файл
![enter image description here](https://i.stack.imgur.com/O0ky0.png)
Обычный файл
![enter image description here](https://i.stack.imgur.com/qERfP.png)
Для правильной идентификации подпись PDF должна присутствовать в самом начале, но в вашем файле она была смещена на 4 байта. Поскольку finfo не смог найти правильный тип MIME, он вернулся к своему универсальному "application / octet-stream; charset = binary"
Так как исправить?
Я должен признать, что встроенные функции php довольно хороши для обычных задач, но иногда здесь и там вы можете столкнуться с тем «крайним случаем», в который входят сторонние библиотеки с открытым исходным кодом, и здесь я обнаружил, что это можно исправить для вас.
PhpMimeType : https://github.com/katzien/PhpMimeType
$type = \MimeType\MimeType::getType('123.pdf');
print_r($type); //"application/pdf"
// Yay!