Вывод pdf из MySQL?
Как принятно на русских ресурсах не отвечать на вопрос, а давай советы :) Но в этот раз совет важный и даже юзабельный.
Хранить файл в БД - плохо. Может показаться, что это удобно (например, только бэкап БД спасет всех).
Но на самом деле:Растет размер БД. Что делать, если он станет запредельным из-за сохраненных там файлов?Возрастает нагрузка на диски/оперативную память сервера БД.Офигенно растут логи, а это дополнительная нагрузка на диск.Замедлится передача данных от MySQL, т.к. там, во-первых, может быть сеть со своей пропускной способностью, а во-вторых, MySQL будет передавать большой файл маленькими частями (снова оверхед на I/O диска и сети).То, что можно отдать обычным nginx'ом как статику, отдается через костыли.
Хранить блобы можно, конечно, но рано или поздно сделаете БД узким местом. Если и хранить блобы, то очень-очень маленькие, но и даже это спорно и зависит от задачи.
Поэтому отказывайтесь от идеи.Просто в этих пдфках содержаться персональные данные пользователей и нельзя чтобы они имели прямые ссылки(доступ к ним открывается только после авторизации)
Причем здесь БД? Храните файл в том месте, которое не сервится наружу. А доступ до файла регулируйте при запросе. То есть у вас есть какой-то url для файла, там содержится его id, например. Вы проводите авторизацию: если можно забрать файл, спрашиваете у БД ссылку, где он находится на диске (а это место наружу не видно), и отдаете файл подобным образом, как делаете сейчас. НО, если ожидаются крупные файлы, читать файл нужно по частям, иначе можете закончить оперативу. В фреймворках обычно есть для этого инструменты, кстати.
Никогда таким не заморачивался, потому не уверен в своем ответе. получается файл pdf.pdf с размером 0 байт.
попробуйте еще добавить хедер на размер:
header('Content-Length: '.strlen($row['bill']));
возьмите вручную из поля значение и сохраните в пдф, может лежащий там файл поврежден сам по себе.