Есть много других вопросов, касающихся x-sendfile, которые не возвращают файлы, но ни один из них, похоже, не может решить мою проблему.
Я обслуживаю изображения из каталога за пределами общедоступного корня сайта и хочу, чтобы эти изображения доставлялись пользователю с минимальными накладными расходами, поэтому я хочу избегать их обработки с помощью readfile (). Поэтому я пытаюсь использовать x-sendfile.
Моя среда разработки состоит из установки XAMPP (apache и php) на 64-битных окнах. Я использую двоичный файл 64-битных окон из mod_xsendfile.so, который, кажется, загружается правильно в соответствии с phpinfo ().
Я думал, что это может быть проблема, связанная с чувствительностью к регистру или обратной косой чертой / прямой перемоткой, но, похоже, это не так.
Файл существует, если я скопирую путь из журнала ошибок и вставлю его в окно проводника, которое загружает изображение. Также я использовал file_exists и filesize для проверки пути в php.
Настройка httpd.conf:
LoadModule xsendfile_module modules/mod_xsendfile.so
XSendFile On
XSendFilePath "c:/images-store/"
Код PHP
header('Content-Type: image/jpeg');
header('X-Sendfile: c:/image-store/5cca6ef24ae46c4346c24846ee3e5521213562ef-thumb.jpg');
Запись в журнале ошибок
[pid 3208:tid 1900] (20023)The given path was above the root path: [client 127.0.0.1:57477] xsendfile: unable to find file: c:/image-store/5cca6ef24ae46c4346c24846ee3e5521213562ef-thumb.jpg
Любое понимание того, как я могу получить эти файлы, было бы здорово.
Оказывается, это была чувствительность к регистру. C в пути должен быть заглавной C.
XSendFilePath C:/images-store/
Я, вероятно, должен вернуться к Linux для моего развития …
Других решений пока нет …